ApacheでOCSP Staplingを有効にしてみた

目次

Apache では設定を二行加えるだけで OCSP Stapling を有効にできた。

HTTPS によるアクセスでは、通信を暗号化するためにサイトの証明書が必要です。

この証明書には有効期間が有りますが、有効期間内であっても証明書が失効している可能性が有ります。そのため証明書が失効していないか確認する必要が有ります。

証明書が有効か確認するには、CRL と OCSP という二種類が有ります(注1)。この二種類の方法の内、現在はレスポンスのが速いという利点(注2)から主に OCSP が使用されています。

ただし OCSP にも次のような問題点が有ります(注3)。

  • OCSP 応答が得られない場合にサーバ証明書の失効検証を正しく行わないまま SSL 通信を許可してしまう可能性がある。
  • OCSP を使った場合には、あるサイトにアクセスがあったことを OCSP レスポンダも知り得てしまう。

そこでこの問題を回避するために、RFC6066 ではコンテンツを配信するサーバが OCSP レスポンダを兼ねる(キャッシュする)ことができる方法が提案されています(注4)。これにより OCSP レスポンダに関するどちらの問題点も解消できます。

なおこの RFC6066 の証明書状態リクエスト(TLS Certificate Status Request)は、OCSP stapling と一般に呼ばれています(注5)。

OCSP stapling を有効にする Apache の設定

OCSP stapling の説明が長くなりましたが、Apache で OCSP stapling を有効にする設定はいたって簡単です(注6)。

Ubuntu の apache パッケージで Apache をインストールしたならば、SSL のグローバル設定である/etc/apache2/mods-enabled/ssl.confに次の二行を追加します。

SSLUseStapling		On
SSLStaplingCache        shmcb:${APACHE_RUN_DIR}/ssl_stapling(32768)

設定はこれだけです。

設定を変更したら apache を再起動します。

$ sudo apachectl configtest
Syntax OK

$ sudo service apache2 restart

OCSP stapling が有効か確認

OCSP stapling が有効になっているかは、opensslコマンドを使用して確認します。

OCSP stapling が有効になっている場合は、次のようにOCSP Response Dataを含む結果が得られます。

$ openssl s_client -connect www.example.jp:443 -status -servername www.example.jp < /dev/null | head
depth=1 C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X1
verify error:num=20:unable to get local issuer certificate
verify return:0
CONNECTED(00000003)
OCSP response:
======================================
OCSP Response Data:
    OCSP Response Status: successful (0x0)
    Response Type: Basic OCSP Response
    Version: 1 (0x0)
    Responder Id: C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X1
    Produced At: Dec 23 14:51:00 2015 GMT
    Responses:
DONE

もし次のようにOCSP response: no response sentとなった場合は、OCSP stapling が有効になっていません。

$ openssl s_client -connect www.example.jp:443 -status -servername www.example.jp < /dev/null | head
depth=1 C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X1
verify error:num=20:unable to get local issuer certificate
verify return:0
DONE
CONNECTED(00000003)
OCSP response: no response sent
---
Certificate chain
 0 s:/CN=www.nosuz.jp
   i:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X1
 1 s:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X1
   i:/O=Digital Signature Trust Co./CN=DST Root CA X3
---
Server certificate

参照と脚注

  1. PKI基礎講座(5):証明書の有効性 – @IT
  2. Online Certificate Status Protocol: CRLとの比較 – ウィキペディア
  3. SSL/TLS暗号設定ガイドライン~安全なウェブサイトのために(暗号設定対策編)~ – IPA
  4. TLS 拡張:拡張定義: 証明書状態リクエスト – RFC6066
  5. OCSP stapling – wikipedia
  6. OCSP Stapling – SSL/TLS Strong Encryption: How-To