Let's Encryptが落ちていてOCSPリクエストがエラーになる
Service status: Service Disruption
https://letsencrypt.status.io/
アクセスのあるサイトはキャッシュが生きているのだが、運悪く証明書を更新したばかりのサイトがあった。これは困る。
Firefox の security.ssl.enable_ocsp_stapling = true
(デフォルト) クライアント環境で SEC_ERROR_OCSP_TRY_SERVER_LATER が表示されたりする。Apache では SSLStaplingReturnResponderErrors on
(デフォルト)か SSLStaplingFakeTryLater on
(デフォルト)をoff
にすれば回避できる。とりあえず SSLStaplingFakeTryLater
が問題発見の邪魔になるので切る。
また SSLStaplingResponderTimeout 10
(デフォルト)を短くするとトラブル時にクライアントの初回アクセス時間を短縮できる。といってもクライアント側でも検証できない以上keep-aliveでTLS接続が生きている間だけのような雰囲気だし、短くしすぎると正常なレスポンスも受け取れなくなる懸念がある。
今回はOCSPサーバが動いていないことが分かってるので一時的に SSLUseStapling
を切っても何ら問題はない。
診断
$ openssl s_client -connect DOMAIN:443 -status -servername DOMAIN < /dev/null | less ... DONE CONNECTED(00000003) OCSP response: no response sent ...
OCSPが返らない。
OpenSSL: Manually verify a certificate against an OCSPを参考に細かくテストする。詳しくはman ocsp
。
$ openssl x509 -noout -ocsp_uri -in cert.pem http://ocsp.int-x3.letsencrypt.org/ $ openssl ocsp -issuer chain.pem -cert cert.pem -text -url http://ocsp.int-x3.letsencrypt.org/ -header HOST ocsp.int-x3.letsencrypt.org -resp_text ... Error querying OCSP responsder 140014513862560:error:27076072:OCSP routines:PARSE_HTTP_LINE1:server response error:ocsp_ht.c:250:Code=400,Reason=Bad Request
400になってしまった。Hostヘッダを手動で送る。
$ openssl ocsp -issuer chain.pem -cert cert.pem -text -url http://ocsp.int-x3.letsencrypt.org/ -header Host ocsp.int-x3.letsencrypt.org ... Error querying OCSP responsder 140045098887072:error:27076072:OCSP routines:PARSE_HTTP_LINE1:server response error:ocsp_ht.c:250:Code=504,Reason=Gateway Time-out
しばらく待たされてからサーバ側でタイムアウトする。
Apache では SSLStaplingErrorCacheTimeout 600
(デフォルト)があるが、OCSPのレベルのエラーをキャッシュするだけなのか、このHTTPエラーはキャッシュしないようだ。