前言
最近想把自己的小网站全面支持https协议,奈何囊肿羞涩,所以就搜寻免费证书。阿里和腾讯两家的免费证书貌似都只支持一个域名,最后发现开源的Let’s Encrypt免费而且可以支持多域名,并且2018年还会增加通配符配置,因此就选择使用Let’s Encrypt来让自己的小站全面拥抱https。
如何使用Let’s Encrypt
简单来说,使用Let’s Encrypt来https化网站,需要一下几个步骤:
1. 安装certbot,Let’s Encrypt使用certbot工具来管理证书
2. 申请并下载证书
3. 配置nginx
4. 自动重置证书有效期,由于Let’s Encrypt证书有效期只有90天,所以需要实现自动更新脚本来保证证书有效。
1.安装certbot
最简单的安装方式是使用certbot-auto
脚本,以Centos7为例,运行以下命令:
wget https://dl.eff.org/certbot-auto
chmod a+x ./certbot-auto
./certbot-auto --help
这时候可以看到certbot的命令帮助。
2.获取证书
Let’s Encrypt提供了一些插件来提供对Apache、Nginx等的便利操作,由于我的网站使用nginx,故在此以nginx插件来介绍Let’s Encrypt的使用。
使用以下命令来生成证书:
./certbot-auto --nginx --nginx-server-root /usr/local/nginx/conf -d domain.com -d blog.domain.com
该命令运行成功即可生成证书,并自动下载证书到/etc/letsencrypt
文件夹下。注意,首次运行该命令时,会让你输入电子邮箱。--nginx
是指使用nginx,--nginx-server-root
参数是指定nginx配置文件路径,certbot工具默认的nginx配置文件路径是/etc/nginx
。
3.配置nginx
证书申请完毕,剩下的事情就是配置nginx了。
编辑nginx.conf
配置文件,加入以下代码:
server{
listen 80;
server_name *.domain.com;
error_page 497 https://$host$uri?$args;
rewrite ^(.*)$ https://$host$1 permanent;
}
server {
server_name example.domain.com;
listen 443 ssl;
add_header X-Content-Type-Options nosniff;
ssl_certificate /etc/letsencrypt/live/yourdomain/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain/privkey.pem;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
}
Let’s Encrypt支持多域名配置,所以我在证书上添加了所有的网站域名。因此,我在nginx配置中,将http请求全部重定向到https。/etc/letsencrypt/live/yourdomain/fullchain.pem
和/etc/letsencrypt/live/yourdomain/privkey.pem
都是第2步中,自动下载到服务器的证书文件。
4.配置自动更新证书
由于Let’s Encrypt仅有90天有效期,所以可以配置crontab定时任务来执行证书更新。
新建文件crontab-certbot-auto-renew,编辑文件,输入以下内容后保存:
11 1 * */2 * /home/certbot/certbot-auto renew
运行crontab crontab-certbot-auto-renew
添加定时任务。
/home/certbot/certbot-auto
路径是第一步中下载的certbot
工具所在路径。
certbot一些命令
./certbot-auto certificates
查看所有的证书
./certbot-auto revoke --cert-path /etc/letsencrypt/live/CERTNAME/cert.pem
撤销证书
./certbot-auto renew
更新证书