実際に発行されている CRL に条件を近づけてみる

前回,CRL の処理をだらだらと書いてみたわけですが,http で公開されている CRL を見てみると,Extensions が無いか,
または,Extensions が含まれていても,CRL Number と Authority Key Identifier の 2 つを含むだけであり,
Issuing Distrubution Point は含まれていないことが多いようです

そこで,前回の処理から Issuing Distribution Point を省いた場合の処理を追ってみます
また,証明書の cRLDistributionPoitns に Reasons が含まれていないことが多いようです
つまり,CRL は分割されずに,1 つの Distirbution Point の CRL が全ての失効理由を扱うことになります

条件

  1. delta CRL は使用しない
  2. 検証対象の証明書は,Root CA 証明書から直接発行されている
  3. CRL は,Root CA 証明書から直接発行されている
  4. 対象の証明書を検証する CRL の入手先は 1 つだけとする
  5. 下記で示す証明書と,CRL を使用する
  6. CRL は Issuing Distribution Point Extension を含まない
  7. 証明書の cRLDistributionPoints Extension の DistributionPoint に Reasons を含まない

Root CA 証明書

  Certificate:
      Data:
          Version: 3 (0x2)
          Serial Number: 1 (0x1)
      Signature Algorithm: sha1WithRSAEncryption
          Issuer: C=JP, CN=CA
          Validity
              Not Before: Dec 19 15:58:24 2012 GMT
              Not After : Jan 31 06:00:00 2013 GMT
          Subject: C=JP, CN=CA
          Subject Public Key Info:
              Public Key Algorithm: rsaEncryption
                  Public-Key: (2048 bit)
                  Modulus:
                      00:b3:df:e2:43:87:62:c1:dd:4c:e9:5c:1e:0a:43:
                      a4:37:78:a5:f3:70:3c:f4:cb:9a:b4:8d:a1:9a:c8:
                      76:47:dc:f0:f7:f6:f7:d2:bf:7c:f4:76:c0:80:fb:
                      f2:e8:b8:8e:7d:86:5d:09:66:7e:ff:79:4f:38:f5:
                      0f:1d:1b:fe:8a:16:62:38:0f:e7:09:26:15:f9:b6:
                      36:21:b1:93:f2:b8:a1:41:9a:34:97:cf:75:fd:f3:
                      a3:de:55:09:f5:5c:ba:56:07:32:b3:f4:95:38:5b:
                      60:59:83:a1:7b:cd:36:9c:b9:f1:4b:df:74:40:a4:
                      0c:09:cf:88:74:a3:75:3a:54:b8:e1:15:b8:99:ce:
                      2f:89:ff:41:7e:5b:32:56:74:ce:1c:c3:80:44:aa:
                      99:ff:3a:36:56:14:3a:74:cf:da:4d:62:28:70:35:
                      9e:9b:5a:e4:81:1b:3e:d0:a9:e0:53:02:41:e3:28:
                      a9:ef:15:01:48:0a:0c:a1:cb:16:90:38:c4:8c:ea:
                      8e:f9:0c:95:c2:1f:3c:ec:22:c9:76:b6:7b:2c:60:
                      ff:d5:fd:80:3c:91:ca:5a:20:e2:94:01:0e:dd:e1:
                      3f:e5:5c:8f:c4:a3:ed:fb:66:14:b3:2a:42:47:37:
                      dd:dc:6b:57:24:58:ac:e7:2d:67:15:be:cf:94:ae:
                      a5:ff
                  Exponent: 3 (0x3)
          X509v3 extensions:
              X509v3 Subject Key Identifier: 
                  4C:1E:86:57:FC:A7:D6:EB:73:B1:F3:CA:52:E4:FE:77:2A:0A:C0:7C
              X509v3 Authority Key Identifier: 
                  keyid:4C:1E:86:57:FC:A7:D6:EB:73:B1:F3:CA:52:E4:FE:77:2A:0A:C0:7C
  
              X509v3 Basic Constraints: critical
                  CA:TRUE
              X509v3 Key Usage: critical
                  Certificate Sign, CRL Sign
      Signature Algorithm: sha1WithRSAEncryption
           16:a0:c7:a0:fc:c2:7d:ad:f4:c7:4c:11:78:a7:e1:0e:ac:ed:
           d8:d2:f8:91:81:27:72:44:cd:19:a4:03:a7:ca:0b:e8:49:5e:
           8d:9f:a7:2a:39:6c:2a:f1:af:16:ee:b0:1b:fd:5a:56:e6:74:
           fa:56:80:11:d1:5f:6e:96:89:91:c9:85:cf:0e:a8:a5:cb:52:
           23:64:d6:97:ac:15:e4:c9:03:1e:03:b8:c9:86:ea:e8:0f:e2:
           a4:ef:00:cc:61:09:b5:c9:4a:18:07:f9:4c:08:ee:3a:60:92:
           8e:5d:d0:43:ad:e7:df:56:5a:c0:d8:5e:92:58:1c:0c:50:a6:
           bb:54:fc:1f:e6:32:9b:ed:43:b7:f1:31:53:44:54:d9:4b:4f:
           37:3e:0b:f3:12:c1:0c:d2:db:08:0d:2a:18:84:a5:2a:67:3b:
           ac:4a:7f:de:38:95:98:d3:5a:9a:e3:eb:10:71:f1:6e:47:b2:
           09:41:da:cd:ec:16:2a:b3:16:94:dd:b5:c5:71:03:28:67:19:
           a8:c2:09:ab:35:d5:69:03:86:24:f2:b1:7a:4b:49:d5:1d:cf:
           be:cb:19:bd:4f:d2:56:25:c8:6a:31:46:f2:14:a3:93:39:20:
           f6:ee:0d:8c:e8:cb:df:99:95:f7:4b:7f:9b:f7:9f:39:59:9c:
           69:62:56:3f
  -----BEGIN CERTIFICATE-----
  MIIDEDCCAfigAwIBAgIBATANBgkqhkiG9w0BAQUFADAaMQswCQYDVQQGEwJKUDEL
  MAkGA1UEAwwCQ0EwHhcNMTIxMjE5MTU1ODI0WhcNMTMwMTMxMDYwMDAwWjAaMQsw
  CQYDVQQGEwJKUDELMAkGA1UEAwwCQ0EwggEgMA0GCSqGSIb3DQEBAQUAA4IBDQAw
  ggEIAoIBAQCz3+JDh2LB3UzpXB4KQ6Q3eKXzcDz0y5q0jaGayHZH3PD39vfSv3z0
  dsCA+/LouI59hl0JZn7/eU849Q8dG/6KFmI4D+cJJhX5tjYhsZPyuKFBmjSXz3X9
  86PeVQn1XLpWBzKz9JU4W2BZg6F7zTacufFL33RApAwJz4h0o3U6VLjhFbiZzi+J
  /0F+WzJWdM4cw4BEqpn/OjZWFDp0z9pNYihwNZ6bWuSBGz7QqeBTAkHjKKnvFQFI
  CgyhyxaQOMSM6o75DJXCHzzsIsl2tnssYP/V/YA8kcpaIOKUAQ7d4T/lXI/Eo+37
  ZhSzKkJHN93ca1ckWKznLWcVvs+UrqX/AgEDo2MwYTAdBgNVHQ4EFgQUTB6GV/yn
  1utzsfPKUuT+dyoKwHwwHwYDVR0jBBgwFoAUTB6GV/yn1utzsfPKUuT+dyoKwHww
  DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQEFBQAD
  ggEBABagx6D8wn2t9MdMEXin4Q6s7djS+JGBJ3JEzRmkA6fKC+hJXo2fpyo5bCrx
  rxbusBv9WlbmdPpWgBHRX26WiZHJhc8OqKXLUiNk1pesFeTJAx4DuMmG6ugP4qTv
  AMxhCbXJShgH+UwI7jpgko5d0EOt599WWsDYXpJYHAxQprtU/B/mMpvtQ7fxMVNE
  VNlLTzc+C/MSwQzS2wgNKhiEpSpnO6xKf944lZjTWprj6xBx8W5HsglB2s3sFiqz
  FpTdtcVxAyhnGajCCas11WkDhiTysXpLSdUdz77LGb1P0lYlyGoxRvIUo5M5IPbu
  DYzoy9+ZlfdLf5v3nzlZnGliVj8=
  -----END CERTIFICATE-----

end entity 証明書

  Certificate:
      Data:
          Version: 3 (0x2)
          Serial Number: 2416150925 (0x9003898d)
      Signature Algorithm: sha1WithRSAEncryption
          Issuer: C=JP, CN=CA
          Validity
              Not Before: Dec 19 15:58:24 2012 GMT
              Not After : Jan 21 06:00:00 2013 GMT
          Subject: C=JP, CN=end entity
          Subject Public Key Info:
              Public Key Algorithm: rsaEncryption
                  Public-Key: (2048 bit)
                  Modulus:
                      00:c3:58:76:85:6e:d3:07:7d:4e:50:b7:40:ba:60:
                      36:5e:0d:5a:e0:47:9b:f9:43:ad:09:8f:2d:60:2f:
                      5f:dd:f5:dd:f0:0a:b3:2f:1f:bb:4a:df:48:54:5c:
                      9a:b2:1e:9f:e8:3f:4a:a9:8d:52:3b:ba:9c:c5:a5:
                      66:31:1c:5e:36:ef:41:a3:5e:16:74:b3:31:1c:82:
                      be:b6:d2:75:94:bb:fd:fc:96:67:f9:7f:b2:43:26:
                      ab:93:76:35:96:e2:f6:1b:58:8e:c4:90:62:44:0e:
                      01:dd:14:84:e8:e5:38:6d:ec:ba:f6:8d:e3:0a:61:
                      ea:d4:b4:d2:df:38:34:c4:e8:dc:35:8f:ef:70:b4:
                      5e:61:34:1d:1b:b1:97:f0:5b:fc:c7:d8:e3:37:52:
                      3f:cc:cd:f5:da:32:af:c4:f1:48:95:2a:f0:6a:67:
                      7c:38:dd:8c:5e:c8:90:99:f3:e9:a3:f2:99:f0:90:
                      a0:5e:d3:33:14:cf:0f:34:4b:f8:4e:f9:cd:18:a2:
                      1a:2f:85:e0:21:d6:4d:00:04:47:e5:5f:b5:68:97:
                      20:5b:3a:67:50:74:1b:46:81:eb:64:6e:4f:b3:ec:
                      55:7e:a9:f5:87:1b:78:75:3b:77:60:b2:49:15:bf:
                      f3:e2:db:92:f1:25:56:50:d4:ed:17:1a:ba:fa:39:
                      9e:05
                  Exponent: 3 (0x3)
          X509v3 extensions:
              X509v3 Subject Key Identifier: 
                  4E:14:00:73:08:C8:D4:13:0B:EC:E7:1C:AF:5E:A1:5E:81:84:0B:90
              X509v3 Authority Key Identifier: 
                  keyid:4C:1E:86:57:FC:A7:D6:EB:73:B1:F3:CA:52:E4:FE:77:2A:0A:C0:7C
  
              X509v3 Basic Constraints: critical
                  CA:FALSE
              X509v3 Extended Key Usage: 
                  TLS Web Client Authentication
              X509v3 CRL Distribution Points: 
  
                  Full Name:
                    URI:http://example.com/example.crl
  
      Signature Algorithm: sha1WithRSAEncryption
           22:1d:ae:06:b4:5d:e7:22:3b:b2:9e:fb:7b:0a:30:0d:15:d6:
           10:84:c3:9c:90:ad:45:09:fc:f9:a4:87:42:78:aa:b1:94:94:
           1c:26:d4:34:4a:44:24:02:7b:00:5e:69:cf:ab:c7:b0:57:be:
           ac:c2:da:e9:3d:ef:a0:30:e4:8d:da:57:95:27:81:57:72:8a:
           7d:fa:f2:0d:28:4c:4e:0f:f7:cd:7f:fe:fa:8a:4c:5e:f2:5d:
           8c:ed:6f:58:64:21:97:97:17:b2:a9:d5:53:15:51:02:78:e2:
           b4:67:48:ef:0e:da:b8:ac:69:49:c9:40:61:22:23:24:90:4f:
           cf:30:55:de:a8:e5:11:e0:03:cb:4c:bf:4d:b8:53:57:e2:6b:
           20:80:82:c6:09:b2:58:ff:b5:f6:67:6c:75:63:c7:c9:8e:fe:
           cf:f4:7a:2d:a7:f0:2d:02:b3:05:4e:85:48:c2:9f:a7:b2:bf:
           4a:a2:97:a7:20:c8:cc:5c:ed:bb:3a:4c:08:da:32:c0:c6:7f:
           28:0b:f8:2a:ba:61:90:53:50:3c:b5:28:e4:60:87:ad:f3:12:
           44:4d:47:4d:81:87:9b:f4:d4:6f:cd:0f:3a:a9:c7:a6:e2:d4:
           45:a1:bb:93:a3:20:1d:c7:19:d2:e3:c4:85:cd:1a:13:38:fb:
           75:56:b2:c3
  -----BEGIN CERTIFICATE-----
  MIIDUTCCAjmgAwIBAgIFAJADiY0wDQYJKoZIhvcNAQEFBQAwGjELMAkGA1UEBhMC
  SlAxCzAJBgNVBAMMAkNBMB4XDTEyMTIxOTE1NTgyNFoXDTEzMDEyMTA2MDAwMFow
  IjELMAkGA1UEBhMCSlAxEzARBgNVBAMMCmVuZCBlbnRpdHkwggEgMA0GCSqGSIb3
  DQEBAQUAA4IBDQAwggEIAoIBAQDDWHaFbtMHfU5Qt0C6YDZeDVrgR5v5Q60Jjy1g
  L1/d9d3wCrMvH7tK30hUXJqyHp/oP0qpjVI7upzFpWYxHF4270GjXhZ0szEcgr62
  0nWUu/38lmf5f7JDJquTdjWW4vYbWI7EkGJEDgHdFITo5Tht7Lr2jeMKYerUtNLf
  ODTE6Nw1j+9wtF5hNB0bsZfwW/zH2OM3Uj/MzfXaMq/E8UiVKvBqZ3w43YxeyJCZ
  8+mj8pnwkKBe0zMUzw80S/hO+c0YohovheAh1k0ABEflX7VolyBbOmdQdBtGgetk
  bk+z7FV+qfWHG3h1O3dgskkVv/Pi25LxJVZQ1O0XGrr6OZ4FAgEDo4GXMIGUMB0G
  A1UdDgQWBBROFABzCMjUEwvs5xyvXqFegYQLkDAfBgNVHSMEGDAWgBRMHoZX/KfW
  63Ox88pS5P53KgrAfDAMBgNVHRMBAf8EAjAAMBMGA1UdJQQMMAoGCCsGAQUFBwMC
  MC8GA1UdHwQoMCYwJKAioCCGHmh0dHA6Ly9leGFtcGxlLmNvbS9leGFtcGxlLmNy
  bDANBgkqhkiG9w0BAQUFAAOCAQEAIh2uBrRd5yI7sp77ewowDRXWEITDnJCtRQn8
  +aSHQniqsZSUHCbUNEpEJAJ7AF5pz6vHsFe+rMLa6T3voDDkjdpXlSeBV3KKffry
  DShMTg/3zX/++opMXvJdjO1vWGQhl5cXsqnVUxVRAnjitGdI7w7auKxpSclAYSIj
  JJBPzzBV3qjlEeADy0y/TbhTV+JrIICCxgmyWP+19mdsdWPHyY7+z/R6LafwLQKz
  BU6FSMKfp7K/SqKXpyDIzFztuzpMCNoywMZ/KAv4KrphkFNQPLUo5GCHrfMSRE1H
  TYGHm/TUb80POqnHpuLURaG7k6MgHccZ0uPEhc0aEzj7dVayww==
  -----END CERTIFICATE-----

CRL

  Certificate Revocation List (CRL):
          Version 2 (0x1)
      Signature Algorithm: sha1WithRSAEncryption
          Issuer: /C=JP/CN=CA
          Last Update: Dec 19 15:58:24 2012 GMT
          Next Update: Dec 21 06:00:00 2012 GMT
          CRL extensions:
              X509v3 CRL Number: 
                  1
              X509v3 Authority Key Identifier: 
                  keyid:4C:1E:86:57:FC:A7:D6:EB:73:B1:F3:CA:52:E4:FE:77:2A:0A:C0:7C
  
  Revoked Certificates:
      Serial Number: 01
          Revocation Date: Dec 19 15:58:24 2012 GMT
          CRL entry extensions:
              X509v3 CRL Reason Code: 
                  Key Compromise
      Serial Number: 9003898D
          Revocation Date: Dec 19 15:58:24 2012 GMT
          CRL entry extensions:
              X509v3 CRL Reason Code: 
                  Key Compromise
      Signature Algorithm: sha1WithRSAEncryption
           66:88:62:4c:6e:01:1e:f7:53:65:8b:17:e9:bc:87:c8:65:a9:
           b2:27:b3:f8:c9:9d:8a:c6:fc:a1:23:d1:72:fb:23:ba:fc:59:
           85:d4:7f:d2:99:ed:61:25:3c:3a:ac:c7:db:f4:6d:f0:2d:99:
           59:9f:67:ff:2e:1e:4e:6f:d3:a4:52:e6:a2:c0:bf:ef:db:ba:
           b0:1d:ee:fd:1f:49:42:32:08:aa:09:61:47:cc:cc:70:ea:d4:
           77:01:f4:13:c9:37:81:f9:d2:d8:bf:e6:cd:07:e6:5a:e1:09:
           4e:e3:3f:1a:ba:e1:92:ad:7f:92:ee:20:72:d0:5e:83:d9:9c:
           6c:af:b1:58:f5:22:52:5e:42:2a:d0:02:81:01:33:6e:f7:42:
           91:5b:0a:a2:b2:cc:a4:61:07:e6:23:43:9b:11:29:c2:92:56:
           b5:5d:41:69:52:7d:fa:8b:b8:ce:55:16:f5:52:eb:4d:41:f8:
           b8:8c:5e:29:66:bf:bd:49:bf:83:62:35:ac:91:13:75:75:fe:
           7f:3b:91:82:0b:a9:f6:01:1f:53:8a:e2:fe:e6:fd:58:6b:90:
           ed:1a:9d:e2:44:dd:36:38:b4:51:03:e6:6b:4c:ba:aa:cf:77:
           bb:f4:6b:28:00:93:06:02:60:1f:92:27:25:5d:0d:02:fb:2e:
           24:57:60:f8
  -----BEGIN X509 CRL-----
  MIIB3jCBxwIBATANBgkqhkiG9w0BAQUFADAaMQswCQYDVQQGEwJKUDELMAkGA1UE
  AwwCQ0EXDTEyMTIxOTE1NTgyNFoXDTEyMTIyMTA2MDAwMFowSDAgAgEBFw0xMjEy
  MTkxNTU4MjRaMAwwCgYDVR0VBAMKAQEwJAIFAJADiY0XDTEyMTIxOTE1NTgyNFow
  DDAKBgNVHRUEAwoBAaAvMC0wCgYDVR0UBAMCAQEwHwYDVR0jBBgwFoAUTB6GV/yn
  1utzsfPKUuT+dyoKwHwwDQYJKoZIhvcNAQEFBQADggEBAGaIYkxuAR73U2WLF+m8
  h8hlqbIns/jJnYrG/KEj0XL7I7r8WYXUf9KZ7WElPDqsx9v0bfAtmVmfZ/8uHk5v
  06RS5qLAv+/burAd7v0fSUIyCKoJYUfMzHDq1HcB9BPJN4H50ti/5s0H5lrhCU7j
  Pxq64ZKtf5LuIHLQXoPZnGyvsVj1IlJeQirQAoEBM273QpFbCqKyzKRhB+YjQ5sR
  KcKSVrVdQWlSffqLuM5VFvVS601B+LiMXilmv71Jv4NiNayRE3V1/n87kYILqfYB
  H1OK4v7m/VhrkO0aneJE3TY4tFED5mtMuqrPd7v0aygAkwYCYB+SJyVdDQL7LiRX
  YPg=
  -----END X509 CRL-----

処理(前回と同じ)

  • 以前に処理された CRL はローカル CRL キャッシュに保存されます
  • delta CRL は使用しないため,これ以下では complete CRL は単に CRL と記載します
  • ここでは,上記の証明書と CRL の場合に検証する内容のみを記載します

1. CRL の Next Update の値のチェック

前回と同じため省略

2. CRL の Issuer と証明書の Issuer が一致することの確認

前回と同じため省略

3. 上記で取得した失効理由の集合が,これまでに検証した CRL がサポートしている失効理由に含まれていなかった失効理由を 1 つ以上含んでいることの確認

IDP Extension が無く,CRL は分割されていないため,全ての失効理由を含みます

4. CRL の発行者についての認証パスの取得と検証

前回と同じため省略

5. Key Usage Extension が CRL 発行者の証明書に存在している場合の検証

前回と同じため省略

6. 上記 4 で検証された公開鍵を使用して,CRL の署名を検証

前回と同じため省略

7. CRL 上の証明書を検索して,対象の証明書の発行者とシリアル番号が一致するエントリがあるかの確認

一致するエントリが存在している場合は,unspecified とします
一致するエントリが存在していない場合は UNREVOKED です

CRL を分割していない場合は,この時点で全ての失効理由に対する検証がおこなわれているため,この時点で失効の状態は決定します

CRL 処理について一旦書き出してみる

RFC を読んでいて、手順を追っていくのがつらくなってきたので,
条件を絞った上での処理をいったん書き出してみます

条件

  1. delta CRL は使用しない(そもそも需要はあるのか?)
  2. 検証対象の証明書は,Root CA 証明書から直接発行されている
  3. CRL は,Root CA 証明書から直接発行されている
  4. 対象の証明書を検証する CRL の入手先は 1 つだけとする
  5. 下記で示す証明書と,CRL を使用する

Root CA 証明書

  Certificate:
      Data:
          Version: 3 (0x2)
          Serial Number: 1 (0x1)
      Signature Algorithm: sha1WithRSAEncryption
          Issuer: C=JP, CN=CA
          Validity
              Not Before: Dec 16 06:24:36 2012 GMT
              Not After : Jan 31 06:00:00 2013 GMT
          Subject: C=JP, CN=CA
          Subject Public Key Info:
              Public Key Algorithm: rsaEncryption
                  Public-Key: (2048 bit)
                  Modulus:
                      00:b8:4c:d7:44:3c:42:04:0d:60:4e:82:8c:2c:19:
                      09:8c:e1:1e:65:a3:b8:91:17:54:86:85:e7:b4:31:
                      f9:17:3a:8a:28:57:23:ba:af:c4:c7:31:73:fe:19:
                      e9:d9:42:b4:1c:64:b1:2d:f4:1d:f6:5b:47:77:84:
                      6d:a9:eb:03:04:77:13:b6:d9:68:88:ff:53:91:a3:
                      88:a6:63:08:b1:e1:bf:7b:0c:15:eb:c3:53:02:ae:
                      c6:d4:7d:59:55:e7:07:90:ea:d3:24:e4:c6:f1:a9:
                      35:32:24:a3:a8:31:15:dd:30:19:34:e2:d5:7b:5d:
                      16:6a:94:33:83:f7:a8:91:89:c5:6e:a7:a6:35:a2:
                      4e:61:bd:21:bc:3a:bc:d9:8e:4d:2b:67:75:3a:2d:
                      77:0f:8b:a7:e3:a9:bf:a8:99:4d:ae:6a:83:35:fd:
                      50:e4:45:8d:7f:96:5b:63:aa:ea:73:a7:84:2b:6c:
                      7c:bb:06:40:35:37:a2:9b:e0:58:56:da:9f:b4:b1:
                      25:00:89:bf:89:50:7e:49:64:ef:74:bd:d4:17:bf:
                      63:e8:11:60:a1:8f:5e:c4:45:b9:0c:62:c9:3c:a5:
                      9a:45:4f:df:31:11:d9:8c:75:6d:4a:ce:73:df:4f:
                      6e:66:05:60:47:fc:bf:80:f4:ed:8f:86:65:89:c6:
                      70:67
                  Exponent: 3 (0x3)
          X509v3 extensions:
              X509v3 Subject Key Identifier: 
                  E1:92:E7:CD:7D:34:CD:BB:D0:E4:92:D4:55:EF:8A:D9:08:F1:9D:6C
              X509v3 Authority Key Identifier: 
                  keyid:E1:92:E7:CD:7D:34:CD:BB:D0:E4:92:D4:55:EF:8A:D9:08:F1:9D:6C
  
              X509v3 Basic Constraints: critical
                  CA:TRUE
              X509v3 Key Usage: critical
                  Certificate Sign, CRL Sign
      Signature Algorithm: sha1WithRSAEncryption
           66:af:b0:50:c0:a7:22:98:6d:57:4d:93:d5:e4:36:ec:4e:9a:
           da:48:e1:69:b9:0a:69:a7:c5:f5:33:3a:2a:4c:3d:22:72:41:
           83:b6:4c:8b:ef:4c:d0:e3:81:68:98:43:97:26:ab:3b:f2:f4:
           3f:ef:31:9e:d2:22:f3:d1:28:d5:61:d2:57:b1:f7:29:aa:e7:
           b7:56:79:e8:e7:53:66:ef:5c:3d:23:33:4e:c7:de:13:a5:ab:
           6e:a8:48:dc:43:ef:6f:73:ae:35:1e:63:af:65:9c:c9:d7:b9:
           e7:3f:5d:5f:9a:c9:6b:5f:50:35:b1:fe:e2:de:c6:7f:a0:9f:
           e0:b3:ee:b2:a8:29:03:cb:5b:e7:dd:dc:8c:92:85:38:15:31:
           e3:60:19:7c:9f:78:ab:92:86:5c:91:cc:f9:b4:5c:ad:a4:f1:
           a4:78:ef:ec:d3:11:91:5b:05:5b:5e:1d:77:8d:fb:ba:a1:ca:
           01:83:18:cf:d9:54:27:bd:9d:89:e7:79:27:43:2d:14:3b:6f:
           aa:a0:b8:11:be:b4:ab:0e:f2:8f:85:91:79:7d:99:16:ca:bc:
           ac:6d:11:84:68:cd:6c:4b:9e:b4:aa:21:ff:39:bc:d8:ec:08:
           37:23:a9:2a:55:23:84:ab:96:fa:e1:1f:8c:b2:b7:a5:c7:85:
           0f:9f:6b:72
  -----BEGIN CERTIFICATE-----
  MIIDEDCCAfigAwIBAgIBATANBgkqhkiG9w0BAQUFADAaMQswCQYDVQQGEwJKUDEL
  MAkGA1UEAwwCQ0EwHhcNMTIxMjE2MDYyNDM2WhcNMTMwMTMxMDYwMDAwWjAaMQsw
  CQYDVQQGEwJKUDELMAkGA1UEAwwCQ0EwggEgMA0GCSqGSIb3DQEBAQUAA4IBDQAw
  ggEIAoIBAQC4TNdEPEIEDWBOgowsGQmM4R5lo7iRF1SGhee0MfkXOoooVyO6r8TH
  MXP+GenZQrQcZLEt9B32W0d3hG2p6wMEdxO22WiI/1ORo4imYwix4b97DBXrw1MC
  rsbUfVlV5weQ6tMk5MbxqTUyJKOoMRXdMBk04tV7XRZqlDOD96iRicVup6Y1ok5h
  vSG8OrzZjk0rZ3U6LXcPi6fjqb+omU2uaoM1/VDkRY1/lltjqupzp4QrbHy7BkA1
  N6Kb4FhW2p+0sSUAib+JUH5JZO90vdQXv2PoEWChj17ERbkMYsk8pZpFT98xEdmM
  dW1KznPfT25mBWBH/L+A9O2PhmWJxnBnAgEDo2MwYTAdBgNVHQ4EFgQU4ZLnzX00
  zbvQ5JLUVe+K2QjxnWwwHwYDVR0jBBgwFoAU4ZLnzX00zbvQ5JLUVe+K2QjxnWww
  DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQEFBQAD
  ggEBAGavsFDApyKYbVdNk9XkNuxOmtpI4Wm5CmmnxfUzOipMPSJyQYO2TIvvTNDj
  gWiYQ5cmqzvy9D/vMZ7SIvPRKNVh0lex9ymq57dWeejnU2bvXD0jM07H3hOlq26o
  SNxD729zrjUeY69lnMnXuec/XV+ayWtfUDWx/uLexn+gn+Cz7rKoKQPLW+fd3IyS
  hTgVMeNgGXyfeKuShlyRzPm0XK2k8aR47+zTEZFbBVteHXeN+7qhygGDGM/ZVCe9
  nYnneSdDLRQ7b6qguBG+tKsO8o+FkXl9mRbKvKxtEYRozWxLnrSqIf85vNjsCDcj
  qSpVI4SrlvrhH4yyt6XHhQ+fa3I=
  -----END CERTIFICATE-----

end entity 証明書

  Certificate:
      Data:
          Version: 3 (0x2)
          Serial Number: 2927772090 (0xae8241ba)
      Signature Algorithm: sha1WithRSAEncryption
          Issuer: C=JP, CN=CA
          Validity
              Not Before: Dec 16 06:24:36 2012 GMT
              Not After : Jan 21 06:00:00 2013 GMT
          Subject: C=JP, CN=end entity
          Subject Public Key Info:
              Public Key Algorithm: rsaEncryption
                  Public-Key: (2048 bit)
                  Modulus:
                      00:b1:25:59:cd:c0:5d:90:ba:b3:3c:ee:bc:0a:18:
                      6d:fb:c7:25:1c:5b:af:37:59:57:ed:9d:08:e6:4f:
                      82:49:59:1e:28:4c:a2:93:70:d5:65:7a:16:b1:b0:
                      57:71:a0:f3:4f:25:21:08:07:90:e4:3e:a6:e0:8e:
                      6c:9f:7a:02:3a:e7:7d:1f:85:c2:bc:60:f5:39:16:
                      dc:f3:08:76:41:8f:a3:35:d0:aa:65:3d:2d:a2:9d:
                      ce:1d:03:38:a0:2c:b9:c2:8b:8a:18:aa:cf:dc:00:
                      fd:e4:90:f5:71:de:d5:57:8b:6d:ac:3c:e4:23:d8:
                      4f:0c:a4:f4:a8:f9:e1:46:7c:bc:f8:11:05:e8:4e:
                      53:87:66:ee:67:ad:ff:16:cc:87:59:d7:49:40:a1:
                      5d:76:a9:b3:52:f2:00:a3:f7:a9:cb:b2:ee:63:cc:
                      10:02:c5:26:a1:b1:0a:ef:ff:f1:d5:32:ac:b3:b4:
                      37:e2:6f:26:7c:b2:27:19:f4:bc:52:60:76:86:db:
                      62:a1:1f:fe:89:47:7a:a4:da:10:2a:70:26:28:88:
                      6f:50:21:75:65:13:b4:71:ea:8f:13:9a:0a:02:63:
                      f8:9c:c2:68:1a:8a:ed:06:74:d6:7f:81:c4:bd:21:
                      20:f3:db:60:90:43:94:fa:01:31:54:5a:e9:63:dd:
                      11:85
                  Exponent: 3 (0x3)
          X509v3 extensions:
              X509v3 Subject Key Identifier: 
                  7C:37:12:43:A5:B7:AB:FB:34:17:F4:67:F6:82:E7:08:48:ED:5A:9D
              X509v3 Authority Key Identifier: 
                  keyid:E1:92:E7:CD:7D:34:CD:BB:D0:E4:92:D4:55:EF:8A:D9:08:F1:9D:6C
  
              X509v3 Basic Constraints: critical
                  CA:FALSE
              X509v3 Extended Key Usage: 
                  TLS Web Client Authentication
              X509v3 CRL Distribution Points: 
  
                  Full Name:
                    URI:http://example.com/example.crl
                  Reasons:
                    Key Compromise, CA Compromise, Affiliation Changed, Superseded, Cessation Of Operation, Certificate Hold, Privilege Withdrawn
  
      Signature Algorithm: sha1WithRSAEncryption
           b2:c9:b1:60:ba:d5:76:be:c1:02:8c:42:e0:db:b8:44:9f:dc:
           62:3a:8f:ca:51:47:84:11:9d:22:96:71:79:7e:76:9e:c1:03:
           f4:2d:b2:34:ba:b7:62:f2:dd:a8:bc:11:b3:1e:a3:97:7b:e3:
           a5:08:fe:28:e5:1b:1b:19:6d:73:f9:23:82:4d:96:6d:08:61:
           46:d5:88:1e:50:31:65:f2:4b:58:eb:8c:ce:ce:97:ff:7b:d4:
           c9:7a:c4:7c:c2:88:14:2b:e9:ec:15:aa:e9:59:d1:66:69:1b:
           c1:7f:ec:10:d2:0c:bb:8d:5b:9c:84:3e:8f:8e:fa:ff:81:07:
           42:9c:a1:ed:d4:24:37:cb:53:19:d8:94:98:be:4e:06:c6:2a:
           ab:42:a9:55:ed:7f:73:2b:25:c6:86:19:bc:76:41:f3:02:fa:
           dd:39:31:6a:dd:de:e6:40:10:30:4c:a8:77:8a:71:1f:c1:27:
           be:e6:af:13:fc:31:02:71:99:cc:96:3d:a2:81:b3:cd:ca:bf:
           11:e0:b8:73:ec:77:49:78:90:ed:3e:8f:d7:1f:1f:45:f0:0c:
           da:88:41:a9:da:df:ef:ab:af:a4:7e:1a:a8:12:33:38:eb:04:
           0b:c0:28:b7:74:8d:05:ac:6b:d0:f0:25:7a:22:b9:39:66:9d:
           b7:5c:87:b2
  -----BEGIN CERTIFICATE-----
  MIIDVzCCAj+gAwIBAgIFAK6CQbowDQYJKoZIhvcNAQEFBQAwGjELMAkGA1UEBhMC
  SlAxCzAJBgNVBAMMAkNBMB4XDTEyMTIxNjA2MjQzNloXDTEzMDEyMTA2MDAwMFow
  IjELMAkGA1UEBhMCSlAxEzARBgNVBAMMCmVuZCBlbnRpdHkwggEgMA0GCSqGSIb3
  DQEBAQUAA4IBDQAwggEIAoIBAQCxJVnNwF2QurM87rwKGG37xyUcW683WVftnQjm
  T4JJWR4oTKKTcNVlehaxsFdxoPNPJSEIB5DkPqbgjmyfegI6530fhcK8YPU5Ftzz
  CHZBj6M10KplPS2inc4dAzigLLnCi4oYqs/cAP3kkPVx3tVXi22sPOQj2E8MpPSo
  +eFGfLz4EQXoTlOHZu5nrf8WzIdZ10lAoV12qbNS8gCj96nLsu5jzBACxSahsQrv
  //HVMqyztDfibyZ8sicZ9LxSYHaG22KhH/6JR3qk2hAqcCYoiG9QIXVlE7Rx6o8T
  mgoCY/icwmgaiu0GdNZ/gcS9ISDz22CQQ5T6ATFUWulj3RGFAgEDo4GdMIGaMB0G
  A1UdDgQWBBR8NxJDpber+zQX9Gf2gucISO1anTAfBgNVHSMEGDAWgBThkufNfTTN
  u9DkktRV74rZCPGdbDAMBgNVHRMBAf8EAjAAMBMGA1UdJQQMMAoGCCsGAQUFBwMC
  MDUGA1UdHwQuMCwwKqAioCCGHmh0dHA6Ly9leGFtcGxlLmNvbS9leGFtcGxlLmNy
  bKEEAwIAfzANBgkqhkiG9w0BAQUFAAOCAQEAssmxYLrVdr7BAoxC4Nu4RJ/cYjqP
  ylFHhBGdIpZxeX52nsED9C2yNLq3YvLdqLwRsx6jl3vjpQj+KOUbGxltc/kjgk2W
  bQhhRtWIHlAxZfJLWOuMzs6X/3vUyXrEfMKIFCvp7BWq6VnRZmkbwX/sENIMu41b
  nIQ+j476/4EHQpyh7dQkN8tTGdiUmL5OBsYqq0KpVe1/cyslxoYZvHZB8wL63Tkx
  at3e5kAQMEyod4pxH8EnvuavE/wxAnGZzJY9ooGzzcq/EeC4c+x3SXiQ7T6P1x8f
  RfAM2ohBqdrf76uvpH4aqBIzOOsEC8Aot3SNBaxr0PAleiK5OWadt1yHsg==
  -----END CERTIFICATE-----

CRL

  Certificate Revocation List (CRL):
          Version 2 (0x1)
      Signature Algorithm: sha1WithRSAEncryption
          Issuer: /C=JP/CN=CA
          Last Update: Dec 16 06:24:36 2012 GMT
          Next Update: Dec 21 06:00:00 2012 GMT
          CRL extensions:
              X509v3 CRL Number: 
                  1
              X509v3 Authority Key Identifier: 
                  keyid:E1:92:E7:CD:7D:34:CD:BB:D0:E4:92:D4:55:EF:8A:D9:08:F1:9D:6C
  
              X509v3 Issuing Distrubution Point: 
                  Full Name:
                    URI:http://example.com/example.crl
                  Only User Certificates
                  Only Some Reasons:
                    Key Compromise, CA Compromise, Affiliation Changed, Superseded, Cessation Of Operation, Certificate Hold, Privilege Withdrawn
  
  Revoked Certificates:
      Serial Number: 01
          Revocation Date: Dec 16 06:24:36 2012 GMT
          CRL entry extensions:
              X509v3 CRL Reason Code: 
                  CA Compromise
      Serial Number: AE8241BA
          Revocation Date: Dec 16 06:24:36 2012 GMT
          CRL entry extensions:
              X509v3 CRL Reason Code: 
                  Key Compromise
      Signature Algorithm: sha1WithRSAEncryption
           3e:cd:04:1e:3b:0e:81:3b:11:ff:cf:b1:fb:f1:4a:ef:f3:d2:
           02:96:3b:1d:36:0e:5b:cb:1b:60:eb:8d:b9:24:f7:98:20:51:
           a1:58:cd:d7:bd:64:fb:5c:1b:51:05:0d:30:5a:7e:4f:58:70:
           22:a7:a7:54:33:cd:a1:b5:c7:e4:64:21:44:e5:4f:8a:53:27:
           f5:14:7f:06:8d:ec:98:0f:7a:fe:c5:8f:c5:bd:7d:bc:39:6b:
           16:95:d0:22:a5:66:f2:53:42:d6:25:47:44:7c:16:86:a2:e2:
           b9:88:81:90:0c:40:0c:eb:57:88:2b:0d:3f:93:1e:65:29:65:
           a8:91:55:a1:0a:fc:c2:07:ff:96:2c:5e:ca:af:52:4e:0c:7f:
           1c:61:c6:f7:1b:81:7b:47:9a:ba:ac:b9:e7:20:a0:74:2c:dc:
           30:ff:1a:cf:48:fb:78:24:bd:57:05:0b:2e:41:4b:85:42:9a:
           10:a4:fd:e4:e8:78:f7:01:d9:9f:f9:b6:96:c6:c2:43:f4:e1:
           32:b1:e3:66:ea:78:58:c5:58:eb:07:45:bc:37:3e:6e:57:79:
           8b:58:14:10:3d:b9:93:12:03:44:a9:08:e7:74:6c:be:9b:d1:
           61:89:0f:ba:90:c1:d3:6e:b8:c7:c3:a1:65:d7:01:1f:56:38:
           54:a5:56:21
  -----BEGIN X509 CRL-----
  MIICGTCCAQECAQEwDQYJKoZIhvcNAQEFBQAwGjELMAkGA1UEBhMCSlAxCzAJBgNV
  BAMMAkNBFw0xMjEyMTYwNjI0MzZaFw0xMjEyMjEwNjAwMDBaMEgwIAIBARcNMTIx
  MjE2MDYyNDM2WjAMMAoGA1UdFQQDCgECMCQCBQCugkG6Fw0xMjEyMTYwNjI0MzZa
  MAwwCgYDVR0VBAMKAQGgaTBnMAoGA1UdFAQDAgEBMB8GA1UdIwQYMBaAFOGS5819
  NM270OSS1FXvitkI8Z1sMDgGA1UdHAQxMC+gIqAghh5odHRwOi8vZXhhbXBsZS5j
  b20vZXhhbXBsZS5jcmyhAwEB/6MEAwIAfzANBgkqhkiG9w0BAQUFAAOCAQEAPs0E
  HjsOgTsR/8+x+/FK7/PSApY7HTYOW8sbYOuNuST3mCBRoVjN171k+1wbUQUNMFp+
  T1hwIqenVDPNobXH5GQhROVPilMn9RR/Bo3smA96/sWPxb19vDlrFpXQIqVm8lNC
  1iVHRHwWhqLiuYiBkAxADOtXiCsNP5MeZSllqJFVoQr8wgf/lixeyq9STgx/HGHG
  9xuBe0eauqy55yCgdCzcMP8az0j7eCS9VwULLkFLhUKaEKT95Oh49wHZn/m2lsbC
  Q/ThMrHjZup4WMVY6wdFvDc+bld5i1gUED25kxIDRKkI53RsvpvRYYkPupDB0264
  x8OhZdcBH1Y4VKVWIQ==
  -----END X509 CRL-----

処理

  • 以前に処理された CRL はローカル CRL キャッシュに保存されます
  • delta CRL は使用しないため,これ以下では complete CRL は単に CRL と記載します
  • ここでは,上記の証明書と CRL の場合に検証する内容のみを記載します
    • Extension の内容が異なる場合等には,検証項目数が増減するかもしれません
      • RFC では Extension にない CRL による検証も想定しているので,ソフトウェアの仕様次第で手順は増えそうですが…

1. CRL の Next Update の値のチェック

CRL の Next Update (次回発行日時) を確認します

CRL の下記の箇所です

          Next Update: Dec 21 06:00:00 2012 GMT
  • 現在の時刻が Next Update よりも前の場合は,次の処理へ
  • 現在の時刻が Next Update よりも後の場合は,CRL を更新して,現在の時刻が Next Update よりも前であることを検証します

2. CRL の Issuer と証明書の Issuer が一致することの確認

CRL の Issuer は下記の箇所です

          Issuer: /C=JP/CN=CA

証明書の Issuer は下記の箇所です

          Issuer: C=JP, CN=CA

テキストで表示させた場合の表示形式は異なりますが,バイナリで確認してみると,双方ともに

  301a310b3009060355040613024a50310b300906035504030c024341 (16 進数)

であることが分かります

3. CRL に Issuing Distribution Points CRL Extesnsion (以下 IDP Extension) を含む場合の検証

今回作成した CRL はこの条件に該当します

IDP Extension は,CRL の下記の箇所です

            X509v3 Issuing Distrubution Point: 
                Full Name:
                  URI:http://example.com/example.crl
                Only User Certificates
                Only Some Reasons:
                  Key Compromise, CA Compromise, Affiliation Changed, Superseded, Cessation Of Operation, Certificate Hold, Privilege Withdrawn
3.1. IDP Extension に Distribution Point Name が 存在しており,その Distribution フィールドに Distribution Point が存在している場合の検証

IDP Extension の DistributionPointName の 1 つが,証明書の CRL Distribution Points Extension (以下 DP Extension) の Distribution Point の DistributionPointName の 1 つに一致することを検証します

CRL の IDP Extension の Distribution Point Name

              X509v3 Issuing Distrubution Point: 
                  Full Name:
                    URI:http://example.com/example.crl

証明書の DP Extension の Distribution Point Name

            X509v3 CRL Distribution Points: 

                Full Name:
                  URI:http://example.com/example.crl

上記の項目が一致することを検証します

4. CRL の IDP Extension に、onlyContainsUserCerts が含まれている場合

対象の証明書が CA 証明書で無いことを検証するために,CA:TRUE の Basic Constraints Extension が含まれていないことを確認します

CRL の IDP Extension の該当箇所です

            X509v3 Issuing Distrubution Point: 
                Full Name:
                  URI:http://example.com/example.crl
                Only User Certificates

Only User Certificates が含まれているため Basic Constraints Extension が CA:TRUE でないことを確認します

end entity 証明書の basicConstraints Extension の該当箇所です

              X509v3 Basic Constraints: critical
                  CA:FALSE

5. onlyContainsCACerts が IDP Extension に含まれている場合

今回の CRL には onlyContainsCACerts が IDP Extension に含まれていないため,この条件に該当しません

              X509v3 Issuing Distrubution Point: 
                  Full Name:
                    URI:http://example.com/example.crl
                  Only User Certificates
                  Only Some Reasons:
                    Key Compromise, CA Compromise, Affiliation Changed, Superseded, Cessation Of Operation, Certificate Hold, Privilege Withdrawn

6. onlyContainsAttributeCerts が含まれていないことの確認

今回の CRL には onlyContainsCACerts が IDP Extension に含まれていません

              X509v3 Issuing Distrubution Point: 
                  Full Name:
                    URI:http://example.com/example.crl
                  Only User Certificates
                  Only Some Reasons:
                    Key Compromise, CA Compromise, Affiliation Changed, Superseded, Cessation Of Operation, Certificate Hold, Privilege Withdrawn

7. この CRL でサポートされている失効理由の取得

CRL の IDP Extension に SomeReasons が含まれており、証明書の DP が reasons を含んでいる場合は,双方に共通の失効理由を取得します

CRL の IDP Extension の onlySomeReasons

                Only Some Reasons:
                  Key Compromise, CA Compromise, Affiliation Changed, Superseded, Cessation Of Operation, Certificate Hold, Privilege Withdrawn

証明書の DP Extension の reasons

                Reasons:
                  Key Compromise, CA Compromise, Affiliation Changed, Superseded, Cessation Of Operation, Certificate Hold, Privilege Withdrawn

CRL の IDP Extension の onlySomeReasons と,証明書の DP Extension の reasons の共通箇所は下記の 7 つです

  • Key Compromise
  • CA Compromise
  • Affiliation Changed
  • Superseded
  • Cessation Of Operation
  • Certificate Hold
  • Privilege Withdrawn

8. 上記で取得した失効理由の集合が,これまでに検証した CRL がサポートしている失効理由に含まれていなかった失効理由を 1 つ以上含んでいることの確認

複数の Distribution Point のそれぞれに CRL がある場合は、Distribution Point 毎にサポートする失効理由が異なります

そのため,1 つ目の CRL の検証の場合は,これまでに検証した CRL がないため,必ず失効理由を 1 つ以上含みます

2 つ目以降の CRL の検証の場合はサポートしている失効理由がそれまでの CRL と重複していないことを確認します

9. CRL の発行者についての認証パスの取得と検証

CRL 発行者の認証パスのトラストアンカーと,対象の証明書のトラストアンカーは同じである必要があります

今回は、証明書および CRL は、同一の Root CA から直接発行していますので、CRL ン発行者の認証パスのトラストアンカーと、対象の証明書のトラストアンカーは、下記の CA です

          Subject: C=JP, CN=CA

10. Key Usage Extension が CRL 発行者の証明書に存在している場合の検証

Key Usage Extension に cRLSign が含まれていることを確認します

CRL 発行者の証明書の Key Usage Extension

            X509v3 Key Usage: critical
                Certificate Sign, CRL Sign

11. 上記 9 で検証された公開鍵を使用して,CRL の署名を検証

CRL 発行者の公開鍵を使用して,CRL の署名を検証します

下記のコマンドを使用した場合の verify OK に該当する(はず)

  $ openssl crl -CAfile ca.pem -in example.crl
  verify OK
  -----BEGIN X509 CRL-----
  MIICGTCCAQECAQEwDQYJKoZIhvcNAQEFBQAwGjELMAkGA1UEBhMCSlAxCzAJBgNV
  BAMMAkNBFw0xMjEyMTYwNjI0MzZaFw0xMjEyMjEwNjAwMDBaMEgwIAIBARcNMTIx
  MjE2MDYyNDM2WjAMMAoGA1UdFQQDCgECMCQCBQCugkG6Fw0xMjEyMTYwNjI0MzZa
  MAwwCgYDVR0VBAMKAQGgaTBnMAoGA1UdFAQDAgEBMB8GA1UdIwQYMBaAFOGS5819
  NM270OSS1FXvitkI8Z1sMDgGA1UdHAQxMC+gIqAghh5odHRwOi8vZXhhbXBsZS5j
  b20vZXhhbXBsZS5jcmyhAwEB/6MEAwIAfzANBgkqhkiG9w0BAQUFAAOCAQEAPs0E
  HjsOgTsR/8+x+/FK7/PSApY7HTYOW8sbYOuNuST3mCBRoVjN171k+1wbUQUNMFp+
  T1hwIqenVDPNobXH5GQhROVPilMn9RR/Bo3smA96/sWPxb19vDlrFpXQIqVm8lNC
  1iVHRHwWhqLiuYiBkAxADOtXiCsNP5MeZSllqJFVoQr8wgf/lixeyq9STgx/HGHG
  9xuBe0eauqy55yCgdCzcMP8az0j7eCS9VwULLkFLhUKaEKT95Oh49wHZn/m2lsbC
  Q/ThMrHjZup4WMVY6wdFvDc+bld5i1gUED25kxIDRKkI53RsvpvRYYkPupDB0264
  x8OhZdcBH1Y4VKVWIQ==
  -----END X509 CRL-----

12. CRL 上の証明書を検索して,対象の証明書の発行者とシリアル番号が一致するエントリがあるかの確認

一致するエントリが存在している場合は,その失効理由を取得します

失効理由は,CRL entry extensions の CRL Reason Code の箇所です

CRL やエントリによっては,CRL entry extensions が存在しない場合があります
CRL entry extensions が存在しない場合の失効理由は,unspecified とします

CRL entry extensions が該当箇所です

    Serial Number: AE8241BA
        Revocation Date: Dec 16 06:24:36 2012 GMT
        CRL entry extensions:
            X509v3 CRL Reason Code: 
                Key Compromise

13. これまで取得した CRL がサポートしている失効理由に,上記の 7 で取得した失効理由を追加します

これは,失効状態の判定と,次の(他に入手可能な) CRL 処理で使用します

14. 13 で追加した失効理由も含めて 1 つ以上の CRL を検証して,全ての失効理由を取得しているか,または,この時点で対象の証明書の失効理由を取得している場合

この時点で失効の状態は決定しています

  • 全ての失効理由が揃うまで CRL を取得したにもかかわらず,対象の証明書のエントリが CRL 上にない場合は,失効されていません(UNREVOKED)
  • 対象の証明書の失効理由を取得している場合は,その失効理由(今回用意した証明書の場合は Key Compromise)です

15. 14 で失効の状態が決定せずに,また,入手可能な全ての CRL を検証しても,全ての思考理由が揃わなかった場合

失効の状態は UNDETERMINED となります

疑問点

  • 現在の時刻が Next Update よりも後の場合はどこから CRL を取得するのか
    • はじめにチェックする割にはこの時点では cRLDistributionPoints は取得していないはず
  • Distribution Point 毎にサポートされる失効理由は,他の Distribution Point の CRL がサポートしていない失効理由を含んでいれば,一部が重複してもよいか
  • IDP には name は 1 つしかないのに複数を想定している記述になっているのはなぜか
    • 読み間違えているかな…
  • UNDETERMINED の場合はどう処理すべきか
    • CRL の検証失敗で、この証明書は受け入れない、または、受け入れるのどちらになるのか

Jenkins の導入

環境構築をする度に調べ直しているので,Jenkins 導入時のメモを書いておきます

環境等

  • Git
  • Ruby のプロジェクト
    • coverage も表示させる

手順

1. java のインストール

  # yum install java-1.6.0-openjdk

2. RPM の取得

http://pkg.jenkins-ci.org/redhat/ から 最新の rpm を取得してインストール

  # rpm -ivh jenkins-1.492-1.1.noarch.rpm

3. 確認

ブラウザから,http://<address>:8080 にアクセスして Jenkins が起動していることを確認する

設定

Jenkins の管理

プラグインの管理

Git 連携と Ruby を実行するために,プラグインをインストールする

インストールするプラグインは下記の 3 つ

  • Jenkins GIT plugin
  • Hudson Ruby Plugin
  • Jenkins ruby metrics plugin
    • coverage 用

上記の 3 つにチェックを入れて、[ダウンロード後に再起動してインストール] をクリックする

このあと、インストールが終わるまで待つ

新規ジョブ作成

1. [ジョブ名] を入力する

  • ジョブ名に空白を入れると,処理の途中でエラーになることがあるので,文字のつなぎにハイフンなどを使用する

2. [フリースタイル・プロジェクトのビルド] を選択する
3. [OK] をクリックする

設定

1. [ソースコード管理システム] で [Git] を選択する
1.1. リポジトリの URL を [Repository URL] に入力する
1.2. ビルドおよびテスト対象のブランチ名を [Branch Specifier] に入力する
2. [ビルド・トリガ] を選択する
3. [ビルド] で [ビルド手順の追加] から、[Execute Ruby script] を選択する
3.1. Script へ,Ruby のパスを含めた環境変数 PATH を設定する

  • あとで,異なるバージョンの Ruby のジョブを追加しようと考えているため

4. [ビルド後の処理]
4.1. [ビルド後の処理の追加] から [Publish Rcov report] を選択する
4.2. [Rcov report directory] に [coverage/rcov] を入力する

その他

simplecov, simplecov-rcov を使用する場合は helper へ下記を追記する

  require 'simplecov'
  require 'simplecov-rcov'

  SimpleCov.formatter = SimpleCov::Formatter::RcovFormatter
  SimpleCov.start

KB2661254 を適用して https で接続

せっかくなので,Web サーバを立てて,https で接続してみました.

クライアントは IE9です.サーバ証明書を検証する CA 証明書は,あらかじめ「信頼されたルート証明書機関」に入れています.

Web サーバとして,CentOS release 5.6 に Apache/2.2.3 をインストールしています.

検証するサーバ証明書を入れ替えながら,IE9 でこの Web サーバに接続していきます.

鍵長 1024 ビットの証明書

f:id:Hexa:20120822235525j:plain

$ tshark -r 1024.pcap  -R "tcp.port == 443 and ssl"
  4   0.008313 192.168.1.111 -> 192.168.1.115 SSLv2 102 Client Hello
  6   0.010462 192.168.1.115 -> 192.168.1.111 SSLv3 699 Server Hello, Certificate, Server Hello Done
  7   0.013207 192.168.1.111 -> 192.168.1.115 SSLv3 262 Client Key Exchange, Change Cipher Spec, Encrypted Handshake Message
  8   0.014699 192.168.1.115 -> 192.168.1.111 SSLv3 125 Change Cipher Spec, Encrypted Handshake Message
  9   0.017449 192.168.1.111 -> 192.168.1.115 SSLv3 355 Application Data
 11   0.061129 192.168.1.115 -> 192.168.1.111 SSLv3 2974 Application Data
 13   0.065492 192.168.1.115 -> 192.168.1.111 TCP 1514 [TCP segment of a reassembled PDU]
 14   0.065561 192.168.1.115 -> 192.168.1.111 SSLv3 964 Application Data

警告が表示されることなく接続できています.

鍵長 1023 ビット

f:id:Hexa:20120823000209j:plain

$ tshark -r 1023.pcap  -R "tcp.port == 443 and ssl"
  4   0.012439 192.168.1.111 -> 192.168.1.115 SSLv2 102 Client Hello
  6   0.014799 192.168.1.115 -> 192.168.1.111 SSLv3 699 Server Hello, Certificate, Server Hello Done
  7   0.017976 192.168.1.111 -> 192.168.1.115 SSLv3 262 Client Key Exchange, Change Cipher Spec, Encrypted Handshake Message
  8   0.019377 192.168.1.115 -> 192.168.1.111 SSLv3 125 Change Cipher Spec, Encrypted Handshake Message
  9   0.022489 192.168.1.111 -> 192.168.1.115 SSLv3 355 Application Data
 10   0.026200 192.168.1.115 -> 192.168.1.111 SSLv3 2974 Application Data
 11   0.026615 192.168.1.115 -> 192.168.1.111 TCP 1514 [TCP segment of a reassembled PDU]
 12   0.026681 192.168.1.115 -> 192.168.1.111 SSLv3 964 Application Data

鍵長 1024 ビット未満の証明書はブロックされませんでした.

鍵長 1017 ビット

次に,鍵長 1017 ビット のサーバ証明書を Web サーバに設定してみます.
更新プログラムとしては,ブロックされるはずですが,先日の表示の場合と同様であれば鍵長 1017 ビットでもブロックされないはずです.

f:id:Hexa:20120823003715j:plain

$ tshark -r 1017.pcap  -R "tcp.port == 443 and ssl"
  4   0.008684 192.168.1.111 -> 192.168.1.115 SSLv2 102 Client Hello
  6   0.010828 192.168.1.115 -> 192.168.1.111 SSLv3 698 Server Hello, Certificate, Server Hello Done
  7   0.026659 192.168.1.111 -> 192.168.1.115 SSLv3 262 Client Key Exchange, Change Cipher Spec, Encrypted Handshake Message
  8   0.028229 192.168.1.115 -> 192.168.1.111 SSLv3 125 Change Cipher Spec, Encrypted Handshake Message
  9   0.062152 192.168.1.111 -> 192.168.1.115 SSLv3 355 Application Data
 10   0.065705 192.168.1.115 -> 192.168.1.111 SSLv3 2974 Application Data
 11   0.066035 192.168.1.115 -> 192.168.1.111 TCP 1514 [TCP segment of a reassembled PDU]
 12   0.066087 192.168.1.115 -> 192.168.1.111 SSLv3 964 Application Data

ブロックされずに接続できてしまいました.

鍵長 1016 ビット

f:id:Hexa:20120823003819j:plain

$ tshark -r 1016.pcap  -R "tcp.port == 443 and ssl"
  4   0.007439 192.168.1.111 -> 192.168.1.115 SSLv2 102 Client Hello
  6   0.009490 192.168.1.115 -> 192.168.1.111 SSLv3 696 Server Hello, Certificate, Server Hello Done
  7   0.012954 192.168.1.111 -> 192.168.1.115 SSLv3 261 Client Key Exchange, Change Cipher Spec, Finished
  8   0.014392 192.168.1.115 -> 192.168.1.111 SSLv3 125 Change Cipher Spec, Finished
 10   0.041201 192.168.1.115 -> 192.168.1.111 SSLv3 81 Alert (Level: Warning, Description: Close Notify)

鍵長 1016 ビットでブラウザに警告が表示されました.

サーバからの Change Cipher Spec, Finished を受信した後に,終了 Alert を送っています.

表示と同様に鍵長 1016 ビット以下で,該当の鍵長と判断されているのでしょうか?

KB2661254 の適用

2012 年 8 月 14 日に,セキュリティ アドバイザリがリリースされました.
この更新プログラムの適用することで,1024 ビット未満の RSA 公開鍵の証明書はブロックされるようになりました.

マイクロソフト セキュリティ アドバイザリ (2661254): 証明書の鍵長の最小値に関する更新プログラム


そこで,試しに 1024 ビット未満の RSA 公開鍵の証明書をインストールして,どのように表示されるのかを確認してみました.

証明書は mmc で表示させて確認しています.

OS

鍵長 512 ビット

少し極端に,鍵長 512 ビットの証明書で試してみます.

KB2661254 適用前

f:id:Hexa:20120822003429p:plain

KB2661254 適用後

f:id:Hexa:20120822003518p:plain

この証明書の整合性を保証できません。証明書が壊れているか、または変更されている可能性があります。」というメッセージに変わりました.

この更新プログラムの適用した場合には,該当する証明書は上記のメッセージが表示されるようです.

鍵長 1023 ビット

次に,鍵長 1023 ビットの証明書で試してみます.
1024 ビット未満の鍵長ですので,更新プログラムの適用後は鍵長 512 ビットと同様のメッセージが表示されるはずです.

KB2661254 適用前

f:id:Hexa:20120822004227p:plain

KB2661254 適用後

f:id:Hexa:20120822004242p:plain

表示されませんでした・・・.

鍵長の確認

念のため,OpenSSL を使用して,鍵長を確認してみます.

$ openssl x509 -noout -text -in ca-1023.pem | grep Public-Key
                Public-Key: (1023 bit)

次に,Windows にインストールした証明書の公開鍵を確認してみます.

f:id:Hexa:20120822005510p:plain

鍵長 1023 ビットのはずなのに,1024 ビットと表示されてしましました.

Windows 上(の表示)では鍵長 1023 ビットの RSA 公開鍵は鍵長 1024 ビットとして認識されてしまい,鍵長 512 ビットの時のようなメッセージは表示されないようです.

メッセージが表示される鍵長

メッセージが表示される鍵長を確認するために,鍵長 1023 ビットから 1 ビットずつ小さくしてみました.

すると,鍵長 1016 ビットの証明書を表示させた場合にメッセージが表示されました.

f:id:Hexa:20120822010512p:plain
f:id:Hexa:20120822010522p:plain

鍵長 512 ビットの場合と同様のメッセージが表示され,鍵長も 1016 ビットと表示されています.

ちなみに,鍵長 1017 ビットの場合は下記の通り,メッセージは変化せずに,鍵長も 1024 ビットと表示されます.

f:id:Hexa:20120822010647p:plain
f:id:Hexa:20120822010654p:plain


https 等のアプリケーションでの実際の動作でも同様かは確認していませんが,少なくとも表示上は,鍵長 1016 ビットから更新プログラムによるブロック対象と見なされているようです.

その他

Windows で表示される証明書の公開鍵の鍵長を,実際の鍵長 1008 〜1024 ビットまでの間で確認してみました.

結果は下記の通りです.

  • 表示が 1008 ビット
    • 実際の鍵長が 1008 ビット(これより下は確認していません)
  • 表示が 1016 ビット
    • 実際の鍵長が 1009 〜 1016 ビット
  • 表示が 1024 ビット
    • 実際の鍵長が 1017 〜 1024 ビット

表示される鍵長のビット数は 8 ビット間隔のようです.

まとめ

  • KB2661254 を適用すると,「この証明書の整合性を保証できません。証明書が壊れているか、または変更されている可能性があります。」というメッセージが表示される
  • このメッセージは鍵長 1016 ビット以下の場合に表示される

失効

クライアント認証している場合に,クライアント証明書の期限前にアクセスを拒否したい場合には,発行した証明書を失効させて,OCSP か CRL で失効を伝えます.

今回は,試しに CRL を設定してみました.

設定手順

/etc/httpd/conf.d/ssl.conf に追記
SSLCARevocationFile /etc/pki/tls/certs/ca3.crl

SSLCARevocationFile Directive については下記を参照してください.
mod_ssl - Apache HTTP Server

CRL の設置

ssl.conf に SSLCARevocationFile に記載したパスに CRL ファイルを格納します.

接続できないことを確認してみる

ブラウザ

f:id:Hexa:20120310222217p:plain

パケット
    SSLv3 Record Layer: Alert (Level: Fatal, Description: Certificate Revoked)
        Content Type: Alert (21)
        Version: SSL 3.0 (0x0300)
        Length: 2
        Alert Message
            Level: Fatal (2)
            Description: Certificate Revoked (44)

Certificate Revoked の Alert が返ってきました.
期待通りです.

クライアント認証

Apachehttps でのクライアント認証に対応しています.

普段利用する https の場合は,サーバから送られてきたサーバ証明書を証明書をクライアント側で確認します.
クライアント認証の場合は,https で接続してきた端末(クライアント)から送られてきたクライアント証明書を使用して,サーバ側で認証をおこないます.

証明書の送信

f:id:Hexa:20120310164240j:plain

ServerHello, Certificate, ServerKeyExchange の次に CertificateRequest が送信されてきます.
CertificateRquest には certificate_types と certificate_authorities の 2 つが含まれています.

  • certificate_types はクライアントに要求する証明書のタイプのリスト(rsa_sign や dss_sign など)
  • certificate_authorities は容認する認証局の DN のリスト

インストール

OS
CentOS 6.2
# yum install httpd mod_ssl

設定

  • /etc/httpd/conf/httpd.conf の編集
ServerName www.example.com:80
  • /etc/httpd/conf.d/ssl.conf の編集(下記の内容に変更します)
## サーバ証明書
SSLCertificateFile /etc/pki/tls/certs/server.crt
## サーバ証明書とペアの秘密鍵
SSLCertificateKeyFile /etc/pki/tls/private/server.key
## 中間証明書(あれば設定する)
SSLCertificateChainFile /etc/pki/tls/certs/server-chain.crt
## クライアント認証時にクライアント証明書を検証する CA 証明書(ca.crt には PEM 形式の証明書を複数枚格納することが可能です)
SSLCACertificateFile /etc/pki/tls/certs/ca.crt
## クライアント証明書検証のタイプ
SSLVerifyClient require
  • ssl.conf で指定した証明書を格納する
    • 本番環境であればサーバ証明書は正規の認証局から買いましょう
    • テスト環境であれば,サーバ証明書を発行したオレオレ CA 証明書をクライアントにインストールして信頼しておきます

httpd を起動させる

# service httpd start

https://www.example.com へアクセス

今回はテスト用なので hosts に www.example.com をあらかじめ書いておきました.

有効なクライアント証明書による接続

1. クライアント証明書を選択
f:id:Hexa:20120310171210p:plain
2. アクセスの許可
f:id:Hexa:20120310171419p:plain
3. 接続(https で接続できています)
f:id:Hexa:20120310171457p:plain

有効性が検証できないサーバ証明書の場合は 3 で警告が出ます
f:id:Hexa:20120310171625p:plain

無効なクライアント証明書による接続

期限切れのクライアント証明書を使用してみました.
無効なクライアント証明書を選択する以外は,上記の 有効なクライアント証明書による接続 と手順は同じです.
f:id:Hexa:20120310171846p:plain

接続エラーになりました.

パケット

パケットは,Wireshark で取得しています.

CertificateRequest.

CertificateRequest 周りを見ています.

    SSLv3 Record Layer: Handshake Protocol: Server Key Exchange
        Content Type: Handshake (22)
        Version: SSL 3.0 (0x0300)
        Length: 525
        Handshake Protocol: Server Key Exchange
            Handshake Type: Server Key Exchange (12)
            Length: 521
    SSLv3 Record Layer: Handshake Protocol: Multiple Handshake Messages
        Content Type: Handshake (22)
        Version: SSL 3.0 (0x0300)
        Length: 107
        Handshake Protocol: Certificate Request
            Handshake Type: Certificate Request (13)
            Length: 99
            Certificate types count: 6
            Certificate types (6 types)
                Certificate type: RSA Fixed DH (3)
                Certificate type: DSS Fixed DH (4)
                Certificate type: Unknown (5)
                Certificate type: Unknown (6)
                Certificate type: RSA Sign (1)
                Certificate type: DSS Sign (2)
            Distinguished Names Length: 90
            Distinguished Names (90 bytes)
                Distinguished Name Length: 28
                Distinguished Name: (id-at-commonName=ca1.example.com)
                    RDNSequence item: 1 item (id-at-commonName=ca1.example.com)
                        RelativeDistinguishedName item (id-at-commonName=ca1.example.com)
                            Id: 2.5.4.3 (id-at-commonName)
                            DirectoryString: uTF8String (4)
                                uTF8String: ca1.example.com
                Distinguished Name Length: 28
                Distinguished Name: (id-at-commonName=ca2.example.com)
                    RDNSequence item: 1 item (id-at-commonName=ca2.example.com)
                        RelativeDistinguishedName item (id-at-commonName=ca2.example.com)
                            Id: 2.5.4.3 (id-at-commonName)
                            DirectoryString: uTF8String (4)
                                uTF8String: ca2.example.com
                Distinguished Name Length: 28
                Distinguished Name: (id-at-commonName=ca3.example.com)
                    RDNSequence item: 1 item (id-at-commonName=ca3.example.com)
                        RelativeDistinguishedName item (id-at-commonName=ca3.example.com)
                            Id: 2.5.4.3 (id-at-commonName)
                            DirectoryString: uTF8String (4)
                                uTF8String: ca3.example.com
        Handshake Protocol: Server Hello Done
            Handshake Type: Server Hello Done (14)
            Length: 0
  • Certificate types として下記の 6 つがクライアントに送られています
    • RSA Fixed DH (3)
    • DSS Fixed DH (4)
    • Unknown (5)
    • Unknown (6)
    • RSA Sign (1)
    • DSS Sign (2)
  • Distinguished Names が容認する認証局の DN のリストです(今回は ca.crt に 3 枚の CA 証明書を格納しています)
ClientCertificate

サーバからの CertificateRequest を受けて,ブラウザ上で選択したクライアント証明書の送信の部分を少しだけ見てみます.

    SSLv3 Record Layer: Handshake Protocol: Multiple Handshake Messages
        Content Type: Handshake (22)
        Version: SSL 3.0 (0x0300)
        Length: 1239
        Handshake Protocol: Certificate
            Handshake Type: Certificate (11)
            Length: 839
            Certificates Length: 836
            Certificates (836 bytes)
                Certificate Length: 833
                Certificate (id-at-commonName=user03@example.org)
                    signedCertificate
                        version: v3 (2)
                        serialNumber: 1
                        signature (shaWithRSAEncryption)
                            Algorithm Id: 1.2.840.113549.1.1.5 (shaWithRSAEncryption)
                        issuer: rdnSequence (0)
                            rdnSequence: 1 item (id-at-commonName=ca3.example.com)
                                RDNSequence item: 1 item (id-at-commonName=ca3.example.com)
                                    RelativeDistinguishedName item (id-at-commonName=ca3.example.com)
                                        Id: 2.5.4.3 (id-at-commonName)
                                        DirectoryString: uTF8String (4)
                                            uTF8String: ca3.example.com
                        validity
                            notBefore: utcTime (0)
                                utcTime: 10-09-20 15:00:00 (UTC)
                            notAfter: utcTime (0)
                                utcTime: 13-01-20 15:00:00 (UTC)
                        subject: rdnSequence (0)
                            rdnSequence: 1 item (id-at-commonName=user03@example.org)
                                RDNSequence item: 1 item (id-at-commonName=user03@example.org)
                                    RelativeDistinguishedName item (id-at-commonName=user03@example.org)
                                        Id: 2.5.4.3 (id-at-commonName)
                                        DirectoryString: uTF8String (4)
                                            uTF8String: user03@example.org
                        subjectPublicKeyInfo
                            algorithm (rsaEncryption)
                                Algorithm Id: 1.2.840.113549.1.1.1 (rsaEncryption)
                            Padding: 0
                            subjectPublicKey: 3082010a0282010100c322c4b058adee5342f5b7f6799800...
                        extensions: 5 items
                            Extension (id-ce-basicConstraints)
                                Extension Id: 2.5.29.19 (id-ce-basicConstraints)
                                critical: True
                                BasicConstraintsSyntax
                            Extension (id-ce-authorityKeyIdentifier)
                                Extension Id: 2.5.29.35 (id-ce-authorityKeyIdentifier)
                                AuthorityKeyIdentifier
                            Extension (id-ce-subjectKeyIdentifier)
                                Extension Id: 2.5.29.14 (id-ce-subjectKeyIdentifier)
                                SubjectKeyIdentifier: 67d149c911412b2da2254fe94377e7e9c66a7b28
                            Extension (id-ce-extKeyUsage)
                                Extension Id: 2.5.29.37 (id-ce-extKeyUsage)
                                KeyPurposeIDs: 1 item
                                    KeyPurposeId: 1.3.6.1.5.5.7.3.2 (id-kp-clientAuth)
                            Extension (id-ce-cRLDistributionPoints)
                                Extension Id: 2.5.29.31 (id-ce-cRLDistributionPoints)
                                CRLDistPointsSyntax: 1 item
                                    DistributionPoint
                                        distributionPoint: fullName (0)
                                            fullName: 1 item
                                                GeneralName: uniformResourceIdentifier (6)
                                                    uniformResourceIdentifier: http://example.com:9292/crl/example.crl
                    algorithmIdentifier (shaWithRSAEncryption)
                        Algorithm Id: 1.2.840.113549.1.1.5 (shaWithRSAEncryption)
                    Padding: 0
                    encrypted: ccb3a0a79dbca91c1d02331798d2cbed32c50bc409e1539e...
        Handshake Protocol: Client Key Exchange
            Handshake Type: Client Key Exchange (16)
            Length: 130
  • 下記の dn のクライアント証明書を送信しています
    • id-at-commonName=user03@example.org
  • id-ce-extKeyUsage には id-kp-clientAuth を付けています

この後はサーバからの ChangeCipherSpec と Finished が続きます.

    SSLv3 Record Layer: Change Cipher Spec Protocol: Change Cipher Spec
        Content Type: Change Cipher Spec (20)
        Version: SSL 3.0 (0x0300)
        Length: 1
        Change Cipher Spec Message
    SSLv3 Record Layer: Handshake Protocol: Encrypted Handshake Message
        Content Type: Handshake (22)
        Version: SSL 3.0 (0x0300)
        Length: 64
        Handshake Protocol: Encrypted Handshake Message
有効ではないクライアント証明書による接続

ブラウザには SSL 接続 エラー と表示されました.
サーバは,クライアント証明書を検証して有効ではないと判定して ChangeCipherSpec, Finished ではなく,Alert をクライアントへ返しています.

    TLSv1 Record Layer: Alert (Level: Fatal, Description: Certificate Expired)
        Content Type: Alert (21)
        Version: TLS 1.0 (0x0301)
        Length: 2
        Alert Message
            Level: Fatal (2)
            Description: Certificate Expired (45)

今回は,有効期限が切れているクライアント証明書をサーバへ送ったため Certificate Expired がきちんと返ってきています.

所感

  • Apache のクライアント認証の設定はそれほど難しくはない
  • 証明書の管理ができれば,期限付きでアクセスする権限を与えることが簡単にできそう
    • クライアント証明書を検証する CA 証明書は複数枚設定することが可能なので,ある程度いい加減な管理でも良さそう(CA の期限が切れる前に追加すればいいので)