秀米云香港服务器

让nginx的SSL证书服务支持ipv6访问

首先看下环境:1、操作系统为Linux Debian6系统。2、服务器基于lnmp环境安装滴。3、已经配置开启了ipv6环境。 如果木有配置ipv6环境,请参见《buyvm的 OpenVZ 256VPS的lnmp安装环境nginx启用ipv6》网址:http://www.server110.com/nginx/201407/10797.html

序列号 CPU RAM HDD 带宽 售价(美元) 免费试用
香港服务器1 E5-2620 32G 1T HDD 50M/无限流量 $196.00 立即申请
香港服务器2 E5-2650 32G 1T HDD 50M/无限流量 $256.00 立即申请
香港服务器3 E5-2680 32G 1T HDD 50M/无限流量 $316.00 立即申请
香港服务器4 E5-2690 32G 1T HDD 50M/无限流量 $336.00 立即申请
香港服务器5 E5-2697 32G 1T HDD 50M/无限流量 $376.00 立即申请
香港服务器6 E5-2620*2 32G 1T HDD 50M/无限流量 $376.00 立即申请
香港服务器7 E5-2650*2 32G 1T HDD 50M/无限流量 $436.00 立即申请
香港服务器8 E5-2680*2 32G 1T HDD 50M/无限流量 $476.00 立即申请
香港服务器9 E5-2690*2 32G 1T HDD 50M/无限流量 $556.00 立即申请
香港服务器10 E5-2697*2 32G 1T HDD 50M/无限流量 $596.00 立即申请
香港服务器11 E5-2680v4*2 32G 1T HDD 50M/无限流量 $696.00 立即申请
香港服务器12 E5-2698v4*2 32G 1T HDD 50M/无限流量 $796.00 立即申请

网上讲解证书安装教程一般都是讲解ipv4下配置SSL,基本很少说ipv6下SSL的。很多讲的很复杂,而且乱七八糟,各有说辞,下面我们来看如何最简单的配置SSL证书,并让他同时支持ipv4和ipv6访问。

一、免费SSL证书的申请,这里用的是startssl的免费证书。

免费SSL证书的申请请参见文章《免费StartSSL证书申请详细步骤和IIS中的SSL设置》的前半部分,网址http://www.server110.com/iis/201407/10798.html这里有详细的图文教程,直接在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等环境,全部拷贝出来。

server{listen80;listen[xxxx:xxxx:xx:xx:xxx:xxx::xxx]:80; //这里是虚拟主机监听的ipv6地址server_nameserver110.comwww.server110.com;

......

}

把 里面的 80 端口改成443,然后加上3行如下的

ssl on;ssl_certificate/home/wwwroot/certs/ssl.crt;//这里如果你改过名字了,请改成你的文件名ssl_certificate_key/home/wwwroot/certs/ssl.key; //这里如果你改过名字了,请改成你的文件名

改变后的案例如下:

server{listen443;listen[xxxx:xxxx:xx:xx:xxx:xxx::xxx]:443;server_nameserver110.comwww.server110.com;indexindex.html index.htm index.php default.html default.htmdefault.php;root/home/wwwroot/server110.com;

sslon;ssl_certificate/home/wwwroot/certs/ssl.crt;ssl_certificate_key/home/wwwroot/certs/ssl.key;

......

}

然后呢,把443端口的 这么一大段代码,粘贴到 80端口配置的文档下方。实际上等于新建了个虚拟主机,只是路径和绑定的域名是一样的,换了个监听端口。这里要注意,是粘贴到下方,不是替换以前的。

现在 /usr/local/nginx/conf/vhost/域名.conf 配置文件大约是这个样子滴。

server{listen80;listen[xxxx:xxxx:xx:xx:xxx:xxx::xxx]:80;server_nameserver110.comwww.server110.com;

......

}

server{listen443;listen[xxxx:xxxx:xx:xx:xxx:xxx::xxx]:443;server_nameserver110.comwww.server110.com;indexindex.html index.htm index.php default.html default.htmdefault.php;root/home/wwwroot/server110.com;

sslon;ssl_certificate/home/wwwroot/certs/ssl.crt;ssl_certificate_key/home/wwwroot/certs/ssl.key;

......

}

好啦。这里就修改完了。先按ESC退出,按 :wq! 保存配置并退出当前文档。

第三步 :修改nginx主配置文件

通过命令 vi /usr/local/nginx/conf/nginx.conf 打开nginx主配置文件。

找到 server 部分 {}括号内的文件,添加如下的一行,这个就是支持ipv6的SSL证书的啦,如果不添加,SSL证书也无法使用滴。

listen[::]:443 default ipv6only=on;

这里要注意,只需要添加这一行就OK。后面default ipv6only=on不要落下,否则也会出错。

效果如下:

server{listen80;listen[::]:80 default ipv6only=on;listen[::]:443 default ipv6only=on;......}

一定要注意,不要自作聪明加上一行 listen 443;如果写上 listen 443; 这行,会导致重启nginx的时候提示IP被占用而无法启动nginx。如果不写 listen [::]:443 defaultipv6only=on;这行,也会导致重启nginx的时候提示IP被占用而无法启动nginx。按ESC退出,按 :wq! 保存配置并退出当前文档。

好啦,现在测试nginx.conf配置文件是否正确,如果不正确,检查配置。

执行以下命令,查看Nginx配置是否正确/usr/local/nginx/sbin/nginx -t若返回以下结果则正确the configuration file /usr/local/nginx/conf/nginx.conf syntax isokconfiguration file /usr/local/nginx/conf/nginx.conf test issuccessful

第四步:合并证书。

这里颁发给你的 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----------BEGINCERTIFICATE----代码。这个代码一定不要在一行里。

如果在一行,测试配置文件会出现错误,错误如下。[emerg]:SSL_CTX_use_certificate_chain_file("/etc/nginx/certs/server.crt")failed (SSL: error:0906D066:PEM routines:PEM_read_bio:bad end lineerror:140DC009:SSL routines:SSL_CTX_use_certificate_chain_file:PEMlib)configuration file /etc/nginx/conf/nginx.conf test failed

所以我们在粘贴证书文件的时候,最好回车,哪怕多一行也没关系,这样不会出错,也比较好看。粘贴后样式应该是:

-----END CERTIFICATE-----

-----BEGIN CERTIFICATE-----

最后,把记事本最后一行多回车一下,最好多回车一行。

把合并过的证书上传,替换掉你服务器里的ssl.crt文件。

方法二:用命令在服务器上合并.

首先 用命令 cd /home/wwwroot/certs/ 切换到你证书的文件夹。

然后依次执行一下命令wget http://cert.startssl.com/certs/ca.pemwget http://cert.startssl.com/certs/sub.class1.server.ca.pemcat ca.pem sub.class1.server.ca.pem >> ca-certs.crtcat ca-certs.crt >> ssl.crt

这样就合并证书了,但是合并的证书会出现上面的错误,所以还要下载下来。把 -----END CERTIFICATE----------BEGINCERTIFICATE-----分成2行。变成:-----END CERTIFICATE-----

-----BEGIN CERTIFICATE-----然后保存,上传证书,替换掉你服务器里的ssl.crt文件。

第五步:去除key里的加密密码。

这时候如果你重启Nginx让配置生效,可以使用如下命令。输入以下命令:killall nginx/usr/local/nginx/sbin/nginxkill -HUP `cat /usr/local/nginx/logs/nginx.pid`会出现要求你输入密码的 Enter PEM pass phrase如果你配置文件也正确,输入密码后才能启动Nginx,这是很麻烦的。而且服务器重新启动也不会自动启动nginx,必须手动启动,还要输入2次密码。所以我们必须要取消key里的密钥.

好啦,我们现在可以取消密码。命令如下,首先切换到保存key的文件夹,如果你在别的文件夹,请更换成你自己的。cd /home/wwwroot/certsopenssl rsa -in ssl.key -out ssl.key.unsecure这样,就剥离了密码文件,利用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;然后保存。

效果如下:server{listen443;listen[xxxx:xxxx:xx:xx:xxx:xxx::xxx]:443;server_nameserver110.comwww.server110.com;indexindex.html index.htm index.php default.html default.htmdefault.php;root/home/wwwroot/server110.com;

sslon;ssl_certificate/home/wwwroot/certs/ssl.crt;ssl_certificate_key/home/wwwroot/certs/ssl.key.unsecure;

......

}

是不是发现不再提示了,整个世界清净了吧:-)

这里要注意的是,有时候检测配置文件的时候,会提示 ssl.key 或 ssl.key.unsecure 有错误。只要用记事本打开ssl.key 或ssl.key.unsecure,在最后一行回车,留一行空白就OK。

最后,当然是重启Nginx让配置生效,可以使用如下命令。输入以下命令:killall nginx/usr/local/nginx/sbin/nginxkill -HUP `cat /usr/local/nginx/logs/nginx.pid`

当然,你也可以重新启动服务器哦。

如果你想让网站强制使用SSL那么添加如下代码即可。找到虚拟主机的配置文件 /usr/local/nginx/conf/vhost/域名.conf

在server 80端口的配置 {} 里,添加代码rewrite ^(.*) https://$server_name$1 permanent;

效果如下:server{listen80;rewrite ^(.*) https://$server_name$1 permanent;......... }

重新启动nginx 大功告成。:)

++++++++++++++++++++++++++++++++++++++++

如何测试,服务器到底走的是IPV4还是ipv6??????

PHP脚本代码如下,保存为ip.php上传到你服务器上,通过访问该地址既可以测试。

$ip=$_SERVER["REMOTE_ADDR"];if (strpos($ip,":")!==false){$show = "您正在使用IPv6地址 $ip 访问本站!";}else{$show = "您正在使用IPv4地址 $ip 访问本站!";}echo $show;?>

通过访问即可看见,你当前的访问IP,即可知道由ipv4还是ipv6访问的。这里前提是你的域名支持ipv6解析并成功解析到服务器的ipv6上了哦。

感谢ipv6home.cn的ipv6之家站长提供代码。

+++++++++++++++++ 分割线 ++++++++++++++++

有问题的请看:

问题一:

Linux 提示 nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Addressalready in use)

今天在重启nginx时候发现这个错误,原因是nginx自己占用了80端口killall -9 nginx 杀掉nginx 进程 然后重启就行了。 service nginx restartcheck running pidfuser -n tcp 8080/tcp: 26621 26622 Kill# kill -92118# kill -9 2119restart nginx/root/lnmp restart

netstat -an|grep LISTEN 命令可以查看当前开启了那些端口。

问题二:

Nginx配置SSL安全证书避免启动输入Enter PEM pass phrase

配置好的Nginx每次启动都要输两遍PEM passphrase,很是不爽,尤其是在服务器重启后,Nginx压根就无法自动启动,必须手动启动并输入那麻烦的PEM passphrase。如何避免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 servercertificate with serial number 1*** for www.***** is notcomplete!

根证书没有合并,请参照以上教程合并证书。

问题四:

服务器只支持ipv4访问,不支持ipv6访问证书。

1.请配置更改 /usr/local/nginx/conf/vhost/域名.conf 配置文件。加上代码: listen[xxxx:xxxx:xx:xx:xxx:xxx::xxx]:443; ssl on; ssl_certificate/home/wwwroot/certs/ssl.crt; ssl_certificate_key/home/wwwroot/certs/ssl.key;

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]:443failed (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 [::]:443default ipv6only=on;这里不能添加 listen443;如果添加了listen 443; 在虚拟主机中,ipv4下SSL网站将无法访问。并且服务器测试会出现以上提示。

vhost 虚拟主机 要写监听每一个详细IPV6地址。server{listen443;listen[2605:6400:2:xxx:xx:xxx:xx:2]:443; ................. }

如果不加以上代码 则会提示报错。导致无法启动nginx。

标题:配置Nginx SSL证书网站支持在ipv6协议下访问

地址: https://www.yunhk.xyz/26433.html