OpenSSL 將字元轉換為 UTF-8 文字

OpenSSL 將字元轉換為 UTF-8 文字

我正在 Php 中運行一個簡單的 PKI Web 應用程序,該應用程式使用 OpenSSL shell 命令並將資訊儲存在文字資料庫中。我必須處理非 ASCII 輸入字元(例如德語),但是當建立新憑證時,這些欄位會變成

[...] /C=DE/ST=H\xC3\xA4mburg/L=H\xC3\xA4mburg/O=\xC3\x9FBCD/OU=\xC3\xA4BC/ [...]

我已經添加

[req]
utf8                = yes
string_mask         = utf8only
name_opt            = multiline,-esc_msb,utf8

到 OpenSSL 設定文件,並使用建立憑證

openssl req -utf8 [...]
openssl ca -utf8 [...]

該程式寫出用於請求和建立使用者憑證的臨時設定檔。我已經檢查過,用戶設定檔中的欄位以及 CA 中的欄位都很好。 OpenSSL 建立憑證時會出現此問題。資料庫和證書包含這些代碼而不是正確的字元。

我還嘗試使用將資料庫檔案轉換為 UTF-8,iconv但檔案仍保持 US-ASCII 格式。這種方法將輸出更改file --mime-encoding為 utf-8,但 OpenSSL 繼續以與以前相同的方式寫入新條目。

我還會提到我正在發送 utf-8 標頭並AddDefaultCharset utf-8在虛擬主機中進行設定。區域設定de_DE.utf8在代碼和伺服器上設定。

我缺什麼?任何幫助表示讚賞。

答案1

我也為此苦苦掙扎了好幾天,終於成功了。

-utf8在命令列和utf8 = yes配置中似乎有點多餘。

-utf8 -nameopt multiline,utf8在命令列上使用,我沒有轉義配置文件中的任何內容(我嘗試了幾個版本,但沒有一個有效),上面寫著UTF-8 Unicode 文字當我跑步時file <configfile>

我的語言環境和 cli 配置為使用 utf-8 輸入和輸出,配置類似於:

[req]
prompt = no
distinguished_name = subject

[subject]
C = DE
ST = myutf8state
L = myutf8locality
O = myutf8organization
OU = myutf8organizational unit
CN = my.common.name

我發現 stackoverflow 上的這兩個問題很有幫助:

相關內容