69394
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の場合が一番マシに変換できました。
CC BY-SA 3.0
2015-06-09T12:30:07.793
11188
2020-08-09T16:34:17.480
2015-06-10T14:03:13.553
9577
9577
question
windows openssl
OpenSSL: 証明書のSubjectaltname属性OtherNameにうまく日本語が設定できない。
設定ファイルがutf8なのにlatinとして受け取っているので、そのlatinをまたutf8にするパターンの文字化けでした。  
5年も前なので解決済みでしょうが、私もはまってしまいました。  
で、 `asn1` と `ASN1_generate_nconf` とにらめっこの末、以下の記述で解決しました。

```

    FORMAT:UTF8,UTF8:男性
    
```

ただ、設定ファイルの書き方によって、FORMATより前に色々書く必要があります。  
私は以下の記述で解決しました。

```

    otherName.1=1.1.1.5;FORMAT:UTF8,UTF8:男性
    
```
CC BY-SA 4.0
2020-08-09T12:47:27.727
69394
2020-08-09T16:34:17.480
2020-08-09T16:34:17.480
3060
41438
11188
answer