
我正在 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 上的這兩個問題很有幫助: