fangpsh's blog

再次遇到OCSP引发的卡顿超时问题

好几年前在iOS 上遇到过,最近又遇到了。之前BigSur 更新,好像也有过一次OCSP 超时的问题,参考 OCSP,伴随苹果隐私收集与泄漏的小小争议 。 这一次遇到是在QWebengineView 下加载超时, 由于Godaddy OCSP 使用的akamai cdn,由于众所周知的原因,在大陆访问异常概率非常高:

dig ocsp.godaddy.com

; <<>> DiG 9.10.6 <<>> ocsp.godaddy.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 33808
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 8, ADDITIONAL: 14

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;ocsp.godaddy.com.              IN      A

;; ANSWER SECTION:
ocsp.godaddy.com.       600     IN      A       31.13.95.17

;; AUTHORITY SECTION:
godaddy.com.            2884    IN      NS      cns2.godaddy.com.
godaddy.com.            2884    IN      NS      a11-64.akam.net.
godaddy.com.            2884    IN      NS      a6-66.akam.net.
godaddy.com.            2884    IN      NS      a9-67.akam.net.
godaddy.com.            2884    IN      NS      a1-245.akam.net.
godaddy.com.            2884    IN      NS      cns1.godaddy.com.
godaddy.com.            2884    IN      NS      a20-65.akam.net.
godaddy.com.            2884    IN      NS      a8-67.akam.net.

解决办法是要么换一个大陆的CA,要么开OCSP Stapling。开OCSP Stapling 的话,可以自己在Nginx 上折腾,或者打开CDN 的OCSP Stapling 开关。

在Nginx 上折腾的话,由于Nginx 在大陆,Nginx 所在机器访问ocsp.godaddy.com 也受干扰,2个解决办法,一个是使用网友制作的ocsp-proxy一个是周期性从外部获取ocsp 信息,使用ngx_ssl_stapling_file 指定。

无论是哪种办法,都得搞一个代理。

如果要使用后者,需要将证书处理一下: 将域名证书、中间证书、根证书按照从上到下的顺序保存为fullchains.pem ,中间证书单独保存为intermediate.pem,子证书保存为 site.pem,使用openssl ocsp,命令前可能需要使用proxychains之类走下代理:

openssl ocsp -no_nonce -text \
-issuer intermediate.pem \  # 中间证书
-cert site.pem \            # 域名证书
-CAfile fullchains.pem \    # 完整证书链
-url http://ocsp.godaddy.com \
-header "HOST" "ocsp.godaddy.com" \
-respout ocsp.resp

从哪里取中间证书和根证书?大多数时候从CA 处下载的时候,会带一个CA Bundle文件,里面包含根证书和中间证书,拆分一下。或者可以直接从CA官网,或者用网上的证书链修复工具来获取。

检查是否成功开启,外网的话也可以直接使用myssl.com 、ssllabs.com 检测:

>openssl s_client -connect 目标地址:443 -servername  目标域名  -status -tlsextdebug < /dev/null 2>&1 |grep OCSP -B 3 -A 10

参考资料: