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

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

私はOpenSSLシェルコマンドを使用し、テキストデータベースに情報を保存するPHPのシンプルなPKIウェブアプリケーションを実行しています。非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 形式のままです。このアプローチ出力を utf-8 に変更しますfile --mime-encodingが、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 つの質問が役立つことがわかりました。

関連情報