技術者ブログ
クラウド型WAF「Scutum(スキュータム)」の開発者/エンジニアによるブログです。
金床“Kanatoko”をはじめとする株式会社ビットフォレストの技術チームが、“WAFを支える技術”をテーマに幅広く、不定期に更新中!

両想いのSSL証明書は存在する
はじめに
以前のエントリにおいてSSL中間CA証明書を検索するウェブサービスについて紹介しました。このウェブサービスを作る過程で、私たちは合計約82万枚のSSL証明書を収集してデータベースを作成し、それを元に様々な分析を行いました。その際に見つけた、普段では気がつくことがないような面白い話がいくつかあるので、今回ここで紹介してみたいと思います。
尚、このWAF Tech Blogは基本的にはエンジニア向けの有用な情報をお届けしているつもりですが、今回は実際の業務等に役に立つ情報は殆どなく、ネタ的な要素が強い内容となっていることをご了承ください。
えっ!? 私の証明書の階層、深すぎ...?
SSL証明書は階層構造を取ることが知られています。最もポピュラーなのはルート証明書からサーバ証明書までが3階層あるいは4階層のものです。
階層が浅いものを探してみると、まれに2階層というものがあります。例えば次のように、日本政府の発行したルート証明書へ繋がる2階層の階層構造が使われているサイトが存在します(残念ながら日本政府のルート証明書はごく一部のウェブブラウザにしかインストールされていないようですが)。

では深いもの、例えば5階層、あるいは6階層というサイトは存在するのでしょうか?
データベースを階層の深さをキーに分析してみたところ、もっとも深いものはなんと驚きの7階層の構造を持つものでした。7階層を持つものはこの1枚だけであり、驚きの深さと言えるでしょう。

この7階層のルート証明書である「VeriSign Universal Root Certification Authority」は非常に珍しいもので、シマンテックのサイトにも書かれているように現時点では商用のサービスでは使われていないようです。
両想いの証明書
次の2枚の証明書を見てください。
Issuer: CN=AddTrust External CA Root, OU=AddTrust External TTP Network, O=AddTrust AB, C=SE Subject: CN=UTN - DATACorp SGC, OU=http://www.usertrust.com, O=The USERTRUST Network, L=Salt Lake City, ST=UT, C=US -----BEGIN CERTIFICATE----- MIIEpjCCA46gAwIBAgIQOs2rnHWYhryvdOXfgan06DANBgkqhkiG9w0BAQUFADBv MQswCQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFk ZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBF eHRlcm5hbCBDQSBSb290MB4XDTA1MDYwNzA4MDkxMFoXDTIwMDUzMDEwNDgzOFow gZMxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJVVDEXMBUGA1UEBxMOU2FsdCBMYWtl IENpdHkxHjAcBgNVBAoTFVRoZSBVU0VSVFJVU1QgTmV0d29yazEhMB8GA1UECxMY aHR0cDovL3d3dy51c2VydHJ1c3QuY29tMRswGQYDVQQDExJVVE4gLSBEQVRBQ29y cCBTR0MwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDf7lgQoituVcSO vy5GCefgCA8uK3oTlBu99raAjmUFkwAevK/iD44ZDRJH7Kyto/oucPjebvtWQhWe LlzvI94huQV2JxkPT9bDnLS+lBlj8qYRCutTSJy+8ik7FugaoEymyfQYWWjAcPJT AMBeUIKlVm82+UrgRIagTU7WR25JSstn16bEBbmOHvT8/83nNuCcBWyyMyIV0LTg zBfAssD0/jI/KSqVe9jyp04PVHyhDYCzCQPB/1zdXpo+vK68R4pqrnHKH7EquF9C BQvsRjDRcgvK6VZt9e/feL5hurKlrgRMvKisaRWXve/rtIy/NfjUw9EoDlw6n3AY MyB3xKKvAgMBAAGjggEXMIIBEzAfBgNVHSMEGDAWgBStvZh6NLQm9/rEJlTvA73g JMtUGjAdBgNVHQ4EFgQUUzLRs89/+uDxoF2FTpLSnkUdtE8wDgYDVR0PAQH/BAQD AgEGMA8GA1UdEwEB/wQFMAMBAf8wIAYDVR0lBBkwFwYKKwYBBAGCNwoDAwYJYIZI AYb4QgQBMBEGA1UdIAQKMAgwBgYEVR0gADBEBgNVHR8EPTA7MDmgN6A1hjNodHRw Oi8vY3JsLnVzZXJ0cnVzdC5jb20vQWRkVHJ1c3RFeHRlcm5hbENBUm9vdC5jcmww NQYIKwYBBQUHAQEEKTAnMCUGCCsGAQUFBzABhhlodHRwOi8vb2NzcC51c2VydHJ1 c3QuY29tMA0GCSqGSIb3DQEBBQUAA4IBAQCA9M0Pc0IR51WTgSZfdCsRm4ER0eM6 BfVbRvEi3PcHD3rBnJ7PiMRe98ePDA57Sg058pXx0MMx+f23NdzYdlmrIDqwFp+N Ff1c1gV/ux50gTWwQZkDNCwgmmQs/24fjm7VSHGshFE4x0cSmGPXgdqnbhULbQV0 7vCOkSvolR+0/fOzbq7txWJnMqQDbJPSxNjnsBOSYykqTHgMstUyig1dxb5AWcI5 jIKBgDSl+ycOw4lsN8+prM1Z1u9Tmxzm+Zi55USG06bVI+4qiefT0cqBi4tb/W84 k0Neil3hNSypbXJZX6QcPpBFA3u1afTJNNG0UCeZt4f+rEGFiPTThPxA -----END CERTIFICATE-----
Issuer: CN=UTN - DATACorp SGC, OU=http://www.usertrust.com, O=The USERTRUST Network, L=Salt Lake City, ST=UT, C=US Subject: CN=AddTrust External CA Root, OU=AddTrust External TTP Network, O=AddTrust AB, C=SE -----BEGIN CERTIFICATE----- MIIEezCCA2OgAwIBAgIQftGpq77jb0bNa04pNJBW8zANBgkqhkiG9w0BAQUFADCB kzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZBgNVBAMTElVUTiAtIERBVEFDb3Jw IFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2MzBaMG8xCzAJBgNVBAYT AlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0 ZXJuYWwgVFRQIE5ldHdvcmsxIjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENB IFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC39xoz5vIABC05 4E5b7R+8bA/Ntfojts7emxEzl6QpTH2Tn71KvJPtAxrjj8/lbVBa1pcplFqAsEl6 2y6V/bjKvzc4LR4+kUGtcFbH8E8/6DKedMrIkFTpxl8PeJ2aQDwOrGGqXhSPnoeh alDc15pOrwWzpnGUnHGzUGAKxxOdOAeGAqjpqGkmGJCrTLBPI6s6T4TY386f4Wlv u9dC12tE5Met7m1BX3JacQg3s3llpFmglDf3AC8NwpJy2tA4ctsUqEXEXSp9t7TW xO6szRNEt8kr3UMAJfphuWlqWCMRt6czj1Z1WfXNKddGtworZbbTQm8Vsrh7++/p XVPVNFonAgMBAAGjge0wgeowHwYDVR0jBBgwFoAUUzLRs89/+uDxoF2FTpLSnkUd tE8wHQYDVR0OBBYEFK29mHo0tCb3+sQmVO8DveAky1QaMA4GA1UdDwEB/wQEAwIB BjAPBgNVHRMBAf8EBTADAQH/MBEGA1UdIAQKMAgwBgYEVR0gADA9BgNVHR8ENjA0 MDKgMKAuhixodHRwOi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dD LmNybDA1BggrBgEFBQcBAQQpMCcwJQYIKwYBBQUHMAGGGWh0dHA6Ly9vY3NwLnVz ZXJ0cnVzdC5jb20wDQYJKoZIhvcNAQEFBQADggEBADwlhyhsmL2dQhxeHmQPVn+W PPO582kaafSkCNQgTbHyYyfhnwFDN7CxeudxyHoh7qg1wZ3mvGizRoCaPQRyPC9I /eHMQncOsgU5pAD4NcKseMD9xxO8iyBNWjWvlMoysMZ50ZguO8JSRcGbtyYLywQa 9m6SROF8nMESeKYZAeLvYPt6V/MyKAa1uh2RGyhdZGpfU5wO1erMRb19RguvU0nG zIAYW1utsWITYE45WVHEpobL8Q1t3t0xC1+jB6D7PkaqSXMEfYoLsC9GYo7hvVBl KLHIdkr0IgMMVdT8DIdWfgtl74frfPclt80nTNs8CSlpF46LsEfo2mC3p2lm+ws= -----END CERTIFICATE-----
IssuerとSubjectがまるっきり逆になっています。
通常、SubjectとIssuerに登場するCAにははっきりとした上下関係が存在しており、ルート証明書を最上位として
- 「AがAを承認する(ルート証明書)」
- 「AがBを承認する」
- 「BがCを承認する」
- (以下同様)
これらの両想いの中間CA証明書を両方ともサーバにインストールしておくと、もしかしたら恋い焦がれて無限ループを引き起こしてしまうSSLクライアント実装があるかもしれません。
最も人気のないルート証明書ランキング
今回調査した82万枚のSSL証明書について、それぞれのルート証明書がどれになるかを調べてそれぞれをカウントし、最もマイナーなものを調べてみました。結果は意外にも接戦となり、「1つの証明書(インターネット上で稼働しているSSLサーバ)だけで使われているルート証明書」が5つも見つかりました。
1: OU=Security Communication RootCA2, O="SECOM Trust Systems CO.,LTD.", C=JP 2: CN=VeriSign Universal Root Certification Authority, OU="(c) 2008 VeriSign, Inc. - For authorized use only", OU=VeriSign Trust Network, O="VeriSign, Inc.", C=US 3: CN=TC TrustCenter Class 4 CA II, OU=TC TrustCenter Class 4 CA, O=TC TrustCenter GmbH, C=DE 4: CN=GlobalSign, O=GlobalSign, OU=GlobalSign Root CA - R3 5: EMAILADDRESS=ips@mail.ips.es, CN=IPS CA CLASE3 Certification Authority, OU=IPS CA CLASE3 Certification Authority, O="ips@mail.ips.es C.I.F. B-60929452", O=IPS Internet publishing Services s.l., L=Barcelona, ST=Barcelona, C=ES
上記1から5まで番号を付けていますが、すべて同様に「1つのサーバのみで使用されている」ものです。
このうち1,3,4についてはそのウェブサーバのコンテンツとして「テスト」と明記してあり、どうやら各CAが自分たちの発行したルート証明書に実際にインターネット経由でアクセスし動作確認を行うためのサーバのようです。
2はベリサインのもので、本エントリの先頭でお伝えした7階層の深さを持つサーバで使用されているものです。最も深い階層を持つだけでなく、このサーバ専用のルート証明書を持っているということで、今回調査した中で最強のSSLサーバと言えるかもしれません。
5についても1,3,4同様にテスト目的かと思われましたが、はっきりとは判断できない状態でした。
まとめ
今回は大量のSSL証明書を分析する中で見つけた、裏話的な話題を3つお届けしました。当初は82万枚という数字は非常に多いものだと思っていましたが、最近発表されたこちらのレポートではなんと580万ものSSLサーバから情報を集めたということで、上には上がいると実感させられます。
本エントリについて、「情報がすごく役に立った!」などのフィードバックがあれば、ぜひ@kinyukaまでお願いします。