PKCS#12 ファイルには通常、X.509 証明書とそれに関連付けられた秘密鍵が含まれています。すべての情報は証明書に保存されるため、最初に抽出する必要があります:
openssl pkcs12 -in foo.p12 -out foo.pem
(foo.pem
との両方の証明書が含まれます 秘密鍵)
UPN は、特別なタイプの「subjectAltName」として証明書に格納されます。残念ながら、OpenSSL は UPN (およびその他の種類の名前) を表示する方法をまだ認識していないため、証明書を調べるための通常のコマンド (openssl x509 -noout -text < foo.pem
) 動作しないでしょう。代わりに、低レベルのツールが必要になります。
証明書を独自のファイルに分割します (テキスト エディターを使用してこれを行うこともできます):
openssl x509 < foo.pem > foo.cert
証明書を ASN.1 構造として出力:
openssl asn1parse -i -dump < foo.cert
subjectAltName 拡張機能を説明する行を見つけます:
742:d=4 hl=3 l= 200 cons: SEQUENCE
745:d=5 hl=2 l= 3 prim: OBJECT :X509v3 Subject Alternative Name
750:d=5 hl=3 l= 192 prim: OCTET STRING [HEX DUMP]:3081BDA036...
asn1parse
を実行します 繰り返しますが、今回は拡張機能のコンテンツ (さらに別の ASN.1 構造) をさらに掘り下げるように指示します。この例では、値 (「OCTET STRING」行) はオフセット 750 から始まります:
openssl asn1parse -i -dump -strparse 750 < foo.cert
最後に、ダンプで UPN を探します。
59:d=1 hl=2 l= 40 cons: cont [ 0 ]
61:d=2 hl=2 l= 10 prim: OBJECT :Microsoft Universal Principal Name
73:d=2 hl=2 l= 26 cons: cont [ 0 ]
75:d=3 hl=2 l= 24 prim: UTF8STRING :[email protected]
GnuTLS ツールがインストールされている場合は、より高速な方法がありますが、信頼性は高くありません。証明書を抽出したら、それを certtool -i < foo.cert
にフィードできます 、認識できない名前であっても生の内容を出力します:
Subject Alternative Name (not critical):
otherName OID: 1.3.6.1.4.1.311.20.2.3
otherName DER: 0c1867726177697479404e554c4c524f5554452e45552e4f5247
otherName ASCII: [email protected]
OID 1.3.6.1.4.1.311.20.2.3
を探します;名前の生の内容が続きます。幸いなことに、それらは単一の UTF8String で構成されているため、"otherName ASCII" の出力は簡単に理解できます。最初の 2 バイト (ここではドットで示されています) を取り除くだけです。
より簡単な方法は、自分の Windows ログインを入力してみることです。 UPN は常に [email protected]
の形式です .
(少し悲しいことに、私が試したすべてのツールの中で、そのような単純で一般的に使用されている (たとえ独自仕様であっても) 名前の種類を解釈する方法を知っているツールはほとんどありませんでした。)