OCSP(OnlineCertificateStatusProtocol,在线证书状态协议)是用来检验证书合法性的在线查询服务,一般由证书所属CA提供。
在实际应用中,某些客户端会在TLS握手阶段进一步协商时,实时查询OCSP接口,并在获得结果前阻塞后续流程。OCSP查询本质是一次完整的HTTP请求—响应,这中间DNS查询、建立TCP、服务端处理等环节都可能耗费很长时间,导致最终建立TLS连接时间变得更长。
而OCSPStapling,是指服务端主动获取OCSP查询结果并随着证书一起发送给客户端,从而让客户端跳过自己去验证的过程,提高TLS握手效率。
那么,在我们常用的Nginx模式下,如何实现OCSPStaplin呢?
一、要求
Nginxversion1.3.7以上
二、自动OCSPStapling
1、在Nginx.conf添加如下到您的https配置下
ssl_staplingon;
ssl_stapling_verifyon;
resolver8.8.8.88.8.4.4valid=300s;
resolver_timeout5s;
ssl_trusted_certificateca.pem;
其中ca.pem为证书链中两张中级CA证书
2、验证OCSPStapling状态
openssls_client-connectlocalhost:443-tlsextdebug–status
已开启
OCSPresponse:
OCSPResponseData:
OCSPResponseStatus:successful(0x0)ResponseType:BasicOCSPResponse
……
未开启
OCSPresponse:noresponsesent
三、手动OCSPStapling
1、获取OCSP地址
opensslx509-inserver.pem-noout-ocsp_uri
或
2、生成stapling.ocsp
opensslocsp-CAfile root.pem-issuer ca.pem-cert server.pem-urlhttp://ss.symcd.com-text-respout./stapling.ocsp
其中root.pem为两张中级CA证书和顶级根证书,ca.pem为两张中级CA证书,server.pem为服务器证书,顶级根证书请联系技术人员获取(下载连接:xx)。
注:stapling.ocsp需每次在update到期之前更新
3、在Nginx.conf添加如下内容到您的https配置下
ssl_staplingon;
ssl_stapling_verifyon;
resolver8.8.8.88.8.4.4valid=300s;
resolver_timeout5s;
ssl_trusted_certificateca.crt;
ssl_stapling_filestapling.ocsp;
其中ca.pem中为两张中级CA证书。
4、验证OCSPStapling状态
openssls_client-connectlocalhost:443-tlsextdebug–status
已开启
OCSPresponse:
OCSPResponseData:
OCSPResponseStatus:successful(0x0)ResponseType:BasicOCSPResponse
……
未开启
OCSPresponse:noresponsesent
四、启用OCSPStapling的条件
在Nginx中配置ssl_staplingon并reload后,Nginx并不会马上获取OCSPResponse,它要等第一个请求过来,再发起异步OCSP请求,所以刚开始几个响应,很可能不带OCSPStapling。另外,有时候由于OCSP域名无法解析,或者服务器无法访问造成OCSPResponse获取失败,也会导致OCSPStapling无法生效。