私はOpenSSLシェルコマンドを使用して情報をテキストデータベースに保存する単純なPKI WebアプリケーションをPHPで実行しています。 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に関する次の2つの質問が役に立つことを知りました。