最近发现我的博客在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 stapling。也就是说先向ocsp验证服务器请求验证,把验证证书保存下来,然后当浏览器建立连接的时候就直接把证书发过去,就不需要再向ocsp服务器验证了。这样也能加快连接速度。
先把用的证书保存下来,因为是证书链,所以保存为level0,level1
- 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的证书放在一起
- cat level{1,2}.crt > CAbundle.crt
最后请求ocsp证书。需要用-header "HOST" "ocsp2.globalsign.com"
不然会出错。
- 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中加上
- ssl_stapling on;
- ssl_stapling_file /etc/nginx/certs/xjpvictor.info.ocsp;
- ssl_stapling_verify on;
用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