这段时间,在我的firefox3.5上访问passport的https页面
直接就出错了,如下:

passport.sohu.com 使用了无效的安全证书。 该证书因为其发行者证书未知而不被信任。 (错误码: sec_error_unknown_issuer


开始以为是我的Firefox的某个地方配置有问题,因为在IE里是正常的
直到另外一个同事的Firefox也出这个错时,我意识到可能是证书的配置问题

以前,前端server上跑的是Apache2,现在全部更换成了Nginx
查看了一下Nginx的配置后,发现Nginx没有配置ssl的中间证书
查看了Nginx的文档后,开始以为是配置ssl_client_certificate这个参数
后来在老大的点化下,发现了Nginx应该这样配置:

if you have a chain certificate file (sometimes called an intermediate certificate) you don't specify it separately like you do in Apache. Instead you need to add the information from the chain cert to the end of your main certificate file. This can be done by typing "cat chain.crt >> mysite.com.crt" on the command line. Once that is done you won't use the chain cert file for anything else, you just point Nginx to the main certificate file.


就是说,Nginx中是把那个intermediate.crt文件给合并到自己的server.crt证书后面即可

而在Apache2中,是在httpd-ssl.conf中增加一行,可参见“Apache和Nginx的SSL证书的生成及配置

SSLCACertificateFile "/usr/local/apache2/conf/intermediate.crt"



而且,还发现了一问题,intermediate.crt文件是跟随着证书的crt文件,每年更换一次的
如果只更换了server.crt,而没有更换intermediate.crt文件,在Firefox下还是会出错的
因此,每年更换证书,需要同时更新server.crt和intermediate.crt
对于VeriSign,可在
http://www.verisign.com/support/verisign-intermediate-ca/secure-site-intermediate/index.html
下载到中间证书的

所以,如果申请的是全球服务器的证书,那么一定需要安装这个中间证书(IE下似乎不用安装,也不会报错...),以构成一个证书链

An intermediate certificate is the certificate, or certificates, that go between your site (server) certificate and a root certificate.The intermediate certificate, or certificates, completes the chain to a root certificate trusted by the browser.