nginx服务器ssl加密传输配置 (转)

上次我们收到了Comodo发过来的认证证书,接着介绍怎么在nginx服务器下进行配置。首先进入到nginx的conf目录中,找到你需要修改的conf文件,在里面加入ssl服务配置项。内容为:

server  {    listen       443; # ssl默认是监听443端口

    server_name  www.yourdomain.com yourdomain.com;

    index index.html index.htm index.php;

    root  /你的网站根目录;

    # SSL

    ssl on;

    ssl_certificate  /usr/local/webserver/nginx/ssl/certs/yourserver.crt;

    ssl_certificate_key  /usr/local/webserver/nginx/ssl/certs/yourserver.key;

 

    ssl_session_timeout  5m;

#        ssl_protocols  SSLv2 SSLv3 TLSv1;
    ssl_protocols  SSLv3 TLSv1;
    ssl_ciphers  ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
    ssl_prefer_server_ciphers   on;

     #… 省略后面的相关配置,和你的80端口配置一致 

}

上面可以看到首先我们启用443端口来提供https服务,后面#SSL段则配置了服务器启用ssl on,ssl_certificate我们指定了使用的证书文件myserver.crt,ssl_certificate_key则配置了这个证书所对应的私钥。你需要做的就是将上面生成csr文件时对应的私钥和你收到的证书文件复制到指定的位置即可,具体位置你可以自行指定。

接下来启动nginx,试着用浏览器访问一下你的https主页,你会发现你的主页不能显示,浏览器会出现一个安全警告,原因是这里我们漏掉了一步,没有将Comodo发给我们的根认证证书附加到我们的证书的后面。具体做法是从comodo发给我们的附件里面找到PositiveSSLCA.crt,把它添加到我们自己证书的后面,

cat PositiveSSLCA.crt >> yourserver.crt

这样再次重启nginx,浏览器就显示正常了。 解释一下问什么我们要把PositiveSSLCA.crt附加到我们证书的后面才有效,原因是证书是以链的形式颁发的,具有根证书颁发权利的机构很少,他们颁发的证书已经被各大厂商所认可,你的浏览器里面默认就已经安装了一些根证书,由这些根证书颁发机构来认证多个中间商,中间商会提供认证服务给不同厂商和个人。而我们得到的证书就是位于一个证书链的最末端,我们的证书浏览器是不能识别的,需要链证书来对我们证书签名才行,当然链证书还需要根证书的认证才能有效。在nginx的配置中,只需要把链证书附加到我们证书的后面就行。最终我们的证书看起来像这个样子:

最后有的朋友可能在生成csr和私钥的时候输入了密码,结果nginx每次启动的时候,都会要求你输入密码才能够启动,这样机器重启等需要nginx自启动的时候就有问题。不过不用担心我们可以使用命令来重新生成一个不需要密码的私钥,替换你原来的那个就可以了。具体做法为:

openssl rsa -in myserver.key -out myserver.key.nopasswd

用不带密码的那个key替换下,重启nginx,不会再要密码了。