Upgrade to Pro — share decks privately, control downloads, hide ads and more …

個人でEV SSL証明書が欲しい話

個人でEV SSL証明書が欲しい話

すみだセキュリティ勉強会2018その2での発表資料です。

Osumi, Yusuke

August 04, 2018
Tweet

More Decks by Osumi, Yusuke

Other Decks in Technology

Transcript

  1. Agenda •1st section “SSL証明書おさらい” •PKIと証明書 •DV/OV/EV SSL証明書 •2nd section “個人でEV

    SSL証明書” •普通に買えるのか •3rd section “オレオレEV SSL証明書” •自分で認証局から作っちまうか...... •Appendix “おもしろEV豆知識” 4
  2. PKI : Public Key Infrastracture 8 引用:Ivan Ristić「BULLETPROOF SSL AND

    TLS」 証明書: • Public Key(公開鍵) • 公開鍵の主体情報 • 発行元のディジタル署名
  3. DV/OV/EV 23 SSL証明書は3種類 DV (Domain Validation) ドメイン認証 Let’s Encryptで無料取得可能 OV

    (Organization Validation) 組織の法的な実在性認証 会社の登記事項証明書+電話による確認など EV (Extended Validation) OVよりさらに厳格な実在性認証 会社の登記簿に記載のある役員のサインなど が必要 ワイルドカード証明書は不可
  4. DV/OV/EV 24 SSL証明書は3種類 DV (Domain Validation) ドメイン認証 Let’s Encryptで無料取得可能 OV

    (Organization Validation) 組織の法的な実在性認証 会社の登記事項証明書+電話による確認など EV (Extended Validation) OVよりさらに厳格 会社の登記簿に記載のある役員のサインなど が必要 ワイルドカード証明書は不可 TLSプロトコル上、暗号強度は 変わらない EVだからと言って、強い暗号 になるわけではない
  5. 2.1.3. Excluded Purposes(EVの目的外) 26 EV Certificates focus only on the

    identity of the Subject named in the Certificate, and not on the behavior of the Subject. As such, an EV Certificate is not intended to provide any assurances, or otherwise represent or warrant: (1) That the Subject named in the EV Certificate is actively engaged in doing business; (2) That the Subject named in the EV Certificate complies with applicable laws; (3) That the Subject named in the EV Certificate is trustworthy, honest, or reputable in its business dealings; or (4) That it is “safe” to do business with the Subject named in the EV Certificate.
  6. 2.1.3. Excluded Purposes(EVの目的外) 27 EV Certificates focus only on the

    identity of the Subject named in the Certificate, and not on the behavior of the Subject. As such, an EV Certificate is not intended to provide any assurances, or otherwise represent or warrant: (1) That the Subject named in the EV Certificate is actively engaged in doing business; (2) That the Subject named in the EV Certificate complies with applicable laws; (3) That the Subject named in the EV Certificate is trustworthy, honest, or reputable in its business dealings; or (4) That it is “safe” to do business with the Subject named in the EV Certificate. EV SSL証明書は組織の実在性にfocusし、以 下の保証をするものではない (1)その組織が実際にビジネスしているか (2)法令に準拠しているか (3)誠実な商取引をしているか (4)その組織と取引して「安全」か
  7. 残念なお知らせ 29 悪の帝国が作っている某ブラウザは、 Chrome 70からEVでもグリーン表示が消えます Google Chrome 68 Google Chrome

    70 (Canary) 「httpsは当たり前だから特別表示する必要無い。 HTTPは危険だからキケンと赤くする」 という論理らしい
  8. 個人はダメと明記しているところ多い 32 https://knowledge.digicert.com/ja/jp/solution/SO23315.html EV SSL証明書を申請できる団体の要件について Problem EV SSL証明書 を申請・取得できる団体の要件を教えてください。 Solution

    弊社でEV SSL証明書の申請を受付可能な団体は、以下とおりで す。 法人登記の無い組合・組織・団体や個人事業主、また個人に発 行することはできません。 •日本に登記のある法人・団体 一般企業、財団法人、国立大学法人、学校法人、社団法人、組 合、相互会社、その他法人などの単位 •中央省庁および国の機関/地方公共団体およびその機関
  9. ちなみに法務省登記サービスのSubjectシリアル番号 40 CN = www.touki.or.jp OU = Civil Affairs Bureau

    administration division001 O = 法務省 L = CHIYODA-KU ST = TOKYO C = JP Object Identifier (2 5 4 5) = Government Entity Object Identifier (2 5 4 15) = Government Entity Object Identifier (1 3 6 1 4 1 311 60 2 1 3) = JP 2.5.4.5 = serialNumber
  10. 一番のキモは、Certificate PoliciesのEV OID 41 EV SSL Certificate Guidelines 4. Definitions

    EV OID: An identifying number, in the form of an “object identifier,” that is included in the certificatePolicies field of a certificate that: (i) indicates which CA policy statement relates to that certificate, and (ii) is either the CA/Browser Forum EV policy identifier or a policy identifier that, by pre-agreement with one or more Application Software Supplier, marks the certificate as being an EV Certificate. EV OIDとは、certificatePoliciesフィールドに入れ て、それがEV SSL証明書かどうかをマークする OID(Object IDentifier)です(意訳)
  11. Firefoxのソース ExtendedValidation.cpp 44 https://hg.mozilla.org/mozilla-central/file/tip/security/certverifier/ExtendedValidation.cpp static const struct EVInfo kEVInfos[] =

    { .....(省略).....( { // CN=VeriSign Class 3 Public Primary Certification Authority - G5,OU="(c) 2006 VeriSign, Inc. - For authorized use only",OU=VeriSign Trust Network,O="VeriSign, Inc.",C=US "2.16.840.1.113733.1.7.23.6", "VeriSign EV OID", { 0x9A, 0xCF, 0xAB, 0x7E, 0x43, 0xC8, 0xD8, 0x80, 0xD0, 0x6B, 0x26, 0x2A, 0x94, 0xDE, 0xEE, 0xE4, 0xB4, 0x65, 0x99, 0x89, 0xC3, 0xD0, 0xCA, 0xF1, 0x9B, 0xAF, 0x64, 0x05, 0xE4, 0x1A, 0xB7, 0xDF }, "MIHKMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNV" "BAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAyMDA2IFZl" "cmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMT" "PFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBB" "dXRob3JpdHkgLSBHNQ==", "GNrRniZ96LtKIVjNzGs7Sg==", + −}, .....(省略).....(
  12. Firefoxのソース ExtendedValidation.cpp 45 https://hg.mozilla.org/mozilla-central/file/tip/security/certverifier/ExtendedValidation.cpp static const struct EVInfo kEVInfos[] =

    { .....(省略).....( { // CN=VeriSign Class 3 Public Primary Certification Authority - G5,OU="(c) 2006 VeriSign, Inc. - For authorized use only",OU=VeriSign Trust Network,O="VeriSign, Inc.",C=US " 2.16.840.1.113733.1.7.23.6", "VeriSign EV OID", { 0x9A, 0xCF, 0xAB, 0x7E, 0x43, 0xC8, 0xD8, 0x80, 0xD0, 0x6B, 0x26, 0x2A, 0x94, 0xDE, 0xEE, 0xE4, 0xB4, 0x65, 0x99, 0x89, 0xC3, 0xD0, 0xCA, 0xF1, 0x9B, 0xAF, 0x64, 0x05, 0xE4, 0x1A, 0xB7, 0xDF }, "MIHKMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNV" "BAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAyMDA2IFZl" "cmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMT" "PFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBB" "dXRob3JpdHkgLSBHNQ==", "GNrRniZ96LtKIVjNzGs7Sg==", + −}, .....(省略).....( OID 2.16.840.1.113733.1.7.23.6 は、ソースへハードコード! ※その他、全CAのEV OIDが ハードコードされている
  13. Chrome (Chromium)も同様 46 https://chromium.googlesource.com/chromium/src/net/+/master/cert/ev_root_ca_metadata.cc static const EVMetadata kEvRootCaMetadata[] = {

    ....(省略).... // VeriSign Class 3 Public Primary Certification Authority - G5 // https://www.verisign.com/ { {{0x9a, 0xcf, 0xab, 0x7e, 0x43, 0xc8, 0xd8, 0x80, 0xd0, 0x6b, 0x26, 0x2a, 0x94, 0xde, 0xee, 0xe4, 0xb4, 0x65, 0x99, 0x89, 0xc3, 0xd0, 0xca, 0xf1, 0x9b, 0xaf, 0x64, 0x05, 0xe4, 0x1a, 0xb7, 0xdf}}, {"2.16.840.1.113733.1.7.23.6", ""}, }, ....(省略)....
  14. 逆順に書いても、仕様上は問題ないが...... 48 https://bugs.chromium.org/p/chromium/issues/detail?id=705285 • 2.23.140.1.1 • 2.16.840.1.113733.1.7.23.6 Chrome 57で、EV SSL証明書なのにEV扱いされず

    • 組織名がアドレスバーに出ない • グリーンバーにならない という大バグが発覚 当時、GoogleはSymantecをDistrust宣言しており、 Symantec発行の証明書で再現したため、当初は 「Symantecへの嫌がらせか!?」という憶測も まずCA/B ForumのOID 次にCA固有のOID
  15. EV OIDバグ対策 49 • 2.16.840.1.113733.1.7.23.6 • 2.23.140.1.1 対策1(主流) 同じバグを悪のG帝国が踏むのを恐れて、 2.23.140.1.1は後ろに持って行く

    • 2.16.840.1.113733.1.7.23.6 対策2(一部) CA/Browser ForumのOIDは付けない 日本ではセコムトラストシステムズなど
  16. FirefoxとChrome、どちらをいじるか 56 結論:Firefoxがオススメ Google Chrome (Chromium)は... • ソースコードがあまりにも巨大(数GB) • ビルドするためのGoogle独自ツール群、gclientなどが使わ

    れていて、ビルド手順が複雑怪奇 • WindowsでビルドしようとslnファイルをVisual Studioで開 いたら、1時間経っても起動しなかった • 「バベルの塔が神に怒られずに完成しちゃった」 出典:Turing Complete FM 25. https://turingcomplete.fm/25#t=33:49
  17. FirefoxソースでのEV OID構造体 58 static const struct EVInfo kEVInfos[] = {

    { // CN=Cybertrust Global Root,O=Cybertrust, Inc "1.3.6.1.4.1.6334.1.100.1", "Cybertrust EV OID", { 0x96, 0x0A, 0xDF, 0x00, 0x63, 0xE9, 0x63, 0x56, 0x75, 0x0C, 0x29, 0x65, 0xDD, 0x0A, 0x08, 0x67, 0xDA, 0x0B, 0x9C, 0xBD, 0x6E, 0x77, 0x71, 0x4A, 0xEA, 0xFB, 0x23, 0x49, 0xAB, 0x39, 0x3D, 0xA3 }, "MDsxGDAWBgNVB...(省略)...Q3liZXJ0cnVz" "dCBHbG9iYWwgUm9vdA==", "BAAAAAABD4WqLUg=", }, /security/certverifier/ExtendedValidation.cpp
  18. FirefoxソースでのEV OID構造体 59 static const struct EVInfo kEVInfos[] = {

    { // CN=Cybertrust Global Root,O=Cybertrust, Inc "1.3.6.1.4.1.6334.1.100.1", "Cybertrust EV OID", { 0x96, 0x0A, 0xDF, 0x00, 0x63, 0xE9, 0x63, 0x56, 0x75, 0x0C, 0x29, 0x65, 0xDD, 0x0A, 0x08, 0x67, 0xDA, 0x0B, 0x9C, 0xBD, 0x6E, 0x77, 0x71, 0x4A, 0xEA, 0xFB, 0x23, 0x49, 0xAB, 0x39, 0x3D, 0xA3 }, "MDsxGDAWBgNVB...(省略)...Q3liZXJ0cnVz" "dCBHbG9iYWwgUm9vdA==", "BAAAAAABD4WqLUg=", }, /security/certverifier/ExtendedValidation.cpp struct EVInfo { const char* dottedOid; const char* oidName; unsigned char sha256Fingerprint[SHA256_LENGTH]; const char* issuerBase64; const char* serialBase64; };
  19. nss toolsのppコマンドで簡単作成 60 $ nss/dist/Debug/bin/pp -t certificate-identity -i ./DigiCertHighAssuranceEVRootCA.der ...(省略)...

    Serial Number: 02:ac:5c:26:6a:0b:40:9b:8f:0b:79:f2:ae:46:25:77 Issuer DER Base64: MGwxCzAJ...(省略)...IFJvb3QgQ0E= Serial DER Base64: AqxcJmoLQJuPC3nyrkYldw== Serial DER as C source: { 16, "¥x02¥xac¥x5c...(省略)...¥xae¥x46¥x25¥x77" } Fingerprint (SHA-256): 74:31:E5:F4:C3:C1:CE:46:90:77:4F:0B:61:E0:54:40:88: 3B:A9:A0:1E:D0:0B:A6:AB:D7:80:6E:D3:B1:18:CF Fingerprint (SHA1): 5F:B7:EE:06:33:E2:59:DB:AD:0C:4C:9A:E6:D3:8F:1A:61:C7:DC:25
  20. Firefoxのデバッグ用EV OID 61 static const struct EVInfo kEVInfos[] = {

    { "1.3.6.1.4.1.13769.666.666.666.1.500.9.1", "DEBUGtesting EV OID", { 0x70, 0xED, 0xCB, 0x5A, 0xCE, 0x02, 0xC7, 0xC5, 0x0B, 0xA3, 0xD2, 0xD7, 0xC6, 0xF5, 0x0E, 0x18, 0x02, 0x19, 0x17, 0xF5, 0x48, 0x08, 0x9C, 0xB3, 0x8E, 0xEF, 0x9A, 0x1A, 0x4D, 0x7F, 0x82, 0x94 }, "MBExDzANBgNVBAMMBmV2cm9vdA==", "IZSHsVgzcvhPgdfrgdMGlpSfMeg=", }, /security/certverifier/ExtendedValidation.cpp このOIDをオレオレEV SSL証明書のOIDに使おう......
  21. プライベートCA作成 64 [Root CA] | +---[Sub CA] | +-----[Certificate 1]

    +-----[Certificate 2] +-----[Certificate 3] .......... 以下書籍を参考に各自がんばってください Ivan Ristić「プロフェッショナルSSL/TLS」 11.4 プライベートCAを作る
  22. オレオレEV OID入りの証明書作成 65 [server_ext_evssl] ....(省略).... certificatePolicies = 1.3.6.1.4.1.13769.666.666.666.1.500.9.1, 2.23.140.1.1 sub-ca.conf

    $ openssl ca -config sub-ca.conf -in server.csr ¥ -out server.crt -extensions server_ext_evssl openssl caで証明書発行 まずベンダ固有(オレ)のOID 次にCA/B ForumのOID
  23. これで行けるはず 1. 作ったデバッグ用OIDの入ったEV SSL証明書 をApache HTTP Serverに設定 2. FirefoxソースにPrivate CAのFingerprintなどを

    入れてビルド 3. ビルドしたFirefoxで、(1)にhttpsアクセス 4. EV表示が出る! ………はず 66
  24. Tor (.onion) のEV SSL証明書 69 Appendix F – Issuance of

    Certificates for .onion Domain Names A CA may issue an EV Certificate with .onion in the right-most label of the Domain Name provided that issuance complies with the requirements set forth in this Appendix: 1. CAB Forum Tor Service Descriptor Hash extension (2.23.140.1.31) The CA MUST include the CAB Forum Tor Service Descriptor Hash extension in the TBSCertificate convey hashes of keys related to .onion addresses. The CA MUST include the Tor Service Descriptor Hash extension using the following format: EV SSL Certificate Guidelines
  25. Tor (.onion) のSSL証明書の意義 71 • Torでは途中経路は匿名化&暗号化されるが、出 口ノード(末端)は暗号化されていない • Torを使いつつ、End-to-Endでの暗号化を保証し たい場合には意味がある

    • すべての発行されるSSL証明書は、Certificate Transparencyにより「丸見え」のため、FQDNは 全世界にバレる • 悪い人たちは使っていない • 現在対応してるCAはDigicertのみの模様
  26. Agenda •1st section “SSL証明書おさらい” •PKIと証明書 •DV/OV/EV SSL証明書 •2nd section “個人でEV

    SSL証明書” •普通に買えるのか •3rd section “オレオレEV SSL証明書” •自分で認証局から作っちまうか...... •Appendix “おもしろEV豆知識” 72
  27. 参考文献 • CA/Browser Forum • Baseline Requirements • Extended Validation

    Guidelines • https://cabforum.org/ • Ivan Ristić「プロフェッショナルSSL/TLS」 • https://www.lambdanote.com/products/tls • InternetWeek 2017 • 「今理解しておくべきWeb PKIを支えるトラストの動向」島岡 政基/セ コム株式会社 • https://www.nic.ad.jp/ja/materials/iw/2017/proceedings/s11/ • 自堕落な技術者の日記 • http://blog.livedoor.jp/k_urushima/ 73