DeleGateでクライアント認証付きSSLリバースプロキシサーバ
DeleGateでクライアント認証付きSSLリバースプロキシサーバ、いわゆるSSL-VPNの一種を構築しようとしています。
クライアント認証にはSSLクライアント証明書を使います。クライアント証明書をまともに運用しようとするとCRL(証明書失効リスト)を使わないといけません。
DeleGateはCRLを読み込めるのですがかなりハマりやすい手順なのでメモしておきます。
OpenSSLで以下のファイルを作成します。作り方は検索すればすぐに見つかるのでここで書くこともないでしょう。これらのファイルを /var/spool/delegate-nobody/lib に置きます。
server-key.pem: サーバの秘密鍵 server-cert.pem: サーバ証明書 cacert.pem: CAのルート証明書 crl.pem: CRL
ここからがハマりポイントです。サーバの秘密鍵、サーバ証明書、CAのルート証明書はsslwayのオプションで指定できるのですがCRLのファイル名を指定する設定項目はありません。
CRLを読み込ませるには以下のようにハッシュ値をファイル名としたシンボリックリンクを作成しておきます。拡張子も忘れずに付けます。
ln -s cacert.pem `openssl x509 -in cacert.pem -hash -noout`.0 ln -s crl.pem `oepnssl crl -in crl.pem -hash -noout`.r0
DeleGateの設定例を書いておきます。DeleGateをSSLリバースプロキシとして、webserverに素のHTTPで接続する構成を考えます。
delegeted -P443 \ SERVER=https \ FCL='sslway -key server-key.pem -cert server-cert.pem \ -CApath /var/spool/delegate-nobody/lib -Vrfy -crl_check' \ MOUNT='/* http://webserver/*' \ PERMIT='http:{webserver:80}:*'
-Vrfyはクライアント証明書の提示・認証を強制するオプションで、-crl_checkはCRLを読み込むオプションです。-crl_checkはマニュアルのどこを見ても書いてありませんので注意。
以下愚痴
企業で自己署名証明書なんか使いたくないなあ。
ちょっとはセキュリティに金かけろよ。