如果要启用HTTPS,我们就需要从证书授权机构(以下简称CA) 处获取一个证书,Let's Encrypt 就是一个 CA。我们可以从 Let's Encrypt 获得网站域名的免费的证书
Certbot 是Let's Encrypt官方推荐的获取证书的客户端,可以帮我们获取免费的Let's Encrypt 证书。Certbot 是支持所有 Unix 内核的操作系统的
- 安装Certbot客户端
wget https://dl.eff.org/certbot-auto chmod a+x certbot-auto
- 获取证书
sudo ./path/to/certbot-auto certonly --webroot -w /var/www/example -d example.com -d www.example.com -w /var/www/thing -d thing.is -d m.thing.is
这个命令会为 example.com 和 www.example.com 这两个域名生成一个证书,使用
--webroot
模式会在/var/www/example
中创建.well-known
文件夹,这个文件夹里面包含了一些验证文件,certbot 会通过访问 example.com/.well-known/acme-challenge 来验证你的域名是否绑定的这个服务器。这个命令在大多数情况下都可以满足需求,
安装客户端及获取证书的方式可以看官方教程
https://certbot.eff.org/all-instructions/#centos-6-none-of-the-above
证书生成完毕后,我们可以在 /etc/letsencrypt/live/
目录下看到对应域名的文件夹,里面存放了指向证书的一些快捷方式。
使用 openssl 工具生成 dhparams,作用是使ssl更加安全
openssl dhparam -out /etc/ssl/certs/dhparams.pem 2048
这时候我们的第一生成证书已经完成了,接下来就是配置我们的web服务器,启用HTTPS。
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;
强制跳转 https
server {
listen 80;
server_name your.domain.com;
return 301 https://$server_name$request_uri;
}
自动 更新ssl,因为证书只有90天的有效期
$ sudo ./path/to/certbot-auto renew --dry-run
如果这个命令正确工作,可以安排自动更新添加一个cron作业或系统定时器运行以下:
./path/to/certbot-auto renew
官方cron脚本 (具说是每天中午12点和晚上12点运行):
0 0,12 * * * python -c 'import random; import time; time.sleep(random.random() * 3600)' && ./path/to/certbot-auto renew