OpenSSLは文字をUTF-8リテラルに変換します。

OpenSSLは文字をUTF-8リテラルに変換します。

私は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-encodingutf-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つの質問が役に立つことを知りました。

関連情報