因为服务器太乱,我清理了一下服务器并且重新使用letsencrypt加密了https,现在将我的经验分享出来。
本文基于ubuntu16.04、nginx环境
第一步:安装 Certbot
第一步是安装letsencrypt
提供的certbot工具
1 | sudo add-apt-repository ppa:certbot/certbot |
第二步: 获得SSL的证书
我们使用WebRoot
这个插件。
这里以nginx的default的site作为示例:
1 | vim /etc/nginx/sites-available/default |
在server的块中,加入以下内容
1 | location ~ /.well-known { |
确认root是你网站的根目录,比如默认情况下是/var/www/html
保存退出之后,测试并重启你的nginx:
1 | sudo nginx -t |
然后我们获取到相关的SSL证书:
1 | sudo certbot certonly --webroot --webroot-path=/var/www/html -d example.com -d www.example.com -d third.another.com |
记得把上面的/var/www/html
改成你自己的网站根目录。如果需要同时对多个域名进行认证的话只要同时使用多个-d
就可以了,并且这些域名并不一定都需要为example.com
,可以为别的域名。
然后根据提示,输入对应的信息,如果完成后应该会看到类似的信息:
1 | IMPORTANT NOTES: |
认证成功后,我们来生成一下更强的dhparam
:
1 | sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048 |
这一步应该会消耗一定的时间
第三步:在nginx上设置TLS/SSL
我们先创建一个新的脚本:
1 | sudo vim /etc/nginx/snippets/ssl-example.com.conf |
内容如下:
1 | ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; |
保存退出后,再创建一个脚本用来设置ssl的参数:
1 | sudo vim /etc/nginx/snippets/ssl-params.conf |
内容如下:
1 | # from https://cipherli.st/ |
保存退出。
然后修改一下site的配置文件:
1 | sudo vim /etc/nginx/sites-available/default |
改成这样:
1 | server { |
保存退出。
第四步:在防火墙中Allow Nginx
执行以下脚本:
1 | sudo ufw allow 'Nginx Full' |
第五步:自动更新SSL证书
因为letsencrypt提供的证书是有期限的,所以我们需要设置自动更新证书。
执行命令:
1 | sudo crontab -e |
在最后加上这么一行:
1 | 30 0 * * 1 /usr/bin/certbot renew --quiet --renew-hook "/bin/systemctl reload nginx" |
完成!