先说下背景:certbot依赖太旧
2020年之后Python2 安全不支持 不能再用了,
网站用的是letsencrypt免费证书,letsencrypt官方推荐acme客户端是Certbot ,
但是Certbot 在nginx on centos7上用的是 python2-certbot-nginx ,基于Python2的,(看了下centos8是使用的python3的,但是更新到8代价有点大)
所以cerbot也用不得了
解决方案:acme.sh
在官方客户端列表里发现了一个用shell实现的:acme.sh 现在(2020年09月09日)有19K star
直接使用DNS方式生成泛域名证书,这里使用acme.sh配置let'sencrypt网址证书,过程如下(请以官网文档为主)
1安装 参照官网 安装
2配置dns 找到自动的域名供应商添加dnsapi key secret
4配置nginx 只需要在原来的80 server的基础上更改443端口并添加证书配置就可以了,见下方红色代码部分
server { listen 443; server_name localhost; ssl on; index index.html index.htm; ssl_certificate /上一步你安装的位置/fullchain.cer; ssl_certificate_key /上一步你安装的位置/clsn.key; ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; root html; location / { root html; index index.html index.htm; } }
5 重启nginx : service nginx force-reload, 不是 service nginx reload, 据测试, reload 并不会重新加载证书, 所以用的 force-reload
done