ApacheとNginxでOCSPステープリングを設定する方法
序章
OCSPステープリングはTLS/SSL拡張機能であり、訪問者のプライバシーを維持しながらSSLネゴシエーションのパフォーマンスを向上させることを目的としています。 構成を進める前に、証明書失効がどのように機能するかについて簡単に説明します。 この記事では、StartSSLによって発行された無料の証明書を使用して説明します。
このチュートリアルでは、以下に概説するApacheとNginxの基本構成を使用します。
OCSPについて
OCSP(Online Certificate Status Protocol)は、SSL証明書が取り消されているかどうかを確認するためのプロトコルです。 これは、SSLネゴシエーション時間を短縮するためのCRLの代替として作成されました。 CRL(Certificate Revocation List)を使用すると、ブラウザは失効した証明書のシリアル番号のリストをダウンロードし、現在の証明書を確認します。これにより、SSLネゴシエーション時間が長くなります。 OCSPでは、ブラウザはOCSP URLに要求を送信し、証明書の有効性ステータスを含む応答を受信します。 次のスクリーンショットは、digitalocean.comのOCSPURIを示しています。
OCSPステープリングについて
OCSPには、プライバシーとCAのサーバーへの大きな負荷という2つの大きな問題があります。
OCSPでは、ブラウザがCAに接続して証明書の有効性を確認する必要があるため、プライバシーが侵害されます。 CAは、どのWebサイトにアクセスしているか、誰がアクセスしたかを認識しています。
HTTPS Webサイトに多数の訪問者がいる場合、CAのOCSPサーバーは、訪問者によって行われたすべてのOCSP要求を処理する必要があります。
OCSPステープリングが実装されている場合、証明書所有者(読み取りWebサーバー)はOCSPサーバー自体にクエリを実行し、応答をキャッシュします。 この応答は、 Certificate StatusRequest拡張応答を介してTLS/SSLハンドシェイクで「ステープル」されます。 その結果、CAのサーバーは要求に負担をかけられず、ブラウザーはユーザーの閲覧習慣を第三者に開示する必要がなくなります。
OCSPステープリングのサポートを確認してください
OCSPステープリングはでサポートされています
- Apache HTTPサーバー(> = 2.3.3)
- Nginx(> = 1.3.7)
続行する前に、次のコマンドを使用してインストールのバージョンを確認してください。
Apache:
apache2 -v
Nginx:
nginx -v
CentOS / Fedoraユーザーは、apache2
をhttpd
に置き換えます。
CAバンドルを取得する
ルートCAと中間CAの証明書をPEM形式で取得し、それらを1つのファイルに保存します。 これは、StartSSLのルートおよび中間CA証明書用です。
cd /etc/ssl wget -O - https://www.startssl.com/certs/ca.pem https://www.startssl.com/certs/sub.class1.server.ca.pem | tee -a ca-certs.pem> /dev/null
CAがDER形式の証明書を提供している場合は、それらをPEMに変換します。 たとえば、DigiCertはDER形式の証明書を提供します。 それらをダウンロードしてPEMに変換するには、次のコマンドを使用します。
cd /etc/ssl wget -O - https://www.digicert.com/CACerts/DigiCertHighAssuranceEVRootCA.crt | openssl x509 -inform DER -outform PEM | tee -a ca-certs.pem> /dev/null wget -O - https://www.digicert.com/CACerts/DigiCertHighAssuranceEVCA-1.crt | openssl x509 -inform DER -outform PEM | tee -a ca-certs.pem> /dev/null
どちらのコマンドセットもtee
を使用してファイルに書き込むため、root以外のユーザーとしてログインしている場合は、sudo tee
を使用できます。
ApacheでのOCSPステープリングの構成
SSL仮想ホストファイルを編集し、これらの行を Inside <VirtualHost></VirtualHost>
ディレクティブに配置します。
sudo nano /etc/apache2/sites-enabled/example.com-ssl.conf
SSLCACertificateFile /etc/ssl/ca-certs.pem SSLUseStapling on
キャッシュの場所はoutside<VirtualHost></VirtualHost>
で指定する必要があります。
sudo nano /etc/apache2/sites-enabled/example.com-ssl.conf
SSLStaplingCache shmcb:/tmp/stapling_cache(128000)
この記事に従ってApacheでSSLサイトをセットアップした場合、仮想ホストファイルは次のようになります。
/etc/apache2/sites-enabled/example.com-ssl.conf
<IfModule mod_ssl.c> SSLStaplingCache shmcb:/tmp/stapling_cache(128000) <VirtualHost *:443> ServerAdmin webmaster@localhost ServerName example.com DocumentRoot /var/www SSLEngine on SSLCertificateFile /etc/apache2/ssl/example.com/apache.crt SSLCertificateKeyFile /etc/apache2/ssl/example.com/apache.key SSLCACertificateFile /etc/ssl/ca-certs.pem SSLUseStapling on </VirtualHost> </IfModule>
configtest
を実行して、エラーをチェックします。
apachectl -t
Syntax OK
が表示されたらリロードしてください。
service apache2 reload
IE(Vista以降)またはFirefox 26以降でWebサイトにアクセスし、エラーログを確認します。
tail /var/log/apache2/error.log
SSLCACertificateFile
ディレクティブで定義されたファイルが欠落している場合、次のようなエラーの証明書が表示されます。
[Fri May 09 23:36:44.055900 2014] [ssl:error] [pid 1491:tid 139921007208320] AH02217: ssl_stapling_init_cert: Can't retrieve issuer certificate! [Fri May 09 23:36:44.056018 2014] [ssl:error] [pid 1491:tid 139921007208320] AH02235: Unable to configure server certificate for stapling
そのようなエラーが表示されない場合は、最後のステップに進みます。
NginxでのOCSPステープリングの構成
SSL仮想ホストファイルを編集し、server {}
セクション内に次のディレクティブを配置します。
sudo nano /etc/nginx/sites-enabled/example.com.ssl
ssl_stapling on; ssl_stapling_verify on; ssl_trusted_certificate /etc/ssl/private/ca-certs.pem;
この記事に従ってNginxでSSLホストをセットアップした場合、完全な仮想ホストファイルは次のようになります。
/etc/nginx/sites-enabled/example.com.ssl
server { listen 443; server_name example.org; root /usr/share/nginx/www; index index.html index.htm; ssl on; ssl_certificate /etc/nginx/ssl/example.org/server.crt; ssl_certificate_key /etc/nginx/ssl/example.org/server.key; ssl_stapling on; ssl_stapling_verify on; ssl_trusted_certificate /etc/ssl/private/ca-certs.pem; }
configtest
を実行して、すべてが正しいかどうかを確認します。
service nginx configtest
次に、nginx
サービスをリロードします。
service nginx reload
IE(Vista以降)またはFirefox 26以降でWebサイトにアクセスし、エラーログを確認します。
tail /var/log/nginx/error.log
ssl_trusted_certificate
で定義されたファイルに証明書がない場合、次のようなエラーが表示されます。
2014/05/09 17:38:16 [error] 1580#0: OCSP_basic_verify() failed (SSL: error:27069065:OCSP routines:OCSP_basic_verify:certificate verify error:Verify error:unable to get local issuer certificate) while requesting certificate status, responder: ocsp.startssl.com
そのようなエラーが表示されない場合は、次の手順に進みます。
OCSPステープリングのテスト
OCSPステープリングが機能しているかどうかをテストするための2つの方法について説明します。openssl
コマンドラインツールとQualysでのSSLテストです。
OpenSSLコマンド
このコマンドの出力には、WebサーバーがOCSPデータで応答したかどうかを示すセクションが表示されます。 この特定のセクションをgrep
して表示します。
echo QUIT | openssl s_client -connect www.digitalocean.com:443 -status 2> /dev/null | grep -A 17 'OCSP response:' | grep -B 17 'Next Update'
www.digitalocean.com
をドメイン名に置き換えます。 OCSPステープリングが正常に機能している場合は、次の出力が表示されます。
OCSP response: ====================================== OCSP Response Data: OCSP Response Status: successful (0x0) Response Type: Basic OCSP Response Version: 1 (0x0) Responder Id: 4C58CB25F0414F52F428C881439BA6A8A0E692E5 Produced At: May 9 08:45:00 2014 GMT Responses: Certificate ID: Hash Algorithm: sha1 Issuer Name Hash: B8A299F09D061DD5C1588F76CC89FF57092B94DD Issuer Key Hash: 4C58CB25F0414F52F428C881439BA6A8A0E692E5 Serial Number: 0161FF00CCBFF6C07D2D3BB4D8340A23 Cert Status: good This Update: May 9 08:45:00 2014 GMT Next Update: May 16 09:00:00 2014 GMT
OCSPステープリングが機能していない場合、出力は表示されません。
QualysオンラインSSLテスト
これをオンラインで確認するには、このWebサイトにアクセスして、ドメイン名を入力してください。 テストが完了したら、プロトコルの詳細セクションで確認します。
追加の読み物
- OCSPステープリングに関するMozillaの記事-http://en.wikipedia.org/wiki/OCSP_stapling
- OCSPステープリングに関するウィキペディアの記事-http://en.wikipedia.org/wiki/OCSP_stapling