免费ssl 证书和七牛云cdn 证书自动更新(acme.sh+脚本方式)

发布于 11 小时前  6 次阅读


以前有配置过acme.sh 配置也比较方便,后面由于图片使用七牛的oss也使用了,配置oss的ssl证书,也就是cdn的ssl. 使用的都是90天的证书,当时使用了httpsok.com平台,但是后面发现它证书是有额度限制,想要你付费,充钱是不可能的,就有的下面的文章

配置acme.sh 定时更新证书

1. 安装 acme.sh

如果尚未安装 acme.sh,切换到常用安装目录下通过以下命令安装,并加载环境变量和系统配置::

cd /opt/
git clone https://gitee.com/neilpang/acme.sh.git
cd acme.sh
./acme.sh --install -m your_email@example.com
source ~/.bashrc

2. 获取阿里云 DNS API 密钥

我用的是阿里云,腾讯云的方法也是一样的,就创建一个用户,指定只有创建dns的权限,然后获取ak sk 就行了。
这里就有描述了,自行百度

3. 配置阿里云 AK SK

上一步获取到的 AccessKey ID 和 AccessKey Secret API 秘钥,配置到 acme.sh 中:

cd /opt/acme.sh/ 
vim acme.sh  
export Ali_Key="your_aliyun_access_key"
export Ali_Secret="your_aliyun_access_secret"

4. 申请 SSL 证书并自动续期

file
我nginx 里面之前已经配置好了证书位置以及配置,我下发时候写相同文件名和路径就可以了。
申请证书

acme.sh --issue --dns dns_ali -d blog.buwo.ne

acme.sh --install-cert -d blog.buwo.net \
  --keypath /etc/nginx/conf.d/ssl/all.buwo.net.key \
  --fullchainpath /etc/nginx/conf.d/ssl/all.buwo.net.pem \
  --reloadcmd "systemctl reload nginx"

5.自动设置定时任务,定期检查并更新证书,无需手动操作。

crontab -e
36 1 * * * "/opt/acme.sh"/acme.sh --cron --home "/opt/acme.sh" > /dev/null

6. acme常用命令

##查看证书列表:
acme.sh --list

##查看证书信息:
acme.sh --info -d example.com

##手动续期证书:
acme.sh --renew -d example.com

##删除证书
acme.sh --remove -d example.com

file

七牛cdn自动配置证书

需要使用pip3 安装qiniu 模块
cat update_qiniucdn.py

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from qiniu import Auth
import os
import sys
import requests
import datetime

# cert_domain = '替换你的七牛云域名,参照下面的示例'
cert_domain = 'static.blog.buwo.net'
# ak sk 信息 替换你的七牛云aksk 
access_key = 'XXXXXXX4JvaA6K-WlEKL3L1LTOuGMufiAonp_'
secret_key = '_KWnQ07ZBH9RYzgW7XXXXXXXXXXXXXXXX'

print('CERT_DOMAIN: ' + cert_domain)
print('QINIU_ACCESS_KEY: ' + access_key)
print('QINIU_SECRET_KEY: ' + secret_key)

# 构建七牛鉴权对象
auth = Auth(access_key, secret_key)

# 上传证书
## 上传 api 地址 这里是七牛的
sslcertUploadUrl = 'http://api.qiniu.com/sslcert'
## 生成 上传证书 api accesstoken
sslcert_accesstoken = auth.token_of_request(sslcertUploadUrl)
print('上传证书 api accesstoken: ' + sslcert_accesstoken)

## 证书信息 
sslcertFolder = '/etc/nginx/conf.d/ssl/'
sslcertPriFile = open(sslcertFolder + '/static.blog.buwo.net.key')
sslcertChainFile = open(sslcertFolder + '/static.blog.buwo.net.pem')
sslcertPriStr = sslcertPriFile.read()
sslcertChainStr = sslcertChainFile.read()
nowDate = datetime.date.today().strftime("%Y%m%d")
sslcertData = {
    'name': cert_domain + '-letsencrypt-' + nowDate,
    'common_name': cert_domain,
    'pri': sslcertPriStr,
    'ca': sslcertChainStr
}
sslcertHeaders = {
    'Authorization': 'QBox ' + sslcert_accesstoken,
    'Content-Type': 'application/json'
}
print('证书JSON数据如下:')
print(sslcertData)
## 执行请求
sslcertUploadResponse = requests.post(sslcertUploadUrl, json=sslcertData, headers=sslcertHeaders).json()
print(sslcertUploadResponse)
certID = sslcertUploadResponse['certID']
if certID is None:
    print('证书上传失败!')
    sys.exit()

# 修改 cdn 证书
## 修改证书 api 地址
cdnHttpsconfUrl = 'http://api.qiniu.com/domain/{}/httpsconf'.format(cert_domain)
## 生成 cdn 修改证书 api accesstoken
cdn_httpsconf_accesstoken = auth.token_of_request(cdnHttpsconfUrl)
print('修改证书 api accesstoken: ' + cdn_httpsconf_accesstoken)
## 执行修改请求
httpsconfData = {
    'certId': certID,
    'forceHttps': False,
    'http2Enable': True
}
httpsconfHeaders = {
    'Authorization': 'QBox ' + cdn_httpsconf_accesstoken,
    'Content-Type': 'application/json'
}
httpsconfResponse = requests.put(cdnHttpsconfUrl, json=httpsconfData, headers=httpsconfHeaders).json()
print(httpsconfResponse)
print('修改七牛 CDN SSL 证书完成~')

申请cdn证书

acme.sh --issue --dns dns_ali -d cdn.rangotec.com

acme.sh --install-cert -d cdn.rangotec.com \
  --keypath /etc/nginx/conf.d/ssl/static.blog.buwo.net.key \
  --fullchainpath /etc/nginx/conf.d/ssl/static.blog.buwo.net.pem \
  --reloadcmd "/usr/bin/python3 /opt/update_qiniucdn.py"

再登录七牛云选择→CDN 查看证书的有效期就 会自动更新证书并更新七牛云的证书