GNU/Linux >> Linux の 問題 >  >> Linux

Linux で p12 証明書のユーザー プリンシパル名または UPN を印刷/表示するにはどうすればよいですか?

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] の形式です .

(少し悲しいことに、私が試したすべてのツールの中で、そのような単純で一般的に使用されている (たとえ独自仕様であっても) 名前の種類を解釈する方法を知っているツールはほとんどありませんでした。)


Linux
  1. Linux で PATH 変数を変更する方法

  2. Linux pthreads でスレッドの名前を設定するには?

  3. Linuxでキーボードの状態を取得するにはどうすればよいですか?

  1. Makefile でユーザー名を取得するにはどうすればよいですか?

  2. システムが現在プロセスで使用されていると言っているときに、Linuxでユーザーを削除するにはどうすればよいですか

  3. Linux でユーザーに初期/デフォルト パスワードを割り当てるにはどうすればよいですか?

  1. コマンドラインを使用してLinuxでユーザーを削除する方法

  2. Rsync〜/ foo Target / fooはRsync〜/ foo / Target / foo /と同じですか?

  3. Linuxのfindコマンドを使用して、ファイル名の代わりにコンテンツを印刷するにはどうすればよいですか?