2006年06月09日

システム管理者の心得? 〜 OpenSSLコマンドで証明書をチェック(3)

はてなブックマークに登録

前回は、openssl コマンドの -CAfile オプションでCA証明書を指定してみました。
しかし、この方法だと検証したいサーバ証明書がどの認証機関で署名されているのかをあらかじめ知っておかないといけません。「うちはぜ〜んぶべり☆☆☆だもん」みたいな運用ならばさほど困らないかもしれませんが、サービスによって利用している認証機関が異なっていたり、独自に組織別CAを構築して運用しているような場合は少々面倒です。やはりCA証明書は勝手に選択して欲しいものです。
特に弊社のDSASでは、様々なコンテンツが同じシステムに同居しているため、どのサイトがどの認証機関を使っているかを全て把握することは至難の業だったりします。

ということで、openssl には -CApath というオプションがあります。
使い方は -CAfile と同様で


$ openssl s_client -connect localhost:4433 -CApath <ディレクトリ名>



のようにするだけです。
あとは、そのディレクトリにCA証明書を全部放り込めば良いのですが、ファイル名の付け方に少々決まりがあります。-CApath オプションを指定された際に openssl が利用するCA証明書のファイル名は、


<指定したディレクトリ>/(検証すべき証明書の issuer のハッシュ値).0



となります。
「検証すべき証明書」とは、今回の場合 s_server で指定したサーバ証明書を指します。

issuerのハッシュ値」とは、「サーバ証明書の発行機関(issuer) = 検証に使うCA証明書の保有者(subject)」 のハッシュ値になります。
つまり、ファイル名は 「CA証明書のsubjectのハッシュ値.0」という形式である必要があります。
ちなみに subject のハッシュ値は以下のコマンドで取得できます。


$ openssl x509 -in <CA証明書のファイル名> -hash -noout


(コマンドの詳細は man x509 をご覧下さい)

ただ、CA証明書のファイル名をこの形式にしてしまうと、ぱっと見たときに何のファイルなのかわからなくなってしまうので、大抵はシンボリックリンクを張ります。(これをハッシュリンクと呼んだりします)
言葉での説明だけだと眠くなってしまいますので、コマンドに落としてみましょう。


$ cp CA.pem /usr/local/etc/ssl/CA/
$ cd /usr/local/etc/ssl/CA/
$ ln -s CA.pem `openssl x509 -in CA.pem -hash -noout`.0
$ openssl s_client -connect localhost:4433 -CApath /usr/local/etc/ssl/CA/



こんな感じで必要な分だけ /usr/local/etc/ssl/CA/ にハッシュリンクを作っておけば、-CApath オプションを使うだけで自動的に必要なCA証明書を選択してくれるようになります。

普段はあまり使う機会がなく、意外と敬遠しがちな opensslコマンドですが、使い方を覚えるとWEBサーバとブラウザがなくても証明書ファイルの有効性をチェックできるようになりますし、SSLに関する理解を深めるきっかけにもなると思います。

SSLは使ってるけど openssl コマンドは叩いたことがないという方は、是非一度遊んでみることをお勧めします。

klab_gijutsu2 at 08:00│Comments(0)TrackBack(0)

トラックバックURL

この記事にコメントする

名前:
URL:
  情報を記憶: 評価: 顔   
 
 
 
Blog内検索
Archives
このブログについて
DSASとは、KLab が構築し運用しているコンテンツサービス用のLinuxベースのインフラです。現在5ヶ所のデータセンタにて構築し、運用していますが、我々はDSASをより使いやすく、より安全に、そしてより省力で運用できることを目指して、日々改良に勤しんでいます。
このブログでは、そんな DSAS で使っている技術の紹介や、実験してみた結果の報告、トラブルに巻き込まれた時の経験談など、広く深く、色々な話題を織りまぜて紹介していきたいと思います。
最新コメント