実際に発行されている 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 が全ての失効理由を扱うことになります
条件
- delta CRL は使用しない
- 検証対象の証明書は,Root CA 証明書から直接発行されている
- CRL は,Root CA 証明書から直接発行されている
- 対象の証明書を検証する CRL の入手先は 1 つだけとする
- 下記で示す証明書と,CRL を使用する
- CRL は Issuing Distribution Point Extension を含まない
- 証明書の 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 を読んでいて、手順を追っていくのがつらくなってきたので,
条件を絞った上での処理をいったん書き出してみます
条件
- delta CRL は使用しない(そもそも需要はあるのか?)
- 検証対象の証明書は,Root CA 証明書から直接発行されている
- CRL は,Root CA 証明書から直接発行されている
- 対象の証明書を検証する CRL の入手先は 1 つだけとする
- 下記で示す証明書と,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 による検証も想定しているので,ソフトウェアの仕様次第で手順は増えそうですが…
- Extension の内容が異なる場合等には,検証項目数が増減するかもしれません
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 の管理
新規ジョブ作成
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 ビットの証明書
$ 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 ビット
$ 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 ビットでもブロックされないはずです.
$ 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 ビット
$ 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
- Windows 7 Home Premium Service Pack 1
鍵長 512 ビット
少し極端に,鍵長 512 ビットの証明書で試してみます.
KB2661254 適用前
KB2661254 適用後
「この証明書の整合性を保証できません。証明書が壊れているか、または変更されている可能性があります。」というメッセージに変わりました.
この更新プログラムの適用した場合には,該当する証明書は上記のメッセージが表示されるようです.
鍵長 1023 ビット
次に,鍵長 1023 ビットの証明書で試してみます.
1024 ビット未満の鍵長ですので,更新プログラムの適用後は鍵長 512 ビットと同様のメッセージが表示されるはずです.
KB2661254 適用前
KB2661254 適用後
表示されませんでした・・・.
鍵長の確認
念のため,OpenSSL を使用して,鍵長を確認してみます.
$ openssl x509 -noout -text -in ca-1023.pem | grep Public-Key Public-Key: (1023 bit)
次に,Windows にインストールした証明書の公開鍵を確認してみます.
鍵長 1023 ビットのはずなのに,1024 ビットと表示されてしましました.
Windows 上(の表示)では鍵長 1023 ビットの RSA 公開鍵は鍵長 1024 ビットとして認識されてしまい,鍵長 512 ビットの時のようなメッセージは表示されないようです.
メッセージが表示される鍵長
メッセージが表示される鍵長を確認するために,鍵長 1023 ビットから 1 ビットずつ小さくしてみました.
すると,鍵長 1016 ビットの証明書を表示させた場合にメッセージが表示されました.
鍵長 512 ビットの場合と同様のメッセージが表示され,鍵長も 1016 ビットと表示されています.
ちなみに,鍵長 1017 ビットの場合は下記の通り,メッセージは変化せずに,鍵長も 1024 ビットと表示されます.
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 ファイルを格納します.
接続できないことを確認してみる
ブラウザ
パケット
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 が返ってきました.
期待通りです.
クライアント認証
Apache は https でのクライアント認証に対応しています.
普段利用する https の場合は,サーバから送られてきたサーバ証明書を証明書をクライアント側で確認します.
クライアント認証の場合は,https で接続してきた端末(クライアント)から送られてきたクライアント証明書を使用して,サーバ側で認証をおこないます.
証明書の送信
ServerHello, Certificate, ServerKeyExchange の次に CertificateRequest が送信されてきます.
CertificateRquest には certificate_types と certificate_authorities の 2 つが含まれています.
設定
- /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 をあらかじめ書いておきました.
無効なクライアント証明書による接続
期限切れのクライアント証明書を使用してみました.
無効なクライアント証明書を選択する以外は,上記の 有効なクライアント証明書による接続 と手順は同じです.
接続エラーになりました.
パケット
パケットは,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 証明書を格納しています)
- id-at-commonName=ca1.example.com
- id-at-commonName=ca2.example.com
- id-at-commonName=ca3.example.com
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 の期限が切れる前に追加すればいいので)