自堕落な技術者の日記

基本は喰ってるか飲んでるかですが、よく趣味でカラオケ・PKI・署名・認証・プログラミング・情報セキュリティをやっています。旅好き。テレビ好きで芸能通

ルート認証局

Amazon AWSの認証局が少し怪しい件

Amazon AWSのELBとCloudFrontで使えるらしい、無料の証明書発行サービスで、AWS Certificate Manager(ACM)というのがあるそうです。([参考1])。ちょっと気になったきっかけはJavaからHTTPSで繋ぐと検証失敗するケースがあった


というので、ちょっと見始めたらドツボにはまったので、少しメモを書き残しておこうかとおもいます。

ACMの証明書を使ったサイトにブラウザで繋いでみると、、、

Javaで繋がらないとなると、ルート証明書や中間CA証明書が入ってないんだろうと疑ってみるとおもいます。 とりあえず、ブラウザで繋いだりしてみました。Windows 7のChromeやIEだとこんなパス。
view-ch-ie
Mac OS X(や多分iOSも)だとSafariでもChromeだとこんなパス。
safari-view
FirefoxだとOSによらず、WindowsでもMac OS Xでもこんなパス。
view-ff-chain
クライアント毎に使われている信頼するルート証明書が違うようです。 Starfieldルートになっているケースもありますね。 調べてみると、AmazonはGoDaddyからStarfieldルート認証局を一つ買ったのだそうです。

ACMの証明書を使ったサイトにブラウザで繋いでみると、、、

Amazonの証明書発行サービスはAmazon Trust Servicesというのだそうで、 証明書ポリシ、認証実施規程などの文書、ルート証明書、中間CA証明書などが置いてある リポジトリはこちらにあるようです。

リポジトリをよく見てみると、クロス証明書(片方向相互認証証明書、中間CA証明書)の リストがあるんですが、ハッシュと証明書のリンクが張ってあるだけで、大した説明もなく えらく不親切なページですよね。 認証局の構成がよくわからなかったので、これを元に図にしたのがコレです。(かなりの力作だとおもいます。)
ca-structure

なんかCAの鍵使いまわしてないですか?

このクロス証明書のリストで気になったのが、各Amazon Root 1〜4に対して、origとそうじゃないやつ、Starfieldに関してはv2とそうじゃないやつがある所です。 例えば、Amazon Root 1のorigとそうじゃないやつを比較してみると 以下の3点が違うだけで、

  • シリアル番号が違う
  • notBeforeが違う(origが2015年10月で、orig無しが2015年5月)
  • authorityInfoAccess拡張のcaIssuerのURLが少し違う。 http://{crl,crt}.rootg2.amazontrust.com/rootg2.cer となっている。origがcrlで、origなしがcrt。
とほとんど同じで、caIssuerを直したいだけのつまらない理由のために、中間CA証明書を再発行したようです。 これって中間CAの鍵を使いまわしてますよね。マズくないんですかね? さらに問題なのは、
  • どちらが正しい証明書なのかわからない。
  • ファイル名からはorigが古いように見えるが、 notBefore的には逆にorigが新しいようにも見える。
  • どちらか一方を失効しているわけでもなく、どちらも有効。
  • パス検証としてはどちらを使っても検証成功となるが、そんな事でいいのか?
  • 将来、{crl,crt}.rootg2.amazontrust.comのいずれかを無くす計画があると思うが、 それが明らかになっていない。
といった所です。 ちなみに、caIssuerに記載されたURLは、今の所はどちらもアクセス可能なようです。 両方にアクセスできるなら、なおさら中間CA証明書再発行の必要があったんですかねぇ? 単に、DNSの別名、CNAMEレコードの設定だけの問題なんじゃないですかねぇ。 また、本当はどちらに寄せたいと思っているのかも明らかにされてませんよねぇ。

同様に、Starfield Class 2 CAからStarfield Services Root CA G2に発行している 中間CA証明書も怪しくて、シリアル番号とnetBeforeだけが違う証明書があります。 どちらも失効していません。 こんなことして大丈夫なんですかねぇ? 最近、Certificate Transparency(CT)でSSLサーバー証明書全ての発行履歴残されており、 (私は最初はCTは嫌いだったのですが、) 認証局が問題あると、 (シマンテックのように、、、、) いろんな人が指摘してくれます。 中間CA証明書の発行についても、CTログに残しておかないと、 ヤバイ運用があるんじゃないかなぁ、、、、と思います。

Amazonの認証局はWebTrust認定もしており、Ernst Youngが監査しているそうですが、 こんなんで本当に大丈夫なんですかね?

Java 8?のcacertsのaliasについて

Amazon AWSやACMとは全く無関係ですが、最近自分は、Javaはめっきり触らなくなってしまい、今回の件でかなり苦労しました。Javaの信頼する認証局のためのキーストアファイルであるjre/lib/security/cacertsファイルなんですが、中のファイルを取り出そうとすると、そんなファイルは無いと怒られてしまいました。 よく見ると使ってみた新しい8u121では、aliasはこのようになっており、

% keytool -list -keystore jre/lib/security/cacerts   :中略 globalsigneccrootcar5 [jdk],2016/08/26, trustedCertEntry, 証明書のフィンガプリント(SHA1): 1F:24:C6:30:CD:A4:18:EF:20:69:FF:AD:4F:DD:5F:46: 3A:1B:69:AA starfieldservicesrootg2ca [jdk],2016/08/26, trustedCertEntry, 証明書のフィンガプリント(SHA1): 92:5A:8F:8D:2C:6D:04:E0:66:5F:59:6A:FF:22:D8:63: E8:25:6F:3F ttelesecglobalrootclass2ca [jdk],2016/08/26, trustedCertEntry, 証明書のフィンガプリント(SHA1): 59:0D:2D:7D:88:4F:40:2E:61:7E:A5:62:32:17:65:CF: 17:D8:94:E9 addtrustqualifiedca [jdk],2016/08/26, trustedCertEntry, 証明書のフィンガプリント(SHA1): 4D:23:78:EC:91:95:39:B5:00:7F:75:8F:03:3B:21:1E: C5:4D:8B:CF   :後略
例えば「starfieldservicesg2ca」だけではだめで、表示されている通り「starfieldservicesg2ca [JDK]」のようにちゃんと[JDK]までつけないといけなくなったのだそうです。知らなかったし、ハマりました。

GWなもんで、今日はこんなとこで。

参考リンク

A look at AWS Certificate Manager
ACMを使い始めるときに参考になる。ACMを使ったサイト。
Free SSL With Amazon’s AWS Certificate Manager (ACM)
ACMを使い始めるときに参考になる。(その2)
ACM FAQ
公式サイトのFAQ

Android 4.0.4 と 4.3.1 のルート証明書リストの違いを見てみたぞ

熱があって体調激悪ですが、なんか書いてみましたの第一弾です。

4.4 KitKatが出る前に、手持ちのAndroid 4.0.4と4.3.1の信頼するルート証明書のリストの魚拓(=バックアップ)を取っておこうと Root CA Viewer Lite(for Android 4.x) に手を加えてみたんですが、別の会にでもお話をしようと思うハマったポイントがあり紆余曲折の末、 まぁ何とか半日かけてアップデートができたわけです。

今回のRoot CA Viewer Lite 1.2.2の機能追加では、Android 4.xのルート証明書をシステム登録されたものも、 ユーザ追加したものも全てASN.1 DERバイナリ形式で取り出し、ZIPで固めてこれをSDカードの領域に エクスポートするというものです。 (本当は処理中のグルグルとか表示させないといけないんでしょうけど、 手抜きでホントすみません。)

で、比較してみると

これで無事、ルート証明書は取り出せるようになったので、 比較してみましょう。差分の個数はこんな感じ。

バージョンルート認証局数追加変更
Android 4.0.4134--
Android 4.3.1146122
古いXperiaの時にもルート認証局のリストを調べていますが、 その時はAndroid 1.6 で 52のルート認証局でした その時から比べて随分増えていますよね。

新規追加されたのは

以下が、新規に追加された12個のルート認証局の一覧です。欧州が多い感じがありますが、セコムトラストさんも追加されてますね。 ほぼ、SHA256withRSAなんだなぁっていうのが特徴的かなと思います。

認証局の識別名(DN)有効期間署名アルゴリズムRSA鍵長
CN=D-TRUST Root Class 3 CA 2 2009,O=D-Trust Gmbh,C=DE2009-2029SHA256withRSA2048bit
CN=T-TeleSec GlobalRoot Class 3,OU=T-Systems Trust Center,O=T-systems Enterprise Services GmbH,C=DE2008-2033SHA256withRSA2048bit
CN=Buypass Class 3 Root CA,O=Buypass AS-983163327,C=NO2010-2040SHA256withRSA4096bit
CN=Swisscom Root CA 2,OU=Digital Certificate Services,O=Swisscom,C=CH2011-2031SHA256withRSA4096bit
CN=Izenpe.com,O=IZENPE S.A.,C=ES2007-2037SHA256withRSA4096bit
CN=Certinomis - Autorité Racine,OU=0002 433998903,O=Certinomis,C=FR2008-2028SHA1withRSA4096bit
CN=Buypass Class 2 Root CA,O=Buypass AS-983163327,C=NO2010-2040SHA256withRSA4096bit
CN=EC-ACC,OU=Jerarquia Entitats de Certificacio Catalanes,OU=Vegeu https://www.catcert.net/verarrel (c)03,OU=Serveis Publics de Certificacio,O=Agencia Catalana de Certificacio (NIF Q-0801176-I),C=ES2003-2031SHA1withRSA2048bit
CN=A-Trust-nQual-03,OU=A-Trust-nQual-03,O=A-Trust Ges. f. Sicherheitssysteme im elektr. Datenverkehr GmbH,C=AT2005-2015SHA1withRSA2048bit
OU=Security Communication RootCA2,O=SECOM Trust Systems CO.,LTD.,C=JP2009-2029SHA256withRSA2048bit
CN=D-TRUST Root Class 3 CA 2 EV 2009,O=D-Trust GmbH,C=DE2009-2029SHA256withRSA2048bit
CN=Root CA Generalitat Valenciana,OU=PKIGVA,O=Generalitat Valenciana,C=ES2001-2021SHA1withRSA2048bit

変更されたのは???

認証局の識別名(DN)有効期間署名アルゴリズムRSA鍵長
CN=Thawte Premium Server CA/emailAddress=premium-server@thawte.com,OU=Certification Services Division,O=Thawte Consulting cc,L=Cape Town,ST=Western Cape,C=ZA1996-2021SHA1withRSA1024bit
CN=Thawte Server CA/emailAddress=server-certs@thawte.com,OU=Certification Services Division,O=Thawte Consulting cc,L=Cape Town,ST=Western Cape,C=ZA1996-2021SHA1withRSA1024bit
両方ともThawteのやつなんですが、証明書の変更された差分を見てみると、認証局の鍵は1024bitのやつ同じものを使ったまま、署名アルゴリズムをMD5withRSAからSHA1withRSAにして、 有効期限を1年延ばして、シリアル番号を変更して証明書をロールオーバーしちゃってます。 鍵長もそうですが、同じ鍵を使い続けててこれ、ホント大丈夫なんですかね。運用規定違反になったりしないのかな。

おまけ

Root CA Viewer Liteで証明書をエクスポートすると、個々の証明書のファイルは「system_4fbd6bfa.0」みたいない感じになっており、JCEの証明書ストアの証明書のalias 「system:4fbd6fa.0」に対応しています。「4fbd6fa.0」はOpenSSLの認証局の証明書ファイルの保管方法によるもので、証明書の識別名のハッシュみたいなものから作られています。 この名前の決まり方はJNSAのセミナー「OpenSSL 1.0.0のリリースについて」でお話しており、 スライドのページ番号32、33をご覧頂ければと思います。 この記事思い出して確認したんですが、 ハッシュファイル名は -subject_hash_old の方、つまりOpenSSL 0.9.8ベースのハッシュファイル名になったままのようですね。 とはいえ、ベースとなっているOpenSSLは0.9.8とは限らないので、どのなのかは調べる方法あるんですかね。

今日はこのへんで

関連記事

最新記事
Categories
Archives
Twitter
記事Google検索

本ブログ内をGoogle検索
Yahoo!アクセス解析
Travel Advisor
記事検索
QRコード
QRコード
  • ライブドアブログ