1. 生成证书
1.1 安装 certbot
#安装到 /usr/local 目录中
cd /usr/local
wget https://dl.eff.org/certbot-auto
chmod a+x certbot-auto
1.2 生成证书
# 注意此处 mysite.com 和 www.mysite.com 在 /www/mysite.com 目录
# wx.mysite.com 在 /www/wx.mysite.com 中
# 可以根据情况增删目录
./certbot-auto certonly --webroot -w /www/mysite.com -d mysite.com -d www.mysite.com -w /www/wx.mysite.com -d wx.mysite.com
安装前保证域名能正常访问。如果生成不成功,去google错误信息。
1.3 证书更新
现在证书已经有了。但是Let’s Encrypt免费SSL证书每90天要自动续期。
更新的命令是
/usr/local/certbot-auto renew --quiet --no-self-upgrade
可以用 crontab 定时更新
# 编辑 crontab
crontab -e
在定时任务中增加
# 每隔两个月1号的零点就会自动更新证书,5分钟后nginx重新加载配置。
00 00 1 2,4,6,8,10,12 * /usr/local/certbot-auto renew --quiet --no-self-upgrade
05 00 1 2,4,6,8,10,12 * /usr/sbin/service nginx -s reload
2. 配置nginx
certbot 自动生成的证书保存在/etc/letsencrypt/live/mysite.com/
目录。
配置nginx的时候,修改原来的配置文件
server {
listen 80;
server_name mysite.com www.mysite.com;
location /.well-known/acme-challenge {
location your/site;
}
location / {
return 301 https:$host$request_uri;
}
}
certbot-auto renew 的时候会访问 /.well-known/acme-challenge 目录验证网站所有权,但是这个请求不支持https!因此保留http访问方式。
并新增一段server配置
server{
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/mysite.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/mysite.com/privkey.pem;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
# intermediate configuration. tweak to your needs.
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
ssl_prefer_server_ciphers on;
# 以下与原来的配置相同
# ...
}
修改后重启nginx。
3. 其他设置
如果启用了防火墙,确保开启443端口。
我在这里遇到了端口被占用的情况,发现是ssserver 占用了443端口(原来的默认端口容易被封)。修改了ssserver端口,重启nginx,网站已经自动跳转到https了。
备注
如果是别的系统,也不麻烦,参看这里:https://letsencrypt.org/getting-started/,查找对应系统的生成方法。
删除的方法
如果一个域名已经不需要SSL证书了,删除略麻烦。
先备份
sudo cp /etc/letsencrypt/ /etc/letsencrypt.backup -r
再删除这三处相应的文件
rm -rf /etc/letsencrypt/live/${DOMAIN} rm -rf /etc/letsencrypt/renewal/${DOMAIN}.conf rm -rf /etc/letsencrypt/archive/${DOMAIN}