首先看下环境: 1、操作系统为Linux Debuian6系统。 2、服务器基于lnmp 0.9环境安装滴。如果没安装lnmp,请来http://www.lnmp.org/install.html学习。 3、已经配置开启了ipv6环境。 如果木有配置ipv6环境,请参见《buyvm的 OpenVZ 256 VPS的lnmp安装环境nginx启用ipv6 》网址:http://www.xiejiwu.org/article.asp?id=113 网上讲解证书安装教程一般都是讲解ipv4下配置SSL,基本很少说ipv6下SSL的。 很多讲的很复杂,而且乱七八糟,各有说辞,下面我们来看如何最简单的配置SSL证书,并让他同时支持ipv4和ipv6访问。 一、免费SSL证书的申请,这里用的是startssl的免费证书。 免费SSL证书的申请请参见文章《免费StartSSL证书申请与IIS设置完全攻略》的前半部分,网址http://www.xiejiwu.org/article.asp?id=104 这里有详细的图文教程,直接在startssl网站上申请就OK,不需要在自己服务器上做任何步骤。 这里要提醒的是,一定要用IE浏览器申请,别的基本都无法保存E-mail的进入证书。 还一点很重要的,楼主测试IE 10也无法获取到startSSL的信箱证书,建议用IE 7/8/9 申请,都没有问题。 证书申请部分,请详细研究上面的文章,这里不再多赘述。 顺利的话,现在你获得了一个ssl.key文件和ssl.crt的证书,这个就是我们需要的啦。 当然,还有你申请时候填写的证书密码,这个也需要,记好一会用。 二、把证书安装到服务器,在nginx下配置ssl证书。 第一步:把key文件和crt证书上传到自己的服务器上。 可以用FTP软件或其他方式把你的证书传到服务器上。 如传在你的自己服务器 /home/wwwroot/certs/ 文件夹下,当然,这里只是举个例子。 这里要传的是刚才得到的ssl.key文件和ssl.crt证书(你也可以给他们改个名字,当然后面用到这个路径,也都要跟着改)。 我们暂且用默认的名字吧,你需要的话自己修改好了。 第二步:修改虚拟主机conf配置文件。 我的ssl证书是给一个虚拟主机使用的,所以首先要来给虚拟主机conf配置文件修改下。 通过 vi /usr/local/nginx/conf/vhost/域名.conf 打开配置文件。 找到配置文件的 server 部分,{ } 内包括配置的PHP等环境,全部拷贝出来。 把 里面的 80 端口改成443,然后加上3行如下的代码: 改变后的案例如下: 然后呢,把443端口的 这么一大段代码,粘贴到 80端口配置的文档下方。 实际上等于新建了个虚拟主机,只是路径和绑定的域名是一样的,换了个监听端口。 这里要注意,是粘贴到下方,不是替换以前的。 现在 /usr/local/nginx/conf/vhost/域名.conf 配置文件大约是这个样子滴。 好啦。这里就修改完了。 先按ESC退出,按 :wq! 保存配置并退出当前文档。 第三步 :修改nginx主配置文件 通过命令 vi /usr/local/nginx/conf/nginx.conf 打开nginx主配置文件。 找到 server 部分 { }括号内的文件,添加如下的一行,这个就是支持ipv6的SSL证书的啦,如果不添加,SSL证书也无法使用滴。 这里要注意,只需要添加这一行就OK。后面default ipv6only=on不要落下,否则也会出错。 效果如下: 一定要注意,不要自作聪明加上一行 listen 443; 如果写上 listen 443; 这行,会导致重启nginx的时候提示IP被占用而无法启动nginx。 如果不写 listen [::]:443 default ipv6only=on;这行,也会导致重启nginx的时候提示IP被占用而无法启动nginx。 按ESC退出,按 :wq! 保存配置并退出当前文档。 好啦,现在测试nginx.conf配置文件是否正确,如果不正确,检查配置。 执行以下命令,查看Nginx配置是否正确 若返回以下结果则正确 第四步:合并证书。 这里颁发给你的 ssl.crt 只是你自己网站的证书,而不包含startssl的根证书和class1证书。 在某些浏览器下没有根证书会提示证书有问题,所以startssl也会提醒你安装根证书。 方法一:用记事本手动合并。 最简单的方法,把class1和根证书下载下来,粘贴到你的证书里。 具体步骤如下: 打开网址 http://cert.startssl.com/certs/sub.class1.server.ca.pem 下载class1证书。 打开网址 http://cert.startssl.com/certs/ca.pem 下载根证书。 用记事本打开 你自己的 ssl.crt文件,然后用记事本打开 下载的 sub.class1.server.ca.pem 和 ca.pem 文件。 把sub.class1.server.ca.pem 和 ca.pem 依次粘贴到你的 ssl.crt文件里,然后保存即可。 这里要注意的是,每个文件的开头和结束有 -----END CERTIFICATE----------BEGIN CERTIFICATE----- 代码。 这个代码一定不要在一行里。 如果在一行,测试配置文件会出现错误,错误如下。 nf test failed 所以我们在粘贴证书文件的时候,最好回车,哪怕多一行也没关系,这样不会出错,也比较好看。 粘贴后样式应该是: 最后,把记事本最后一行多回车一下,最好多回车一行。 把合并过的证书上传,替换掉你服务器里的ssl.crt文件。 方法二:用命令在服务器上合并. 首先 用命令 cd /home/wwwroot/certs/ 切换到你证书的文件夹。 然后依次执行一下命令 这样就合并证书了,但是合并的证书会出现上面的错误,所以还要下载下来。 把 -----END CERTIFICATE----------BEGIN CERTIFICATE----- 分成2行。 变成: 然后保存,上传证书,替换掉你服务器里的ssl.crt文件。 第五步:去除key里的加密密码。 这时候如果你重启Nginx让配置生效,可以使用如下命令。 输入以下命令: 会出现要求你输入密码的 Enter PEM pass phrase 如果你配置文件也正确,输入密码后才能启动Nginx,这是很麻烦的。 而且服务器重新启动也不会自动启动nginx,必须手动启动,还要输入2次密码。 所以我们必须要取消key里的密钥. 好啦,我们现在可以取消密码。 命令如下,首先切换到保存key的文件夹,如果你在别的文件夹,请更换成你自己的。 这样,就剥离了密码文件,利用OpenSSL命令生成了一个没有私钥server.key.unsecure文件。 然后我们要更改 虚拟主机里的配置文件。 用命令 vi /usr/local/nginx/conf/vhost/域名.conf 打开虚拟主机的配置文件。 找到 ssl_certificate_key /home/wwwroot/certs/ssl.key; 替换成 ssl_certificate_key /home/wwwroot/certs/ssl.key.unsecure; 然后保存。 效果如下: 是不是发现不再提示了,整个世界清净了吧:-) 这里要注意的是,有时候检测配置文件的时候, 会提示 ssl.key 或 ssl.key.unsecure 有错误。 只要用记事本打开 ssl.key 或 ssl.key.unsecure ,在最后一行回车,留一行空白就OK。 最后,当然是重启Nginx让配置生效,可以使用如下命令。 输入以下命令: 当然,你也可以重新启动服务器哦。 ++++++++++++++++++++++++++++++++++++++++ 如何测试,服务器到底走的是IPV4还是ipv6?????? PHP脚本代码如下,保存为ip.php上传到你服务器上,通过访问改地址既可以测试。 通过访问即可看见,你当前的访问IP,即可知道由ipv4还是ipv6访问的。 这里前提是你的域名支持ipv6解析并成功解析到服务器的ipv6上了哦。 感谢ipv6home.cn的ipv6之家站长提供代码。 +++++++++++++++++ 分割线 ++++++++++++++++ 有问题的请看: 问题一: Linux 提示 nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use) 今天在重启nginx时候发现这个错误,原因是nginx自己占用了80端口 killall -9 nginx 杀掉nginx 进程 然后重启就行了。 service nginx restart check running pidfuser -n tcp 8080/tcp: 26621 26622 Kill# kill -9 2118# kill -9 2119restart nginx/root/lnmp restart netstat -an|grep LISTEN 命令可以查看当前开启了那些端口。 问题二: Nginx配置SSL安全证书避免启动输入Enter PEM pass phrase 配置好的Nginx每次启动都要输两遍PEM pass phrase,很是不爽,尤其是在服务器重启后,Nginx压根就无法自动启动,必须手动启动并输入那麻烦的PEM pass phrase。如何避免Nginx启动出现Enter PEM pass phrase呢? 切换到key文件目录后 openssl rsa -in ssl.key -out ssl.key.unsecure 然后更改 /usr/local/nginx/conf/vhost/域名.conf 配置文件。 修改ssl_certificate_key /etc/nginx/certs/server.key;到没有密钥的文件。 代码为 ssl_certificate_key /etc/nginx/certs/ssl.key.unsecure; 然后重启启动Nginx 问题三: startssl的发邮件给你,提示:It seems, that the installation of your server certificate with serial number 1*** for www.***** is not complete! 根证书没有合并,请参照以上教程合并证书。 问题四: 服务器只支持ipv4访问,不支持ipv6访问证书。 1.请配置更改 /usr/local/nginx/conf/vhost/域名.conf 配置文件。 加上代码: 2.并配置 /usr/local/nginx/conf/nginx.conf 的nginx主配置文件。 加上 listen [::]:443 default ipv6only=on; 语句。 问题五: 提示key文件错误。 在key文件最后一行加上一个空白行即可。 问题六: 提示 nginx: [emerg] bind() to [2605:6400:2:xxx:xx:xxx:xx:xxx]:443 failed (98: Address already in use) .............. nginx: [emerg] still could not bind() 这是ipv6下443的ssl有问题。请配置好nginx主文件nginx.conf和虚拟主机vhost/域名.conf文件。 需要在 /usr/local/nginx/conf/nginx.conf 添加 listen [::]:443 default ipv6only=on; 这里不能添加 listen 443; 如果添加了listen 443; 在虚拟主机中,ipv4下SSL网站将无法访问。并且服务器测试会出现以上提示。 vhost 虚拟主机 要写监听每一个详细IPV6地址。 如果不加以上代码 则会提示报错。导致无法启动nginx。 笔记版权归三掌柜所有,转载请链接 http://www.xiejiwu.org/article.asp?id=117 (责任编辑:IT) |