Secure Socket Layer (SSL) はパーティ間のセキュアな 転送経路を提供するアプリケーションレイヤプロトコルです。 HTTP, LDAP, SMTP 等々のアプリケーションレベルのプロトコルと TCP/IP との間をとりもつもので、 公開鍵暗号システム (種々の暗号化方法が利用可能) と X.509 証明方式に基づいています。
SSL はもともと Netscape のプロトコルでしたが、 徐々に標準的なものとなり、 今では TLS (Transmission Layer Security) と呼ばれるものになりました。 一般的に SSL/TLS として言及されます。
SSL/TLS プロトコルは以下の機能を提供します。
データの暗号化 ― クライアント/サーバ間の セッションが暗号化されます。
サーバ認証 ― クライアント側から、サーバが 本物かどうかを検証することができます。
メッセージ完全性 ― データは転送中に手を加えられません。 これは「man in the middle」攻撃[1]を防止します。
クライアント認証 ― サーバはクライアントが 本物かどうか検証できます。
LDAP V3 のツールキットである OpenLDAP 2.0.x からは、 サーバによって SSL/TLS サポートが備えられています。 ただし SSL/TLS を追加するためには、OpenLDAP 2.0.x が OpenSSL のライブラリを使ってコンパイルされる必要があります。 また、2.0.x には Start-TLS のサポートもあります。
Note: Start-TLS は、クライアントが要求したときだけ TLS を有効にすることができるようにします。この方法だと、単独の LDAP ポートをセキュアな接続とそうでない接続の両方に使うことが可能です。
OpenLDAP 1.2.x はそれとは異なり LDAP V2 プロトコルによる実装であり、SSL/TLS を備えていません。
OpenLDAP 2.0.x 上の SSL/TLS に関しては OpenLDAP のウェブサイトに 価値ある情報がありますので、ここでは SSL/TLS に対応していない LDAP パーティを SSL トンネルを使ってセキュアにする方法に焦点を合わせることにします。
OpenLDAP 1.2.x を使っているならば、サーバに SSL 機能を 追加するためには汎用 SSL ラッパが必要になります。stunnel (www.stunnel.org) は 安定していて、この目的に適しています。
stunnel のインストールはとても簡単ですが、はじめに OpenSSL (www.OpenSSL.org) をインストールして、必要なライブラリとツールを用意しなくてはなりません。
OpenSSL とは SSL プロトコルのオープンソースによる実装であり、 SSL のライブラリと暗号ツール一式を備えています。
OpenSSL をインストールするには 次のコマンドを入力しなくてはなりません。
$ ./config $ make $ make test # make install |
ふつうは、すべて /usr/local/ssl 内に インストールされることになります。
OpenSSL が正しくインストールされていれば、stunnel をコンパイルして インストールするために入力が必要なのは、次のコマンドだけです。
$ ./configure $ make # make install |
stunnel は SSL にサーバ証明書を使います。 これは自己署名の証明書 (self signed certificate) でもよいのですが、 さらに良いのは自分の認証局 (Certification Authotrity) によって署名された 証明書です (SSL クライアントもその CA を信用していなくてはなりませんが)。
そのような証明書の、一般的に用いられる保管場所はここです。
/usr/local/ssl/certs/stunnel.pem |
もし認証局の 有無を気にしないのであれば、 OpenSSL セットによって提供されるツールを使って、 自己署名の証明書を作成できます。
stunnel のディレクトリ内の stunnel.cnf という設定ファイルを使うため、そのディレクトリで、次のコマンドを 入力してください。
$ openssl req -new -x509 -days 365 -nodes -config stunnel.cnf -out stunnel.pem -keyout stunnel.pem $ openssl gendh 512 >> stunnel.pem |
これによって、自己署名による一年間有効な証明書が stunnel.pem ファイルの中に作成されます。
stunnel がインストールされたら、まず最初に次のようにして LDAP サーバを 389 番のポート (デフォルトの LDAP ポート) 上に 起動してください。
# /usr/local/libexec/slapd |
それから次のように 636 番の (LDAPS クライアントによって 使用される) ポートに stunnel でトンネルしてください。
# /usr/local/sbin/stunnel -r ldap -d 636 -p /usr/local/ssl/certs/stunnel.pem |
デバッグのために次の書式でフォアグラウンドに stunnel を起動することもできます。
# /usr/local/sbin/stunnel -r ldap -d 636 -D 7 -f -p /usr/local/ssl/certs/stunnel.pem |
多くの LDAP クライアントは SSL 対応ではありません。 しかし stunnel をクライアントモードで使うことで、 これらのクライアントに SSL を提供することが可能です。
これは非常に簡単です。クライアントホスト上で stunnel を 次のように起動して、LDAPS ポートに対する要求を実際の LDAP サーバに 転送するようにしてください。
# stunnel -c -d 636 -r ldapserver.yourorg.com:636 |
このとき LDAP クライアントは localhost:636 を LDAPS サーバとして使うよう設定されなくてはなりません。
現時点で slurpd (slapd レプリケーションデーモン) は SSL 機能を 持っていないとはいえ、stunnel をクライアントモードで使って、 この役割をさせることができます。
次のようにマスタサーバ上でクライアントモードの stunnel を使い、 ローカルポートをリモートポートに転送してください。
# stunnel -c -d 9636 -r ldapreplica.yourorg.com:636 |
そしてマスタ LDAP サーバの slapd.conf に次の記述を入れてください。
replica host=localhost:9636 |
[1] | 訳注:送信者に なりすました第三者がデータを改竄するなど。「中間介入」とも訳すそうです。 |