Apache2でのTLSのセットアップ#
ヒント
ここで説明されているのと全く同じコンセプトが、opensslをcrypto-backendとして使用する多くのアプリケーションに使用できます。コンセプトは主に以下のようなものです:セキュリティトークン(Nitrokey)上のキーを参照するPKCS#11 URLで(秘密の)キーファイルを置き換える。
準備#
セキュリティキーを使用するように Apache2 を設定する#
基本的には、``SSLCertificateFile``を適切なPKCS#11のURLに置き換え、鍵や証明書への他の参照を削除するだけです。例えば、``SSLCertificateKeyFile``はもう必要ありません。
ディレクティブの例は次のようになります。
SSLCertificateFile "pkcs11:model=PKCS%2315%20emulated;manufacturer=www.CardContact.de;serial=DENK0123123;token=UserPIN%20%28SmartCard-HSM%29;id%01"
適切なPKCS#11 URLは、 :doc:`PKCS#11 URL Generation<pkcs11-url>`で説明されているように抽出することができます。
このディレクティブは必ず VirtualHost の設定の中に入れてください。
Apache2起動時のPINの提供#
前述の方法を使うと、Apache2 は起動の度に User-PIN を尋ねてきますので、 基本的にバッチ起動はしません。Apache2 は起動時に PIN を提供する別のディレクティブを提供します。
SSLPassPhraseDialog "|/bin/echo 123456"
Apache2は、``|``の後に実行ファイルを期待しており、起動時に実行され、その出力(末尾の改行が期待される)がPINとして使用されます。明らかに、このアプローチを使って、任意の複雑なPIN検索方法を実装することができます。しかし、ここでは、起動時に``echo``のPINを取得するだけの些細な例が選ばれています。
さらに、``SSLPassPhraseDialog``はグローバルなディレクティブなので、Apache2ではグローバルなコンフィギュレーションスコープに置かなければなりません。
警告
この例では、PINが設定の中に平文で書き込まれるため、PINを渡すための安全なメカニズムではありません。
この機能の詳細については、`Apache2 mod_ssl documentation`_を参照してください。
Apache2の完全な設定例#
完全なApache2(VirtualHost
)のコンフィグ・スニペットは次のようになります。
<IfModule mod_ssl.c>
SSLPassPhraseDialog "|/bin/echo 123456"
<VirtualHost _default_:443>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine on
SSLCertificateFile "pkcs11:model=PKCS%2315%20emulated;manufacturer=www.CardContact.de;serial=DENK0105076;token=UserPIN%20%28SmartCard-HSM%29"
#SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
</VirtualHost>
</IfModule>