经常看到受浏览器信赖的网站感觉很高大上,很想也把网站换上Https,但感觉年纪大了,不想折腾,拖延症也比较厉害,直到Google给我发了邮件,提示网站显示安全警告,建议我迁移到Https,所以不得不重视起来。
网上搜索关于免费SSL证书的,目前比较好的解决方案是使用Let’s Encrypt,适合个人使用,不用再忍受自签发证书不受浏览器信赖的提示。
Let's Encrypt是国外一个公共的免费SSL项目,由 Linux 基金会托管,它的来头不小,由Mozilla、思科、Akamai、IdenTrust和EFF等组织发起,目的就是向网站自动签发和管理免费证书,证书有90天的有效期,以便加速互联网由HTTP过渡到HTTPS,目前Facebook等大公司开始加入赞助行列。
搜索发现Let's Encrypt证书安装方法有很多,感觉使用最新发布的新工具certbot最为方便,虽然是新的工具,但是生成证书的使用方法和参数是基本一致的,证书续期更简单了。
目前certbot在一些老版本的Linux发行版上的兼容性还是有问题的,特别是在CentOS 5上因为python版本过低是无法用的,CentOS 6上需要先安装epel。那么好吧,根据下面安装配置来实现。
安装certbot
Centos 6
yum -y install git bc
yum install epel-release
cd /usr/bin
wget https://dl.eff.org/certbot-auto
chmod a+x certbot-auto
ln -s /usr/bin/certbot-auto /usr/bin/certbot
Centos 7
yum install epel-release
yum install certbot
为Ghost博客安装let’s Encrypt前做一些准备
在我们得到并执行Let's Encrypt之前,我们需要设置一个阶段。为了让我们加密验证我们拥有的域名,我们需要通过Nginx设置来进行验证。 我们需要编辑我们的Nginx下的ghost配置文件。
把原来的配置设置成:
server {
listen 80;
server_name www.sungz.com;
location ~ ^/.well-known {
root /var/www/ghost;
}
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://127.0.0.1:2368;
}
}
然后重启nginx.
获取let’s Encrypt SSL证书
单域名生成证书:
./certbot-auto certonly --email <a href="https://www.sungz.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="e0998f95858d81898ca093958e879ace838f8d">[email protected]</a> --agree-tos --no-eff-email --webroot -w /home/wwwroot/www.sungz.com -d www.sungz.com
多域名单目录生成单证书:(即一个网站多个域名使用同一个证书)
./certbot-auto certonly --email <a href="https://www.sungz.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="97eef8e2f2faf6fefbd7e4e2f9f0edb9f4f8fa">[email protected]</a> --agree-tos --no-eff-email --webroot -w /home/wwwroot/www.sungz.com -d www.sungz.com -d blog.sungz.com
多域名多目录生成一个证书:(即一次生成多个域名的一个证书)
./certbot-auto certonly --email <a href="https://www.sungz.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="e990869c8c84888085a99a9c878e93c78a8684">[email protected]</a> --agree-tos --no-eff-email --webroot -w /home/wwwroot/www.sungz.com -d www.sungz.com -d bbs.sungz.com -w /home/wwwroot/vuejsexamples.com -d vuejsexamples.com -d blog.vuejsexamples.com
提示
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/www.sungz.com/fullchain.pem. Your cert will
expire on 2017-10-01. To obtain a new or tweaked version of this
certificate in the future, simply run certbot-auto again. To
non-interactively renew *all* of your certificates, run
"certbot-auto renew"
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
就是生成成功。
生成的证书会存在:/etc/letsencrypt/live/www.sungz.com/ 目录下
配置nginx
server {
listen 80;
server_name www.sungz.com;
location ~ /.well-known {
allow all;
}
location / {
return 301 https://$server_name$request_uri;
}
}
server {
listen 443;
server_name www.sungz.com;
ssl on;
ssl_certificate /etc/letsencrypt/live/www.sungz.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.sungz.com/privkey.pem;
# ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS;
# enable HSTS including subdomains
add_header Strict-Transport-Security "max-age=31536000; includeSubdomains";
location ~ /.well-known {
allow all;
}
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_pass http://127.0.0.1:2368;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
自动更新证书
由于获取的证书就三个月,我们可以用定时任务进行证书的更新:
crontab -e
CentOS 6.x
01 1 * * 0 /usr/bin/certbot-auto renew --force-renew
06 1 * * 0 /sbin/service nginx reload
CentOS 7.x
01 1 * * 0 /usr/bin/certbot-auto renew --force-renew
06 1 * * 0 /usr/bin/systemctl nginx reload
每周天凌晨1点,执行certbot renew 命令,并且将日记写入 /var/log/ssl-renew.log