第16回 OpenSSLでPKI
2003/5/17作成
2005/1/31更新
第15回でApache+mod_sslをやったのですが、あまりPKIの仕組みを理解しないまま作成してしまったので中途半端な特集になってしまいました。
その後、もう少し勉強しました。
かなり作業が細かく、しかも設定の際はたくさん鍵や証明書を作ったり、いろんなシステム間を行き来するので混乱しがちです。
自分でも整理してみたいのでまとめました。
さらにもう少し勉強したので、内容を充実させました。(2004/09/19追加)
1.目的
PKI技術である証明書発行の流れや、httpサーバであるApacheでの証明書の利用をメインでお送りします。
また、証明書管理を行うにあたり、時間があればLDAPの利用も視野にいれて実験しようと思います。
具体的には以下のような作業があります。
2.事前準備
今回の実験に使うのは以下のとおりです。
OpenSSL 今回の要、PKIの管理をする Apache mod_ssl サーバ証明書を発行したりクライアント証明書の認証をさせたりします OpenLDAP 証明書をLDAPで管理できるらしいので、時間があったらやってみたいです
今回のメインはopensslです。
最近は、というかだいぶ前からですがLinuxも*BSDもtelnetのかわりにsshを使うようになったので依存関係によりopensslは標準で入っているのですぐに使えると思います。
入っていなくてもあわてずにpkg_addやrpmで入れましょう。
ソースから入れるのも簡単ですし。
注意したいのは、openssl関連は頻繁にセキュリティホールが発見されています。
なるべく最新のバージョンを使うか、きっちりパッチをあてるようにしましょう。
かくいううちのサイトも実験前に3月に出たパッチをさっそくあてました。
どうしてopenssl関係ってこんなにバグが出るのかなとまえまえから不思議だったのですが、この特集を書くくらいになってようやく原因がわかりました。
opensslって機能が多すぎなんです。1つのコマンドでいろんな機能がつまっているので、ソースが膨大なんでしょうね。
Apacheのssl対応にはSSL版のApacheとmod_sslを使う方法があります。
SSL版のApacheは本家のApacheに組み入れた形でリリースされるのですが、最新版のApacheが公開されてからしばらくしてSSL組み込み版が公開されるので、どうしてもタイムラグが発生します。
mod_sslはApacheのモジュールという形で提供されるため、Apacheのバージョンに依存しません。
Apacheにバグが見つかった場合、mod_sslはApacheだけをバージョンアップすればいいので、こっちのほうがおすすめです。
SSL版のApacheは以前は主流でしたが、最近はあまり聞きません。
mod_sslはApache1.3系では外部モジュールと言う形で提供されていましたが、Apache2からは標準添付モジュールとして提供されています。
なので、今後はSSL版のApacheとかmod_sslのソースとかをあまり意識しなくなるでしょう。
3.openssl.cnfについて
openssl.cnfを翻訳して若干手を加えてみました。
Windowsでは拡張子がcnfだと変な挙動を起こすのでファイル名が.txtになっています。
全く同じものをopenssl.cnfとして置いてありますが、環境によっては誤動作するかもしれません。
UNIXのコンソールからfetchしたりwgetするのに都合いいかもしれません。
がんばって少しだけ翻訳していたものを以前より置いてあったのですが、地味に載せていたためgoogleの検索に引っかかっていなかったようです。
それなりに自信作なので、確信犯(誤用)的に検索ヒット率を上げてみようという試みも含んでいます(汗)
参考サイト
PKI関連技術解説(IPA) http://www.ipa.go.jp/security/pki/index.html
The Open Source toolkit for SSL/TSL (本家)http://www.openssl.org/
The Open Source toolkit for SSL/TSL (日本語サイト)http://www.infoscience.co.jp/technical/openssl/
The Apache Interface to OpenSSL(mod_ssl)
http://www.modssl.org/
Apache-SSL http://www.apache-ssl.org/
OpenLDAP http://www.openldap.org/