是时候支持HTTPS了:免费SSL证书letsencrypt配置教程

参考:https://timyang.net/web/https-nginx-ubuntu-howto/

今天抽空将 blog 增加了 HTTPS 支持,并停止了原来的 HTTP 服务。
由于证书仅网站域名需要,因此使用了免费的 Let’s Encrypt 证书服务。
根据维基百科的说明,Let’s Encrypt 是一个于2015年三季度推出的数字证书认证机构,将通过旨在消除当前手动创建和安装证书的复杂过程的自动化流程,为安全网站提供免费的SSL/TLS证书。Let’s Encrypt 是由互联网安全研究小组(ISRG,一个公益组织)提供的服务。主要赞助商包括电子前哨基金会,Mozilla 基金会,Akamai 以及思科。
2015年12月3日,该服务进入公测阶段,正式面向公众。
2016年4月12日,该项目正式离开Beta阶段。
到2016年9月9日,Let’s Encrypt 已经发放 1000 万张证书。因此对于大部分中小型网站来说,是一个值得考虑的选择。

HTTPS 启用及配置的主要步骤如下,假设你已经有一个正常运行的 HTTP 网站。
1. 打开 https://certbot.eff.org/ 选择对应操作系统与 Web 服务器,选完后出现响应的平台说明。由于我的系统运行在 nginx 及 CentOS(7.x),选完之后出现的说明地址是 https://certbot.eff.org/#centosrhel7-nginx

2. 执行命令,并根据需要修改相应域名参数。

$ sudo yum install certbot
$ letsencrypt certonly --webroot -w /alidata/www/wordpress -d gittoy.com -d www.gittoy.com

3. 修改 nginx
将 80 端口相关配置改成 443 端口,并增加相关配置。(在Nignx下的.conf文件修改即可)

# listen       80;
listen 443 ssl;
server_name localhost;

ssl_certificate /etc/letsencrypt/live/gittoy.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/gittoy.com/privkey.pem;

再增加 80 端口自动跳转(可以增加conf文件,再进行修改)

server {
    listen 80;
    server_name localhost;
    return 301 https://$host$request_uri;
}

4. 重启 nginx使得配置生效:nginx -s reload

并用 chrome 访问,如果 URL 地址之前出现锁标记,则说明设置成功。
如果页面中还包含有嵌入的 HTTP 元素,chrome 会仍然显示 i 标记,通过点击 i 之后的元素说明逐个修复即可。

另外注意 Let’s Encrypt 每次只有 90 天有效期,但可以通过脚本进行更新

测试运行

letsencrypt renew --dry-run --agree-tos

如果运行成功,建议将正式更新脚本加到 cron 脚本中,一劳永逸。

查看当前crontab下自动执行的脚本都有哪些。

crontab -l

对当前的crontab进行编辑

crontab -e

将下面的更新脚本加入

0 */12 * * * certbot renew --quiet --renew-hook "/etc/init.d/nginx reload" 

上面是一天更新两次,是官方建议。原话如下:

Note:
 if you're setting up a cron or systemd job, we recommend running it twice per day (it won't do anything until your certificates are due for renewal or revoked, but running it regularly would give your site a chance of staying online in case a Let's Encrypt-initiated revocation happened for some reason). Please select a random minute within the hour for your renewal tasks.

为什么不是90天或者5天,因为一旦哪天重启服务器,这个crontab就会向后又延长90天导致失效。--renew-hook这个选项在证书续期成功的时候会重新载入nginx配置,如果不加就需要手动载入或者手动重启nginx,不然的话虽然续期成功了nginx没加进来也会提示过期。

很多人会遇到的一个问题,crontab是不是执行的问题。建议搞个1分钟打印时间的放crontab里,这是个人感觉最有效的方法。

*/1 * * * * echo "$(date)" >>/var/log/datecron.txt

查看一下是否自动执行了。

cat /var/log/datecron.txt

虽然 Let’s Encrypt 是一个免费的服务,但对 letsencrypt 使用感到满意的朋友,还可以去他们网站进行赞助。

猜你喜欢

转载自rainoo.iteye.com/blog/2348698