第一步我们要安装certbot
先安装一下cerbot的python库:(有的教程说直接安库可以用,但是不知道是不是没配置path,所以我的指令无效,所以我又以yum二进制安装了一遍)
1 | pip install certbot |
接下来yum安装Certbot软件:
1 2 | yum install epel-release yum install certbot |
安装完毕测试一下certbot能用否:
1 | certbot --help |
如果提示certbot不是有效命令,那么安装还是有问题,你可以参考官方网站:https://certbot.eff.org/lets-encrypt/centosrhel7-nginx
我给的网页是给的running Nginx on centOS 7的,如果和你的VPS的OS不匹配在上面的选项里调整一下即可查看对应的安装方式。
但是不要使用它的自动更新脚本,因为certbot更新证书会调用80端口,必须先停止Nginx再运行,否则会报错提示端口冲突,但他给的脚本并没有自动停止Nginx的功能,更不能再证书更新后自动启用Nginx,所以他给脚本并不适用。
如果显示出了certbot的命令使用方法,如下图所示:
那么恭喜你Certbot已经可以使用了,接下来用一条命令来申请证书:
1 2 3 | service nginx stop #先停止nginx服务避免80端口和443端口被占用 certbot certonly --standalone -d thebwc.tech -d www.thebwc.tech #以我的站点为例给 thebwc.tech 和 www.thebwc.tech 2个域名申请证书,你们须按自己的域名来申请 service nginx start #重新开启nginx服务 |
然后看见Congratulation!字样表示证书已经申请完成了。因为我是之前申请到的,写本篇文章的时候没有截图。在恭喜字样下面还有证书的存放地址:一般文件存放在/etc/letsencrypt/live/这里是你申请的域名/ 里面。
文件夹内有:cert.pem (服务器证书)chain.pem (包含Web浏览器为验证服务器而需要的证书或附加中间证书) fullchain.pem (cert.pem+chain.pem) privkey.pem(证书的私钥) README(说明文档)
接下来我们来设置nginx的HTTPS设置,找到安装文件夹进入/conf/内,打开nginx.conf设置进行修改:
1 | vi ./nginx.conf #我这里默认你在/conf/文件夹下 |
然后在文件中找到HTTPS server 项,去掉注释(即删除#),进行如下设置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | # HTTPS server # server { listen 443 ssl; server_name 这里填你的域名; ssl_certificate /etc/letsencrypt/live/这里填你对应的域名文件夹/fullchain.pem; #这里用中间证书+服务器证书的合体pem文件fullchain ssl_certificate_key /etc/letsencrypt/live/这里填你对应的域名文件夹/privkey.pem; #这里用私钥 ssl_protocols TLSv1.2 TLSv1.3; #协议用TLS1.2和TSL1.3 ssl_session_cache shared:SSL:5m; #共享5M会话缓存 ssl_session_timeout 5m; #会话过期时间 5分钟 ssl_session_tickets off; #会话票证,开启能节省TLS握手开销 ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384; #这里是加密,我用的比较强的加密 ssl_prefer_server_ciphers on; #在TLS握手时启用服务器算法优先,由服务器选择适配算法而非客户端选择 ssl_ecdh_curve secp384r1; keepalive_timeout 60; #保持连接超时时间60分 location / { root 这里填写你站点的绝对路径; index index.php index.html index.htm; #如果不是配置WordPress 可以去掉index.php } |
到这里就配置完成了,现在你可以使用https://来访问你的站点了。如果你感觉网站速度变慢了,可能是由于使用了强加密,你可以把加密那一行的加密设置内容替换成如下:ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
将加密协议 补上一个 TLSv1.1
最后补充一点,由于之前你可以还设置了http里面的server监听在80端口以普通的http://运行,我们要补充一行设置来rewrite一下,具体设置如下:
找到http里的server,然后加上一条:
1 2 3 4 | server { listen 80; server_name 这里写你的域名; rewrite ^(.*) https://$server_name$1 permanent; #补上这一条就可以rewrite到https://了 |
到这里就全部设置完成了,只要输入你的域名,就全部导向到https://上了
写在最后,由于证书不是永久有效,所以每隔2个月要手动更新一次:
1 2 3 | service nginx stop #停止nginx进程 certbot renew #更新证书 service nginx start #开启nginx服务 |
或者你可以在crontab任务里加入自动更新任务:
1 2 3 | vi /etc/crontab #打开并修改crontab,按i修改 0 0 0 */2 0 root systemctl stop nginx; /usr/bin/certbot renew; systemctl restart nginx #在空白处加入该行代码即可 :wq #修改完按一次ESC 再输入:wq 回车即可 |
如果你在安装或使用过程中还遇到其他的坑,你可参考CSDN互扯程序写的一篇文章:https://blog.csdn.net/mxw2552261/article/details/79730757
2 Responses
[…] 如果需要使用使用https,请先参考使用certbot获取证书及相关设置:{传送门在此} […]
[…] 3、申请免费的Let’s Encrypt证书,你可以参考我写的如何申请免费证书教程 […]