免费 https 证书

想要自己的网站也有一个绿色小锁,但又不想付费购买证书,Let’S Encrypt 上提供了免费申请 https 证书的服务,整理了申请大致流程如下

下载 certbot

解压打开执行就会有相关提示

生成免费证书

1
2
3
./certbot-auto certonly --webroot --agree-tos -v -t --email 邮箱地址 -w 网站根目录 -d 网站域名
./certbot-auto certonly --webroot --agree-tos -v -t --email yourmail@gmail.com -w /path/to/your/web/root -d yourdomain.com

注意 这里 默认会自动生成 /网站根目录/.well-known/acme-challenge,然后 shell 脚本会对应的访问 网站域名/.well-known/acme-challenge

如果返回正常就确认了你对这个网站的所有权,就能顺利生成。

获取证书

如果上面的步骤正常 shell 脚本会展示如下信息:

1
2
3
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/网站域名/fullchain.pem
...

生成 dhparams

使用 openssl 工具生成 dhparams

1
openssl dhparam -out /etc/ssl/certs/dhparams.pem 2048

配置 Nginx

打开 nginx server 配置文件加入如下设置:

1
2
3
4
5
6
7
8
listen 443
ssl on;
ssl_certificate /etc/letsencrypt/live/网站域名/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/网站域名/privkey.pem;
ssl_dhparam /etc/ssl/certs/dhparams.pem;
ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;

然后重启 nginx 服务就可以了。
注意要确定用户有权限访问 /etc/letsencrypt/ 该目录。

强制跳转 https

https 默认是监听 443 端口的,没开启 https 访问的话一般默认是 80 端口。如果你确定网站 80 端口上的站点都支持 https 的话加入下面的配件可以自动重定向到 https

1
2
3
4
5
server {
listen 80;
server_name yourdomain.com;
return 301 https://$server_name$request_uri;
}

证书更新

免费证书只有 90 天的有效期,到时需要手动更新 renew。刚好 Let’s encrypt 旗下还有一个 Let’s monitor 免费服务,注册账号添加需要监控的域名,系统会在证书马上到期时发出提醒邮件,非常方便。收到邮件后去后台执行 renew 即可,如果提示成功就表示 renew 成功

1
./certbot-auto renew

可以在 crontab 中设置定时脚本。