ApacheおよびNginxでOCSPホチキスを構成する方法

前書き

OCSPステープルは、訪問者のプライバシーを維持しながらSSLネゴシエーションのパフォーマンスを向上させることを目的としたTLS / SSL拡張機能です。 構成を進める前に、証明書失効の仕組みについて簡単に説明します。 この記事ではhttps://www.digitalocean.com/community/articles/how-to-set-up-apache-with-a-free-signed-ssl-certificate-on-a-vps [無料証明書]が発行しましたデモするStartSSL。

このチュートリアルでは、以下に概説するApacheおよびNginxの基本構成を使用します。

OCSPについて

OCSP(オンライン証明書ステータスプロトコル)は、SSL証明書が失効しているかどうかを確認するためのプロトコルです。 SSLネゴシエーション時間を短縮するために、CRLの代替として作成されました。 CRL(証明書失効リスト)を使用すると、ブラウザーは失効した証明書シリアル番号のリストをダウンロードし、現在の証明書を検証します。これにより、SSLネゴシエーション時間が長くなります。 OCSPでは、ブラウザーはOCSP URLに要求を送信し、証明書の有効性ステータスを含む応答を受信します。 次のスクリーンショットは、digitalocean.comのOCSP URIを示しています。

image:https://assets.digitalocean.com/articles/OCSP_Stapling/1.png [OCSP URI]

OCSPステープルについて

OCSPには、2つの主要な問題があります。プライバシーとCAのサーバーへの負荷です。

OCSPでは、ブラウザがCAに連絡して証明書の有効性を確認する必要があるため、プライバシーが侵害されます。 CAは、どのWebサイトがアクセスされ、誰がアクセスしたかを知っています。

HTTPS Webサイトが多くの訪問者を獲得した場合、CAのOCSPサーバーは、訪問者によって行われたすべてのOCSP要求を処理する必要があります。

OCSPステープルが実装されると、証明書所有者(読み取りWebサーバー)はOCSPサーバー自体に照会し、応答をキャッシュします。 この応答は、* Certificate Status Request *拡張応答を介してTLS / SSLハンドシェイクで「ステープル」されます。 その結果、CAのサーバーにはリクエストが負担されず、ブラウザーはユーザーの閲覧習慣を第三者に開示する必要がなくなります。

OCSPホチキスのサポートを確認する

OCSPステープルは以下でサポートされています

  • Apache HTTPサーバー(> = 2.3.3)

  • Nginx(> = 1.3.7)

続行する前に、次のコマンドでインストールのバージョンを確認してください。

アパッチ:

apache2 -v

Nginx:

nginx -v

CentOS / Fedoraユーザーは、「+ apache2 」を「 httpd +」に置き換えます。

CAバンドルを取得する

ルートCAと中間CAの証明書をPEM形式で取得し、単一のファイルに保存します。 これは、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 」を使用してファイルに書き込むため、非ルートユーザーとしてログインしている場合は「 sudo tee +」を使用できます。

ApacheでのOCSPホチキスの構成

SSL仮想ホストファイルを編集し、これらの行を `+ <VirtualHost> </ VirtualHost> +`ディレクティブの*内側*に配置します。

sudo nano /etc/apache2/sites-enabled/example.com-ssl.conf
SSLCACertificateFile /etc/ssl/ca-certs.pem
SSLUseStapling on

キャッシュの場所は、「+ <VirtualHost> </ VirtualHost> + `」の外に指定する必要があります。

sudo nano /etc/apache2/sites-enabled/example.com-ssl.conf
SSLStaplingCache shmcb:/tmp/stapling_cache(128000)

this記事 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;

this記事 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テスト

これをオンラインで確認するには、https://www.ssllabs.com/ssltest/index.html [このWebサイト]にアクセスして、ドメイン名を入力します。 テストが完了したら、* Protocol Details *セクションで確認してください。

image:https://assets.digitalocean.com/articles/OCSP_Stapling/2.png [Qualys SSLレポート]

追加の読書

  • OCSPステープルに関するMozillaの記事-http://en.wikipedia.org/wiki/OCSP_stapling

  • OCSPステープルに関するウィキペディアの記事-http://en.wikipedia.org/wiki/OCSP_stapling

Related