OpenSSLを使用して証明書のsubjectaltnameのothernameに日本語の性別を格納しようとしています。
まず、openssl.cnfに以下の文を追加し、othernameの値を設定しました。
Sex = 1.1.1.5
[ v3_req ]
# Extensions to add to a certificate request
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = otherName:Sex;UTF8String:男性
次にOpenSSLコマンドでpemファイルを作成
openssl req -x509 -nodes -days 730 -newkey rsa:2048 -keyout cert.pem
-out cert.pem
ブラウザに読み込むためpfxファイルを作成
openssl pkcs12 -export -out cert.pfx -in cert.pem -name "test"
pfxファイルをブラウザにインポートした後、証明書ストアを確認したところ、othernameに16進数で値は入っていましたが、正確に変換されていませんでした。
Other Name:
1.1.1.5=0c 07 c2 92 6a c2 90 c2 ab
期待値としてはUTF-8の16進数に変換されていると思ったのですが結果としては16進数のShift-JISに近い値でした。
「男性」の16進数UTF-8: e7 94 b7 e6 80 a7
「男性」の16進数Shift-JIS:92 6a 90 ab
正しい値を設定するにはどうすれば良いでしょうか。よろしくお願いします。
追記
@sanadanへの指摘からopenssl.cnfをUTF-8で保存をして、上記処理を再度実施しました。
結果としてはまだうまく変換できませんでした。
UTF8Stringの場合は正しく変換されていない。BITSTRINGの場合は先頭にゴミが入る。他のフォーマットを試してみたがうまく変換されない。正しくはe794b7 e680a7 となるべき。
設定1
subjectAltName = otherName:Sex;UTF8String:男性
結果1
Other Name:
1.1.1.5=0c 0c c3 a7 c2 94 c2 b7 c3 a6 c2 80 c2 a7
設定2
subjectAltName = otherName:Sex;BITSTRING:男性
結果2
Other Name:
1.1.1.5=03 07 00 e7 94 b7 e6 80 a7
上記のように先頭に無駄な文字が入ってしまいますが、BITSTRINGの場合が一番マシに変換できました。