Apache2でのTLSのセットアップ

ヒント

ここで説明されているのと全く同じコンセプトが、opensslをcrypto-backendとして使用する多くのアプリケーションに使用できます。コンセプトは主に以下のようなものです:セキュリティトークン(Nitrokey)上のキーを参照するPKCS#11 URLで(秘密の)キーファイルを置き換える。

準備

  • ``mod_ssl``を適切にサポートするために、`apache2`のバージョンが最低でも2.4.42であることを確認してください。

  • ``mod_ssl``を、``a2enmod ssl``を使って、まだやっていなければ起動する。

  • さらに``openssl``が必要で、``libengine-pkcs11-openssl``は 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>