2026年8月22日
2026年8月22日
OCSP Staplingの設定方法(Apache・Nginx)|WordPressサイトで要るかの確認から
OCSP Stapling(OCSPステープリング)は、証明書が失効していないことを示す応答を、Webサーバーが認証局(CA)から取ってきてTLSの接続時に添えて渡す仕組みです。WordPress本体やプラグインには、この設定はありません。Webサーバー(ApacheやNginx)の設定で有効にします。
そのため、設定できるのはVPSや専用サーバーなど、Webサーバーの設定ファイルを自分で編集できる環境です。共用のレンタルサーバーでは、TLSの設定はサーバー会社が管理しており、利用者は変更できません。
また、2026年10月時点では、Let's Encryptの証明書ではOCSP Staplingは働きません。設定の前に、自分の証明書が対象になるかを確かめてください。
OCSP Staplingの仕組み
証明書は、有効期限の前でも秘密鍵の漏えいなどで失効することがあります。ブラウザーが失効を確かめる方法の一つがOCSP(Online Certificate Status Protocol)で、証明書に書かれたOCSPレスポンダーのURLへ問い合わせます。
ブラウザーが自分で問い合わせると、表示が遅くなるうえ、CAに「誰がどのサイトを見たか」が伝わります。OCSP Staplingでは、Webサーバーが定期的にCAからOCSP応答を取得してキャッシュし、TLSのハンドシェイクの中でブラウザーに渡します。応答にはCAの署名があるため、サーバーが内容を書き換えることはできません。
Let’s Encryptの証明書では働かない
Let's Encryptは2025年にOCSPの提供を終えました。2025年5月から発行する証明書にOCSPのURLを入れなくなり、2025年8月にOCSPレスポンダーを停止しています。証明書の有効期間は90日なので、いま使われている同社の証明書には、どれもOCSPのURLがありません。
業界全体でも、失効の確認はOCSPからCRL(証明書失効リスト)へ移っています。CA/ブラウザフォーラムの基準でOCSPの提供はCAの任意になりました。
Let's Encryptの証明書を使っている場合、OCSP Staplingの設定は要りません。設定が残っていても、Webサーバーはステープリングを行わず、ログに警告を出すだけです。商用CAの証明書(OV・EV証明書など)でOCSPのURLがあるものは、設定する意味があります。
詳しい経緯とNginxの設定は、OCSPステープリングの設定と確認方法(Nginx)でも説明しています。
手順1: 証明書にOCSPのURLがあるか確かめる
サーバー上の証明書ファイルを調べる場合と、公開中のサイトから証明書を取ってきて調べる場合の2通りがあります。パスとドメインは自分のものに置き換えてください。
# サーバー上の証明書ファイルを調べる
openssl x509 -in /etc/ssl/example.com/cert.pem -noout -ocsp_uri
# 公開中のサイトの証明書を調べる
openssl s_client -connect example.com:443 -servername example.com </dev/null 2>/dev/null \
| openssl x509 -noout -ocsp_uri
http://ocsp. で始まるようなURLが表示されれば、その証明書はOCSPに対応しています。何も表示されなければOCSPのURLはなく、ステープリングは働きません。この場合は以降の手順は不要です。
手順2: Apacheで設定する(Ubuntu・Debian)
Ubuntu・Debianのパッケージ版Apache 2.4を例にします。mod_ssl が有効で、HTTPSのサイトがすでに動いていることが前提です。
キャッシュの場所を決める
OCSP Staplingには、OCSP応答を置くキャッシュ(SSLStaplingCache)が必須です。このディレクティブは <VirtualHost> の中には書けないので、サーバー全体の設定として別ファイルに書きます。
/etc/apache2/conf-available/ocsp-stapling.conf を作り、次の1行を書きます。
SSLStaplingCache "shmcb:${APACHE_RUN_DIR}/ssl_stapling(32768)"
shmcb は共有メモリーを使うキャッシュで、socache_shmcb モジュールが必要です。Ubuntu・Debianでは a2enmod ssl を実行したときに一緒に有効になります。${APACHE_RUN_DIR} は /etc/apache2/envvars で定義されている実行時ディレクトリー(通常は /var/run/apache2)です。
sudo a2enmod ssl
sudo a2enconf ocsp-stapling
サイトの設定でステープリングを有効にする
HTTPSのサイトの設定ファイル(例: /etc/apache2/sites-available/example.com-ssl.conf)の <VirtualHost *:443> の中に追加します。
<VirtualHost *:443>
ServerName example.com
DocumentRoot /var/www/wordpress
SSLEngine on
# サーバー証明書の後ろに中間証明書を続けたファイル
SSLCertificateFile /etc/ssl/example.com/fullchain.pem
SSLCertificateKeyFile /etc/ssl/example.com/privkey.pem
# OCSP Stapling
SSLUseStapling on
SSLStaplingResponderTimeout 5
SSLStaplingReturnResponderErrors off
</VirtualHost>
| ディレクティブ | 意味 |
|---|---|
SSLUseStapling on |
OCSP Staplingを有効にする(既定は off) |
SSLStaplingResponderTimeout 5 |
OCSPレスポンダーへの問い合わせを待つ秒数(既定は10秒) |
SSLStaplingReturnResponderErrors off |
「good」か「revoked」の応答だけをブラウザーに渡し、取得に失敗した応答などは渡さない(既定は on) |
キャッシュの有効期間は、正常な応答が SSLStaplingStandardCacheTimeout(既定3600秒)、取得に失敗した応答が SSLStaplingErrorCacheTimeout(既定600秒)です。通常は既定のままで構いません。
Apacheは、OCSPの問い合わせに証明書の発行元(中間証明書)を使います。SSLCertificateFile に中間証明書を含めていないと、ステープリングに失敗します。サーバー証明書、中間証明書の順につなげたファイル(fullchain.pem など)を指定してください。
構文を確かめて読み込み直す
sudo apachectl configtest
sudo systemctl reload apache2
Syntax OK と表示されてから読み込み直します。証明書にOCSPのURLがない場合は、エラーログ(/var/log/apache2/error.log)に、証明書にOCSPのURIがないという趣旨のメッセージが出て、ステープリングは行われません。
手順3: Nginxで設定する
Nginxでは、HTTPSの server ブロックに次の設定を加えます。
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/ssl/example.com/fullchain.pem; # サーバー証明書+中間証明書
ssl_certificate_key /etc/ssl/example.com/privkey.pem;
# OCSP Stapling
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/ssl/example.com/chain.pem; # 中間証明書(+ルート証明書)
# OCSPレスポンダーのホスト名を引くためのDNS
resolver 1.1.1.1 8.8.8.8 valid=300s;
resolver_timeout 5s;
root /var/www/wordpress;
# ...(以下、既存の設定)
}
ssl_stapling_verify onは、CAから受け取ったOCSP応答の署名をNginxが検証する設定です。検証にはssl_trusted_certificateの証明書を使います。- NginxはOCSPレスポンダーのホスト名を実行時に名前解決するので、
resolverの指定が要ります。指定が無いと、エラーログに「no resolver defined to resolve」と出てステープリングに失敗します。
sudo nginx -t
sudo systemctl reload nginx
nginx -t で「"ssl_stapling" ignored, no OCSP responder URL in the certificate」と出た場合は、証明書にOCSPのURLがありません。手順1の結果を見直してください。
手順4: 効いているか確かめる
openssl s_client に -status を付けて接続すると、サーバーがOCSP応答を添えているかが分かります。
openssl s_client -connect example.com:443 -servername example.com -status </dev/null 2>/dev/null \
| sed -n '/OCSP response:/,/^---/p'
効いている場合は、次のように表示されます。
OCSP response:
======================================
OCSP Response Data:
OCSP Response Status: successful (0x0)
Response Type: Basic OCSP Response
...
Cert Status: good
OCSP Response Status: successful と Cert Status: good があれば正常です。OCSP response: no response sent と出た場合は、応答が添えられていません。
再起動や読み込み直しの直後は、サーバーがまだOCSP応答を取得していないため、最初の数回は no response sent になることがあります(特にNginxは、最初の接続をきっかけに取得します)。数秒おいて2〜3回試してから判断してください。
curl -I ではOCSP応答の有無は分かりません。確認には openssl s_client -status を使います。
うまくいかないとき
| 症状 | 確かめること |
|---|---|
no response sent が続く |
手順1で証明書にOCSPのURLがあるか。Let's Encryptの証明書ではないか |
Apacheが起動しない、configtest でエラー |
SSLStaplingCache を <VirtualHost> の中に書いていないか。socache_shmcb が有効か(apachectl -M で確認) |
| Nginxのログに「no resolver defined」 | resolver を書いたか |
| Apacheのログに「ssl_stapling_init_cert: can't retrieve issuer certificate!」 | SSLCertificateFile に中間証明書が含まれていない。fullchain.pem を指定する |
| ログに検証の失敗が出る | 中間証明書が正しいか。証明書を更新して発行元が変わったのに、fullchain.pem や ssl_trusted_certificate を更新していないことが多い |
| 応答の取得がタイムアウトする | サーバーから外向きのHTTP(80番)通信を止めていないか。OCSPは通常HTTPで問い合わせる |
OCSPレスポンダーが応答しているかは、サーバーから直接問い合わせて確かめられます。
openssl ocsp -issuer /etc/ssl/example.com/chain.pem \
-cert /etc/ssl/example.com/cert.pem \
-url "$(openssl x509 -in /etc/ssl/example.com/cert.pem -noout -ocsp_uri)" \
-resp_text -noverify | grep -E "Response Status|Cert Status"
ここで Cert Status: good が返るのにステープリングされない場合は、Webサーバー側の設定に原因があります。
WordPress側で必要なこと
OCSP StaplingはTLSの接続の段階で働くため、WordPressの設定やプラグインを変える必要はありません。サイトをHTTPSで表示する設定(「設定」→「一般」のURL、HTTPからHTTPSへのリダイレクト、混在コンテンツの解消)がまだであれば、WordPressをSSL(HTTPS)化する方法を先に済ませてください。
証明書の取得やApacheのHTTPS設定そのものは、ApacheでSSL/TLS(HTTPS)を有効にする手順で説明しています。
まとめ
- OCSP StaplingはWebサーバーの設定で、WordPressの設定ではありません。共用レンタルサーバーでは利用者が変更できません。
- Let's Encryptの証明書にはOCSPのURLがなく、ステープリングは働きません(2026年10月時点)。まず
openssl x509 -noout -ocsp_uriで確かめます。 - Apacheでは
SSLStaplingCacheをサーバー全体の設定に、SSLUseStapling onを<VirtualHost>に書き、SSLCertificateFileに中間証明書を含めます。 - Nginxでは
ssl_stapling・ssl_stapling_verify・ssl_trusted_certificate・resolverをそろえます。 - 確認は
openssl s_client -statusで行い、読み込み直しの直後は数回試します。