x.509証明書を逆アセンブルします



Hi%username%!



公開鍵インフラストラクチャを比較的よく理解しているにもかかわらず、* .crtファイルの内容が常に完全な謎のままであることがたまたま起こりました。

いいえ、間違えないでください。 x.509証明書には、所有者に関する情報、公開キー、認証センターに関する情報、および電子デジタル署名が含まれていることを知っています。 しかし、次の証明書をインストールするとき、私はいつも好奇心に悩まされていました。

キー識別子と指紋の違いは何ですか? 署名されている証明書データと署名されていない証明書データ そして、どのような種類のデータ構造を使用すると、これらの情報をすべて保存できるため、冗長性が最小限に抑えられます。

しかし最後に、好奇心は怠を克服しました。この投稿では、x.509証明書の構造を説明し、これらおよびその他の質問に答えようとします。



パート1.自己署名証明書



まず、自己署名ルートレベル証明書を検討します。

タスクを簡素化するために、必要なパラメーターのみを含む証明書を生成します。



次のように、Bouncy Castleライブラリを使用してこれを行うことができます。

private void button1_Click(object sender, EventArgs e) { var KeyGenerate = new RsaKeyPairGenerator(); KeyGenerate.Init(new KeyGenerationParameters(new SecureRandom(new CryptoApiRandomGenerator()), 1024)); AsymmetricCipherKeyPair kp = KeyGenerate.GenerateKeyPair(); var gen = new X509V3CertificateGenerator(); var certName = new X509Name("CN=CA"); var serialNo = new BigInteger("1",10); gen.SetSerialNumber(serialNo); gen.SetSubjectDN(certName); gen.SetIssuerDN(certName); gen.SetNotAfter(DateTime.Now.AddYears(100)); gen.SetNotBefore(DateTime.Now); gen.SetSignatureAlgorithm("SHA1WITHRSA"); gen.SetPublicKey(kp.Public); var myCert = gen.Generate(kp.Private); byte[] result = DotNetUtilities.ToX509Certificate(myCert).Export(X509ContentType.Cert); FileStream fs = new FileStream("D:\\test1.crt", FileMode.CreateNew); fs.Write(result, 0, result.Length); fs.Flush(); fs.Close(); }
      
      







この手順の結果、標準のx.509証明書が作成されます。この証明書は、16進エディターの助けを借りて開くと、すばらしい方法で次のようになります。

 30 82 01 8F 30 81 F9 A0 03 02 01 02 02 01 01 30 0D 06 09 2A 86 48 86 F7 0D 01 01 05 05 00 30 0D 31 0B 30 09 06 03 55 04 03 0C 02 43 41 30 20 17 0D 31 33 30 39 31 35 31 35 33 35 30 32 5A 18 0F 32 31 31 33 30 39 32 32 31 35 33 35 30 32 5A 30 0D 31 0B 30 09 06 03 55 04 03 0C 02 43 41 30 81 9F 30 0D 06 09 2A 86 48 86 F7 0D 01 01 01 05 00 03 81 8D 00 30 81 89 02 81 81 00 8D 80 B5 8E 80 8E 94 D1 04 03 6A 45 1A 54 5E 7E EE 6D 0C CB 0B 82 03 F1 7D C9 6F ED 52 02 B2 08 C3 48 D1 24 70 C3 50 C2 1C 40 BC B5 9D F8 E8 A8 41 16 7B 0B 34 1F 27 8D 32 2D 38 BA 18 A5 31 A9 E3 15 20 3D E4 0A DC D8 CD 42 B0 E3 66 53 85 21 7C 90 13 E9 F9 C9 26 5A F3 FF 8C A8 92 25 CD 23 08 69 F4 A2 F8 7B BF CD 45 E8 19 33 F1 AA E0 2B 92 31 22 34 60 27 2E D7 56 04 8B 1B 59 64 77 5F 02 03 01 00 01 30 0D 06 09 2A 86 48 86 F7 0D 01 01 05 05 00 03 81 81 00 0A 1C ED 77 F4 79 D5 EC 73 51 32 25 09 61 F7 00 C4 64 74 29 86 5B 67 F2 3D A9 39 34 6B 3C A9 92 B8 BF 07 13 0B A0 9B DF 41 E2 8A F6 D3 17 53 E1 BA 7F C0 D0 BC 10 B7 9B 63 4F 06 D0 7B AC C6 FB CE 95 F7 8A 72 AA 10 EA B0 D1 6D 74 69 5E 20 68 5D 1A 66 28 C5 59 33 43 DB EE DA 00 80 99 5E DD 17 AC 43 36 1E D0 5B 06 0F 8C 6C 82 D3 BB 3E 2B A5 F1 94 FB 53 7B B0 54 22 6F F6 4C 18 1B 72 1C
      
      





同じ証明書ですが、標準のWindowsツールを使用して既に開いています:

   CA  CA   3   0x1  ... 15.09.2013 15:35:00 GMT  ... 22.09.2113 15:35:00 GMT   (SHA-1) F9 AD 58 B5 50 3D F6 36 5E B8 89 D4 DC C8 5F CC 25 4B 93 A2   (SHA-256) 42 02 24 20 4E 8F 3A 3E 31 38 88 E5 C5 E7 C3 03 14 3A A6 52 EA 78 B9 77 42 5B 99 EB 4B BA 23 82  (1024 )    rsaEncryption  00: 8D 80 B5 8E 80 8E 94 D1 04 03 6A 45 1A 54 5E 7E 10: EE 6D 0C CB 0B 82 03 F1 7D C9 6F ED 52 02 B2 08 20: C3 48 D1 24 70 C3 50 C2 1C 40 BC B5 9D F8 E8 A8 30: 41 16 7B 0B 34 1F 27 8D 32 2D 38 BA 18 A5 31 A9 40: E3 15 20 3D E4 0A DC D8 CD 42 B0 E3 66 53 85 21 50: 7C 90 13 E9 F9 C9 26 5A F3 FF 8C A8 92 25 CD 23 60: 08 69 F4 A2 F8 7B BF CD 45 E8 19 33 F1 AA E0 2B 70: 92 31 22 34 60 27 2E D7 56 04 8B 1B 59 64 77 5F  01 00 01    sha1WithRSAEncryption  00: 0A 1C ED 77 F4 79 D5 EC 73 51 32 25 09 61 F7 00 10: C4 64 74 29 86 5B 67 F2 3D A9 39 34 6B 3C A9 92 20: B8 BF 07 13 0B A0 9B DF 41 E2 8A F6 D3 17 53 E1 30: BA 7F C0 D0 BC 10 B7 9B 63 4F 06 D0 7B AC C6 FB 40: CE 95 F7 8A 72 AA 10 EA B0 D1 6D 74 69 5E 20 68 50: 5D 1A 66 28 C5 59 33 43 DB EE DA 00 80 99 5E DD 60: 17 AC 43 36 1E D0 5B 06 0F 8C 6C 82 D3 BB 3E 2B 70: A5 F1 94 FB 53 7B B0 54 22 6F F6 4C 18 1B 72 1C
      
      





これらの2つのファイル(1つはバイナリデータ、もう1つは証明書の説明)があるので、何が何であるかを理解してみましょう。



まず、* .crtファイルには、証明書に関する情報がエンコードされた形式で格納されていることに注意してください。 コーディングには、ASN.1と呼ばれる特別な言語が使用されます。

ASN.1は、データを表現、エンコード、送信、およびデコードするためのデータ構造を記述する記録標準です。 ウィキペディア


ASN.1を使用すると、さまざまなタイプのデータで構成される複雑な構造を記述できます。 典型的なASN.1ファイルは次のようになります。

ASN.1ファイル
 SEQUENCE(3 elem) SEQUENCE(7 elem) [0](1 elem) INTEGER 2 INTEGER 1 SEQUENCE(2 elem) OBJECT IDENTIFIER 1.2.840.113549.1.1.5 NULL SEQUENCE(1 elem) SET(1 elem) SEQUENCE(2 elem) OBJECT IDENTIFIER 2.5.4.3 UTF8String CA SEQUENCE(2 elem) UTCTime 13-09-15 15:35:02 UTC GeneralizedTime 2113-09-22 15:35:02 UTC SEQUENCE(1 elem) SET(1 elem) SEQUENCE(2 elem) OBJECT IDENTIFIER 2.5.4.3 UTF8String CA SEQUENCE(2 elem) SEQUENCE(2 elem) OBJECT IDENTIFIER 1.2.840.113549.1.1.1 NULL BIT STRING(1 elem) SEQUENCE(2 elem) INTEGER(1024 bit) INTEGER 65537 SEQUENCE(2 elem) OBJECT IDENTIFIER 1.2.840.113549.1.1.5 NULL BIT STRING(1024 bit)
      
      







ただし、ASN.1は「640 KBですべての人に十分なはず」という明るい日に開発されたため、このような面倒な録音でスペースを無駄にする方法はありませんでした。 したがって、スペースを節約するために、ASN.1形式で保存された情報のより便利な処理と同様に、特別なエンコード方式DERが開発されました。



DERエンコードは、次のルールで記述されます。 データ型を特徴付けるバイトが最初に書き込まれ、次にデータ長情報を格納するバイトシーケンスが書き込まれ、次にデータ自体が書き込まれます。



たとえば、整数INTEGER 65537をエンコードするには、 02 03 01 00 01という形式が使用されます。

ここでは、最初のバイト02がINTEGERのタイプを決定します(たとえば、完全なタイプテーブルをここで見つけることができます)。2番目のバイト03はブロックの長さを示します。 そして、後続のバイト01 00 01は、数値65537の16進表記です。



この場合、最も単純な自己署名証明書の説明には、9つのデータ型で十分です。 これらのタイプのコーディングテーブルは次のとおりです。



タイプ名 簡単な説明 DERエンコーディングの型表現
シーケンス さまざまなタイプで構成されるデータ構造を記述するために使用されます。 30
整数 整数 02
オブジェクト識別子 整数のシーケンス。 06
UTCTime 一時タイプ、年を決定するための2桁が含まれています 17
一般化時間 拡張時間タイプ。年を示す4桁が含まれます。 18
セット さまざまなタイプのデータ構造を記述します。 31
UTF8String 文字列データについて説明します。 0C
ヌル 実際にはNULL 05
ビット列 ビットシーケンスを格納するための型。 03




これらの各タイプがどのようにエンコードされているかがわかっているので、* .crtファイルの解析を試みることができます。

30 82 01 8F 30 81 F9 A0 03 02 01 02 02 01 01 30

0D 06 09 2A 86 48 86 F7 0D 01 01 05 05 00 30 0D

31 0B 30 09 06 03 55 04 03 0C 02 43 41 30 20 17

0D 31 33 30 39 31 35 31 35 33 35 30 32 5A 18 0F

32 31 31 33 30 39 32 32 31 35 33 35 30 32 5A 30

0D 31 0B 30 09 06 03 55 04 03 0C 02 43 41 30 81

9F 30 0D 06 09 2A 86 48 86 F7 0D 01 01 01 05 00

03 81 8D 00 30 81 89 02 81 81 00 8D 80 B5 8E 80

8E 94 D1 04 03 6A 45 1A 54 5E 7E EE 6D 0C CB 0B

82 03 F1 7D C9 6F ED 52 02 B2 08 C3 48 D1 24 70

C3 50 C2 1C 40 BC B5 9D F8 E8 A8 41 16 7B 0B 34

1F 27 8D 32 2D 38 BA 18 A5 31 A9 E3 15 20 3D E4

0A DC D8 CD 42 B0 E3 66 53 85 21 7C 90 13 E9 F9

C9 26 5A F3 FF 8C A8 92 25 CD 23 08 69 F4 A2 F8

7B BF CD 45 E8 19 33 F1 AA E0 2B 92 31 22 34 60

27 2E D7 56 04 8B 1B 59 64 77 5F 02 03 01 00 01

30 0D 06 09 2A 86 48 86 F7 0D 01 01 05 05 00 03

81 81 00 0A 1C ED 77 F4 79 D5 EC 73 51 32 25 09

61 F7 00 C4 64 74 29 86 5B 67 F2 3D A9 39 34 6B

3C A9 92 B8 BF 07 13 0B A0 9B DF 41 E2 8A F6 D3

17 53 E1 BA 7F C0 D0 BC 10 B7 9B 63 4F 06 D0 7B

AC C6 FB CE 95 F7 8A 72 AA 10 EA B0 D1 6D 74 69

5E 20 68 5D 1A 66 28 C5 59 33 43 DB EE DA 00 80

99 5E DD 17 AC 43 36 1E D0 5B 06 0F 8C 6C 82 D3

BB 3E 2B A5 F1 94 FB 53 7B B0 54 22 6F F6 4C 18

1B 72 1C



型の識別子のバイトを変換し、ブロックの長さを表すバイトを削除することにより、次の構造を取得します。

 SEQUENCE(3 elem) SEQUENCE(7 elem) [0](1 elem) INTEGER 2 INTEGER 1 SEQUENCE(2 elem) OBJECT IDENTIFIER 1.2.840.113549.1.1.5 NULL SEQUENCE(1 elem) SET(1 elem) SEQUENCE(2 elem) OBJECT IDENTIFIER 2.5.4.3 UTF8String CA SEQUENCE(2 elem) UTCTime 13-09-15 15:35:02 UTC GeneralizedTime 2113-09-22 15:35:02 UTC SEQUENCE(1 elem) SET(1 elem) SEQUENCE(2 elem) OBJECT IDENTIFIER 2.5.4.3 UTF8String CA SEQUENCE(2 elem) SEQUENCE(2 elem) OBJECT IDENTIFIER 1.2.840.113549.1.1.1 NULL BIT STRING(1 elem) SEQUENCE(2 elem) INTEGER 00: 8D 80 B5 8E 80 8E 94 D1 04 03 6A 45 1A 54 5E 7E EE 6D 0C CB 0B 82 03 F1 7D C9 6F ED 52 02 B2 08 C3 48 D1 24 70 C3 50 C2 1C 40 BC B5 9D F8 E8 A8 41 16 7B 0B 34 1F 27 8D 32 2D 38 BA 18 A5 31 A9 E3 15 20 3D E4 0A DC D8 CD 42 B0 E3 66 53 85 21 7C 90 13 E9 F9 C9 26 5A F3 FF 8C A8 92 25 CD 23 08 69 F4 A2 F8 7B BF CD 45 E8 19 33 F1 AA E0 2B 92 31 22 34 60 27 2E D7 56 04 8B 1B 59 64 77 5F INTEGER 65537 SEQUENCE(2 elem) OBJECT IDENTIFIER 1.2.840.113549.1.1.5 NULL BIT STRING 00: 0A 1C ED 77 F4 79 D5 EC 73 51 32 25 09 61 F7 00 C4 64 74 29 86 5B 67 F2 3D A9 39 34 6B 3C A9 92 B8 BF 07 13 0B A0 9B DF 41 E2 8A F6 D3 17 53 E1 BA 7F C0 D0 BC 10 B7 9B 63 4F 06 D0 7B AC C6 FB CE 95 F7 8A 72 AA 10 EA B0 D1 6D 74 69 5E 20 68 5D 1A 66 28 C5 59 33 43 DB EE DA 00 80 99 5E DD 17 AC 43 36 1E D0 5B 06 0F 8C 6C 82 D3 BB 3E 2B A5 F1 94 FB 53 7B B0 54 22 6F F6 4C 18 1B 72 1C
      
      





これは、ブラウザーまたはWindowsで証明書を開いたときに表示されるものに似ています。 各要素について見ていきましょう。





言及する価値のある重要なポイントは、署名が計算されるデータです。 直観的には、署名を含む最後のBIT STRINGフィールドに行くすべてのデータが署名されているように見えるかもしれません。 しかし、実際にはそうではありません。 x.509標準では、TBS証明書(署名される)と呼ばれる証明書の特定の部分が署名されます。 TSB証明書には、すべての添付データを含む第2レベルのシーケンスシーケンスが含まれています。

  SEQUENCE(7 elem) [0](1 elem) INTEGER 2 INTEGER 1 SEQUENCE(2 elem) OBJECT IDENTIFIER 1.2.840.113549.1.1.5 NULL SEQUENCE(1 elem) SET(1 elem) SEQUENCE(2 elem) OBJECT IDENTIFIER 2.5.4.3 UTF8String CA SEQUENCE(2 elem) UTCTime 13-09-15 15:35:02 UTC GeneralizedTime 2113-09-22 15:35:02 UTC SEQUENCE(1 elem) SET(1 elem) SEQUENCE(2 elem) OBJECT IDENTIFIER 2.5.4.3 UTF8String CA SEQUENCE(2 elem) SEQUENCE(2 elem) OBJECT IDENTIFIER 1.2.840.113549.1.1.1 NULL BIT STRING(1 elem) SEQUENCE(2 elem) INTEGER 00: 8D 80 B5 8E 80 8E 94 D1 04 03 6A 45 1A 54 5E 7E EE 6D 0C CB 0B 82 03 F1 7D C9 6F ED 52 02 B2 08 C3 48 D1 24 70 C3 50 C2 1C 40 BC B5 9D F8 E8 A8 41 16 7B 0B 34 1F 27 8D 32 2D 38 BA 18 A5 31 A9 E3 15 20 3D E4 0A DC D8 CD 42 B0 E3 66 53 85 21 7C 90 13 E9 F9 C9 26 5A F3 FF 8C A8 92 25 CD 23 08 69 F4 A2 F8 7B BF CD 45 E8 19 33 F1 AA E0 2B 92 31 22 34 60 27 2E D7 56 04 8B 1B 59 64 77 5F INTEGER 65537
      
      





T.O. x.509証明書のデジタル署名をチェックするタスクに直面している場合は、このために最初にTBS証明書を抽出する必要があります。



別の注記は、証明書のフィンガープリントに関連しています。 ご覧のとおり、証明書自体には指紋に関する情報は含まれていません。 これは、指紋が、証明書ファイル全体からの通常のSHA-1ハッシュ値であり、発行者の署名を含むすべてのフィールドがあるためです。 したがって、指紋を保存する必要はありません。証明書を表示するたびにハッシュを計算するだけです。



パート2.レベル2証明書



あなたと私は自己署名証明書の内部を調べましたが、下位レベルの証明書の構造がルートセンターの証明書とどのように異なるかを理解することは私たちに任されています。

これを行うには、CA証明書の秘密キーを使用して、それに従属するユーザー証明書を作成します。 そしてこれで再び弾む城を助けます。

 private void button2_Click(object sender, EventArgs e) { var KeyGenerate = new RsaKeyPairGenerator(); KeyGenerate.Init(new KeyGenerationParameters(new SecureRandom(new CryptoApiRandomGenerator()), 1024)); AsymmetricCipherKeyPair kp2 = kpgen.GenerateKeyPair(); var gen2 = new X509V3CertificateGenerator(); var certName = new X509Name("CN=CA"); var serialNo = new BigInteger("1",10); var certName2 = new X509Name("CN=User"); var certNameOwner2 = new X509Name("CN=User"); var serialNo2 = new BigInteger("2", 10); gen2.SetSerialNumber(serialNo2); gen2.SetSubjectDN(certName2); gen2.SetIssuerDN(certName); gen2.SetNotAfter(DateTime.Now.AddYears(100)); gen2.SetNotBefore(DateTime.Now.Subtract(new TimeSpan(7, 0, 0, 0))); gen2.SetSignatureAlgorithm("SHA1WITHRSA"); gen2.SetPublicKey(kp2.Public); gen2.AddExtension( X509Extensions.AuthorityKeyIdentifier.Id, false, new AuthorityKeyIdentifier( SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(kp.Public), new GeneralNames(new GeneralName(certName)), serialNo)); var newCert2 = gen2.Generate(kp.Private); byte[] result = DotNetUtilities.ToX509Certificate(newCert2).Export(X509ContentType.Cert); FileStream fs = new FileStream("D:\\FullTest.crt", FileMode.CreateNew); fs.Write(result, 0, result.Length); fs.Flush(); fs.Close(); }
      
      







証明書を解析し、読み取り可能な形式に変換すると、次のような美しさが得られます。

 SEQUENCE(3 elem) SEQUENCE(8 elem) [0](1 elem) INTEGER2 INTEGER2 SEQUENCE(2 elem) OBJECT IDENTIFIER1.2.840.113549.1.1.5 NULL SEQUENCE(1 elem) SET(1 elem) SEQUENCE(2 elem) OBJECT IDENTIFIER2.5.4.3 UTF8StringCA SEQUENCE(2 elem) UTCTime13-09-15 15:35:02 UTC GeneralizedTime2113-09-22 15:35:02 UTC SEQUENCE(1 elem) SET(1 elem) SEQUENCE(2 elem) OBJECT IDENTIFIER2.5.4.3 UTF8StringUser SEQUENCE(2 elem) SEQUENCE(2 elem) OBJECT IDENTIFIER1.2.840.113549.1.1.1 NULL BIT STRING(1 elem) SEQUENCE(2 elem) INTEGER(1024 bit) INTEGER65537 [3](1 elem) SEQUENCE(1 elem) SEQUENCE(2 elem) OBJECT IDENTIFIER2.5.29.35 OCTET STRING(1 elem) SEQUENCE(3 elem) [0](20 byte) 6FBC9476035CB50061524C4ABE9064C9C4C32E6B [1](1 elem) [4](1 elem) SEQUENCE(1 elem) SET(1 elem) SEQUENCE(2 elem) OBJECT IDENTIFIER2.5.4.3 UTF8StringCA [2](1 byte) 01 SEQUENCE(2 elem) OBJECT IDENTIFIER1.2.840.113549.1.1.5 NULL BIT STRING(1024 bit)
      
      





ご覧のとおり、自己署名証明書との唯一の違いは、追加のブロックが存在することです。

 [3](1 elem) SEQUENCE(1 elem) SEQUENCE(2 elem) OBJECT IDENTIFIER 2.5.29.35 OCTET STRING(1 elem) SEQUENCE(3 elem) [0](20 byte) 6FBC9476035CB50061524C4ABE9064C9C4C32E6B [1](1 elem) [4](1 elem) SEQUENCE(1 elem) SET(1 elem) SEQUENCE(2 elem) OBJECT IDENTIFIER 2.5.4.3 UTF8String CA [2](1 byte) 01
      
      





証明書の発行者とその公開キーに関する情報が含まれています。 ここで、1つのコメントを追加したいと思います。 このブロックがなくても、証明書は引き続き機能します。 ここに保存されている情報は、現在の証明書が署名されている発行者のキーをより正確に示す追加情報にすぎません。 ブロックの各要素を個別に検討してください。





最後に、標準ツールを使用して受信した証明書を開き、必要なデータがすべて揃っていることを確認します。

   User  CA   3   0x2  ... 15.09.2013 15:35:00 GMT  ... 22.09.2113 15:35:00 GMT   (SHA-1) A4 E7 9B AD E7 E2 67 B1 8A D6 6F F9 61 0D 42 A9 DB C3 A9 67   (SHA-256) 39 A2 D8 47 CE F7 E7 C3 81 62 8A 4A 65 F3 4A E8 6F 12 B7 8A 1A ED F9 94 6E 57 19 F6 39 DA B7 8F  (1024 )    rsaEncryption  00: A7 BA 25 52 5F 0D 82 EE 2C B1 F0 E1 E2 0D 3F B2 10: 25 06 DB A2 5A B0 D3 00 D7 2C 1F 85 8C 71 73 95 20: 8A 06 6C 04 6D 4B AB 15 50 1E 53 92 9F BA 6E 04 30: 5D 71 6B C0 0A 8E 6C 51 51 2F 27 2E BB 8E C9 FF 40: 9C C2 E2 45 56 26 6B 61 C5 C1 67 0C 6F A9 8A 16 50: 76 8E 12 DB 38 A2 B3 09 6F B3 39 DD 9B EB 98 B7 60: 61 9F 9E 18 65 4F DB AB 74 72 79 AC 14 7C 24 D8 70: 47 16 5B 17 30 CB 6E FB 45 5E D1 04 37 FA 85 C3  01 00 01    sha1WithRSAEncryption  00: 2C 1C D9 7F B4 F2 D0 10 16 7A B7 29 D6 89 A4 A1 10: 2B 4A 78 1B 85 38 53 83 4E 71 3C 81 C0 A5 AD A8 20: AB 16 59 F4 D3 A7 7E 83 2F AE 21 75 9E 91 F6 FC 30: 93 A3 AE F5 27 CF 5F 0B C9 5F DC E1 75 26 D5 39 40: 74 32 39 B9 BD 95 79 A7 EE 02 0C 56 0A A9 A5 83 50: F8 86 0D 6F B5 7F C5 FE 23 0B 4B 5C 65 A8 BC 89 60: 36 37 B3 53 74 BB 25 66 10 F8 53 AA EF 05 9E ED 70: 74 04 E9 3D F4 DF 85 71 37 57 5D E7 D8 C6 8E EA  X509v3 Authority Key Identifier keyid:6F:BC:94:76:03:5C:B5:00:61:52:4C:4A:BE:90:64:C9:C4:C3:2E:6B DirName:/CN=CA serial:01
      
      







おわりに



これらすべてのASN.1式と16進データセットをクロールしてくれた勤勉な人々、読んでくれてありがとう。 少しおもしろかったと思います。 そして、X.509証明書とは何であるかが少し明確になりました。



さて、いつものように、詳細を知りたい人のためのリンクがいくつかあります。

  1. RFC5280 -x.509証明書と証明書失効リストの仕様。
  2. サバイバルガイド-SSL / TLSおよびX.509証明書
  3. ASN.1の簡単な言葉Habrの記事の変形
  4. DERファイルをデコードするためのオンラインユーティリティ
  5. 主な標準はITU-T X.509(+ロシア語翻訳)です。 リンクをありがとう。



All Articles