最新消息:

nginx开启OCSP stapling

https admin 7601浏览 0评论

最近发现我的博客在opera里经常提示ocsp error。这个错误的原因是opera在验证ssl证书的时候出错,主要是验证的服务器的问题。

我用的alphassl的证书,验证ocsp的url是http://ocsp2.globalsign.com/gsalphag2,去http://uptime.netcraft.com/perf/reports/OCSP查看才知道这个地址验证ocsp有0.38%的失败率,表现简直是倒数了。而opera在ocsp验证出错后就会缓存24小时,所以就一直提示ocsp错误了。

ocsp-error

ocsp error

要解决的话最好的方法是ocsp stapling。也就是说先向ocsp验证服务器请求验证,把验证证书保存下来,然后当浏览器建立连接的时候就直接把证书发过去,就不需要再向ocsp服务器验证了。这样也能加快连接速度。

先把用的证书保存下来,因为是证书链,所以保存为level0,level1

  1. openssl s_client -showcerts -connect xjpvictor.info:443 < /dev/null | awk -v c=-1 ‘/—–BEGIN CERTIFICATE—–/{inc=1;c++} inc {print > (“level” c “.crt”)}/—END CERTIFICATE—–/{inc=0}’

然后还需要level2,因为level1是靠level2验证的,level2是根证书,是GlobalSign的,在/usr/share/ca-certificates/mozilla/中找到这个证书,复制出来,作为level2。

把level1和level2的证书放在一起

  1. cat level{1,2}.crt > CAbundle.crt

最后请求ocsp证书。需要用-header "HOST" "ocsp2.globalsign.com"不然会出错。

  1. openssl ocsp -issuer level1.crt -nonce -CAfile CAbundle.crt -url “http://ocsp2.globalsign.com/gsalphag2” -cert level0.crt -header “HOST” “ocsp2.globalsign.com” -text -respout ./xjpvictor.info.ocsp

获得的ocsp证书放在nginx的证书目录中去,修改nginx.conf,在需要用https的server中加上

  1. ssl_stapling on;
  2. ssl_stapling_file /etc/nginx/certs/xjpvictor.info.ocsp;
  3. ssl_stapling_verify on;

ocsp-stapling

ocsp stapling

用chrome的话是不会有这个问题的,因为chrome并没有ocsp验证功能,而是采用了google私有的一个验证方式,大概是google自己维护一个验证列表下发到chrome中,而google这么做的理由是ocsp is inefficient,很扯。

Update: 2014-01-23
用了一段时间以后发现nginx ocsp stapling只会读取默认server中的设置,所以如果是多域名的话,其他域名也是返回默认server中设置的证书,最后导致其他域名ocsp验证失败,浏览器甚至可能禁止打开这个网址了。所以其他域名下就必须设置成ssl_stapling off;了。而且默认server下如果不开启ssl_stapling,那其他server开启也没用。

另外,ocsp证书有效期很短,大概不到一个月,所以过段时间要更新ocsp证书,不然还是会验证失败。

转载请注明:爱开源 » nginx开启OCSP stapling

您必须 登录 才能发表评论!