certbot生成证书,配置nginx,利用脚本自动续期

踩了大量坑,做下记录。以下适用于博主本人,但是未必会适用于所有人

单域名与泛域名证书生成

sudo certbot certonly --standalone --email '邮箱' -d '域名'

# 单域名
certbot certonly --preferred-challenges dns --manual  -d *.baidu.com(修改这里) --server https://acme-v02.api.letsencrypt.org/directory

# 泛域名 手动模式
certbot certonly --dns-cloudflare --dns-cloudflare-credentials /etc/letsencrypt/cloudflare.ini -d *.baidu.com(修改这里)

# 泛域名 自动 不想手动配置DNS用这个,配置看下面的续费脚本部分

nginx配置SSL


	    server {
	        listen 80;
	        server_name 对应的域名;
	        return 301 https://$server_name$request_uri; #强制ssl
	        location / {
				#项目地址+端口,可以本地,也可以外地
	            proxy_pass http://localhost:8080;
	        }
	
	    }
    	
    	# 443 ssl
		server {
		        listen       443 ssl;
		        server_name  对应的域名;
		
				#更改下方的证书路径
		        ssl_certificate       /etc/letsencrypt/live/baidu.com/fullchain.pem;
		        ssl_certificate_key  /etc/letsencrypt/live/baidu.com/privkey.pem;
		
		        ssl_session_cache    shared:SSL:10m; #这里可能要与其他的保持一致?
		        ssl_session_timeout  5m;
		
		        ssl_ciphers  HIGH:!aNULL:!MD5;
		        ssl_prefer_server_ciphers  on;
		
		        location / {

					#项目地址+端口,可以本地,也可以外地
		            proxy_pass http://localhost:8080;
		        }
		
		}

自动续期脚本

  在生成泛域名证书时,我们需要手动在DNS解析中配置TXT,然而续费命令renew无法去完成我们手动配置TXT的过程,需要我们手动配置,所以会报错。

  我们需要用到一个DNS插件,这样我们就不需要配置TXT了,可以直接生成证书或者续费,也可以尝试把下面命令中的厂商改成你的厂商。

DNS-plugins

  在上面链接中找到自己的服务商,我用的是cloudflare。注意:如果是国内的厂商,去GitHub上找脚本。


snap install certbot-dns-cloudflare # 我用这个没有用,我用的下面的pip安装方法

pip install certbot
pip install certbot-dns-cloudflare #注意pip与python环境的对应

  这个地方遇到了问题,很久才解决,因为我是双python环境,但是排除很久不知道哪里冲突了,干脆直接删了python3,在重新安装pip,让他变成python2的pip


certbot plugins #查看安装的插件

API Key在“My Profile”–>“API Tokens”

# 创建配置文件
touch /etc/letsencrypt/cloudflare.ini 

# 修改配置文件
vim /etc/letsencrypt/cloudflare.ini

# 添加如下内容,别忘记修改
# Cloudflare API credentials used by Certbot
dns_cloudflare_email = [email protected]
dns_cloudflare_api_key = 0123456789abcdef0123456789abcdef01234567

# 修改文件权限
chmod 600 /etc/letsencrypt/cloudflare.ini

接下来可以执行生成证书或者续费证书的操作了

修改续费配置文件(手动生成的证书才需要修改)

  如果我们使用的是手动配置的泛解析,那么我们无法直接执行renew,即使已经配置了DNS插件。
进入 /etc/letsencrypt/renewal 目录,找到续费配置文件,找到如下配置:

certbot生成证书,配置nginx,利用脚本自动续期_第1张图片
  可以看到,配置文件是手动方式,我们需要手动改成DNS方式(如果前面用的是DNS自动方式生成的证书,就没有这方面烦恼了)

  按照如下的配置进行修改:

# Options used in the renewal process
[renewalparams]
authenticator = dns-cloudflare
account = 71e9f9688487336cb4851b7174d327c6
dns_cloudflare_credentials = /etc/letsencrypt/cloudflare.ini
server = https://acme-v02.api.letsencrypt.org/directory

  如果不想修改配置,也可以重新执行上面的安装证书第三条配置命令。


certbot renew  #证书续期
certbot renew --force-renewal #强制更新 无视30天


--pre-hook:更新证书之前调用
--post-hook:更新证书之后调用
--deploy-hook:成功更新证书之后调用

# 创建一个shell脚本,内容如下:

certbot renew  --deploy-hook "nginx -s reload"

chmod +x certrenew.sh  #  赋予执行权限

# 编写cron定时任务
crontab -e

# 输入如下内容
0 0 1 * * /shell/certrenew.sh >> /shell/certrenew.log 2>&1

# 重启服务器
service crond restart

# 查看任务
crontab -l


无需续期
certbot生成证书,配置nginx,利用脚本自动续期_第2张图片

续费成功
certbot生成证书,配置nginx,利用脚本自动续期_第3张图片
申请成功
certbot生成证书,配置nginx,利用脚本自动续期_第4张图片

其他报错

 [Errno 17] 错误

尝试运行 certbot update_symlinks

cloudflare已经取消了对例如:ml,ga,tk等一些免费域名的续期。

不过,申请不受影响,强制续期也不受影响。

你可能感兴趣的:(开发实战,nginx,ssl,https,证书,续期脚本)