给网站加上永久免费SSL的证书

为什么网站要设置为HTTPS

HTTPS是安全上网的保证,如果有条件还是有必要给自己的网站安装安全证书,保障用户上网安全。

同时百度对HTTPS的网站还会扶持,将影响搜索的排序,见百度对HTTPS的态度

谷歌对HTTPS网站的态度也很坚决,在Chrome中所有非HTTPS网站,会被标记为不安全。

谷歌chrome标记不安全

但是目前商用证书都需要购买的,对于个人站长来说,如何获取使用免费的证书呢,让Let's Encrypt来帮你吧。

如何申请永久免费证书

Let's Encrypt申请免费证书

Let's Encrypt作为一个公共且免费SSL的项目逐渐被广大用户传播和使用,是由Mozilla、Cisco、Akamai、IdenTrust、EFF等组织人员发起,主要的目的也是为了推进网站从HTTP向HTTPS过度的进程,目前已经有越来越多的商家加入和赞助支持。

申请及使用步骤

准备工作

  • 确保本机的有Python的开发环境
  • 确保本机有git环境

下载cerbot

>git clone https://github.com/certbot/certbot.git

生成证书

>cd certbot
>./certbot-auto certonly --standalone --email webmaster@xtuz.net -d www.xtuz.net

确认证书

确认在/etc/letsencrypt/live/存在站点的名目录,并且在木有下有4个文件:

  • cert.pem - Apache服务器端证书
  • chain.pem - Apache根证书和中继证书
  • fullchain.pem - Nginx所需要ssl_certificate文件
  • privkey.pem - 安全证书KEY文件

Nginx安装证书

在nginx.conf文件的站点配置中添加如下信息:

listen       443 ssl;
server_name  www.xtuz.net;

ssl_certificate      /etc/letsencrypt/live/www.xtuz.net/fullchain.pem;
ssl_certificate_key  /etc/letsencrypt/live/www.xtuz.net/privkey.pem;

ssl_session_cache    shared:SSL:1m;
ssl_session_timeout  5m;

ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;

同时增加网站80端口跳转到443的调整

server {
    listen       80;
    server_name  www.xtuz.net;
    rewrite ^(.*) https://$host$1 permanent;
}

Nginx重启确认HTTPS生效

通过命令Nginx重新加载配置文件后,再打开https://www.xtuz.net,可以看到chrome提示网站已经安全了. :)

解决免费SSL证书90天有效期问题

Let's Encrypt证书是有效期90天的,需要我们自己手工更新续期才可以。 命令如下:

 ./certbot-auto certonly --renew-by-default --email webmaster@xtuz.net -d www.xtuz.net

通过这个方法,就可以变成永久免费证书咯。

配置过程中碰到的坑 - Could not bind to IPv4 or IPv6

root@vps:/opt/software/certbot# ./certbot-auto certonly --standalone --email webmaster@xtuz.net -d www.xtuz.net
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator standalone, Installer None
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for www.xtuz.net
Cleaning up challenges
Problem binding to port 80: Could not bind to IPv4 or IPv6.

原因是本机上有进程已经绑定了80端口,需要关掉。查看本机是nginx占用了80端口,

输入supervisorctl stop nginx。然后再次执行证书安装命令,即可顺利安装。

安装完毕后,输入supervisorctl start nginx,即启动nginx。

展开剩余53%