技術者ブログ

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

2017年10月

1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        
  • お問い合わせはこちら
Scutum開発者/エンジニアによる技術ブログ WAF Tech Blog

SSL中間CA証明書を検索するウェブサービス、SSLDB.info

はじめに

SSLを使うウェブサイトでは、ウェブサーバへのサーバ証明書のインストール作業が必要となります。このときややこしいのが、中間CA証明書の扱いです。多くの場合、証明書会社が発行するサーバ証明書は、ユーザのウェブブラウザにインストールされているルート証明書から直接署名されているわけではありません。ルート証明書によって署名された中間CA証明書によって署名されています。そのため、ブラウザはサーバ証明書とルート証明書の信頼のチェーンを辿るために、中間CA証明書を必要とします。

中間CA証明書が見当たらない場合、サーバ証明書が正しいものであるにもかかわらず、ブラウザはエラーと判断してしまいます。そのため、サーバ証明書をインストールする場合には、それに対応する中間CA証明書も一緒にインストールするのが一般的な方法となります。

ややこしさを増す中間CA証明書

最近では推奨されるRSAの鍵長が1024bitから2048bitへと変化したことなどから、各証明書会社において、主に用いられるルート証明書に変化がありました。しかし、古いブラウザからのアクセスも依然として無視できないため、新しい2048bitのルート証明書と、古い1024bitの証明書のどちらからでも信頼のチェーンを辿ることができるように、クロスルート方式とよばれる中間CA証明書のインストール方法がメジャーなものとなってきています。

この場合、具体的には中間CA証明書を2枚インストールすることが多くなります。また、動作確認のためには新しいブラウザと古いブラウザの両方でアクセスを行い、問題がないかどうか試す必要があります。そのため「サーバ証明書をウェブサーバにインストールする際に、どの中間CA証明書を一緒にインストールするべきか?」という問題はややこしさを増しており、ウェブサーバ管理者の悩みの種となっていると言えるでしょう。

Scutumにおける中間CA証明書管理の問題

SaaS型のWAFサービスであるScutum(スキュータム)では、ScutumはSSLのサーバとしても動作します。そのためサービスの運営においてサーバ証明書や中間CA証明書、秘密鍵などを多く扱います。

現在のサービスではお客様が専用のウェブ管理画面からサーバ証明書や中間CA証明書などの必要なファイルをアップロードし、その後Scutumの担当エンジニアが内容を確認してからScutumへのサーバ証明書のインストール作業を行う、という形となっています。つまり、人手を用いての作業となっています。

これまでにサービスを運営してきた中で我々が気がついたのは、非常に多くのお客様において、中間CA証明書が正しく扱われていないということです。必要とされる中間CA証明書を正しくアップロードされるお客様は割合として約半数といったところです。残りの半数のお客様は以下のような間違いをされていることが多くなっています。

  • 中間CA証明書をまったくアップロードされない
  • 誤った内容の中間CA証明書をアップロードされる
  • アップロードされる中間CA証明書が足りない(前述したクロスルート方式に対応できない)

このような状況の中で、我々Scutumのエンジニアは、お客様の証明書の情報を元に正しい中間CA証明書を見つけ、間違っている場合には正しいものを用いてインストール作業を行う、といった運用を行ってきました。しかしこの作業はヒューマンスキルに依存する部分が多く、ミスをしやすい要素が多かったため、サービス運用チームの中ではかねてより自動化することが課題のひとつとなっていました。

独立したウェブサービスとして開発

今年(2011年)になって、下記の確証が得られるようになってきました。

  • サーバ証明書から中間CA証明書を自動的に見つける(検索する)機能を実現すれば、省力化と作業ミスの低減に繋げられる
  • サーバ証明書をもとにした中間CA証明書の検索機能は、実用的な精度で実装が可能である

そこで、2011年の8月初旬から「中間CA証明書検索機能」の実装を開始しました。開発にはJavaとMongoDBを用い、以下のような項目に沿って進めました。

  • 広く使われているメジャーなルート証明書を元にする
  • 現在インターネット上で使用されている中間CA証明書のデータを多く集める
  • これらによって形成される信頼のチェーンのパターンを蓄積する
  • 蓄積されたパターンを検索する機能を作る

途中、予想していたよりもSSLの海が深かったために何度も溺れそうになりましたが、9月の中旬になんとか実用的なレベルまで仕上げることができました。この検索機能は単体で完結するシンプルなものであり、またオープンソースソフトウェアと同様に、コミュニティによるフィードバックが得られればより良いクオリティに繋がると判断しました。そこで、Scutumとは切り離し、独立したウェブサービスとして、インターネット上で無料で公開することとしました。

SSLDB.info
http://www.ssldb.info/

PEM形式のサーバ証明書を貼り付け、「search」ボタンを押すと、一緒にインストールすべき中間CA証明書がPEM形式で得られるようになっています。検索結果は単純に信頼のチェーンの条件を満たすものではなく、実際にインターネット上で利用されている頻度や証明書の有効期限などから総合的に判断されたものが出てくるようになっています。このチューニングはサービスの品質に直結しており、今後もより高い精度を目指してテストとチューニングを重ねていきたいと考えています。

今後はScutumやAWS(Amazon Web Services)のELBのように、SSL証明書を利用者側が管理していくサービスが増えていくものと思われますが、そのようなサービスを設計している人からも利用できるよう、今後APIなども提供できればと考えています。

バックグラウンド

データベースの構築については、ユタ州立大学(USU)のネットワーク管理者の方から教えて頂いた、EFFのSSL Observatory Projectのデータを出発点にしました。彼らが集めた100万単位のSSL証明書のデータがEC2上やBitTorrentから無料でダウンロードできるようになっています。私はBitTorrentでダウンロードしましたが、なんとサイズが16GBもあるMySQLのダンプファイルで、リストアするのに一晩かかりました。

現在サーバはAWSの東京リージョンを利用しており、microインスタンスで動作しています。MongoDB+Tomcatという非常にシンプルな作りで、microインスタンスでも十分性能が出ているようです。また、DNSには使いやすいインターフェースによる手軽なDNS管理を実現したDozens.jpを利用しています。

SSLDB.infoのtwitterアカウントも用意しましたので、フィードバック送っていただければありがたいです(もちろん日本語でOKです)。ウェブサーバ管理者の一手間を省くことのできるサービスとしてご利用いただければ幸いです。