异想之旅:本人原创博客完全手敲,绝对非搬运,全网不可能有重复;本人无团队,仅为技术爱好者进行分享,所有内容不牵扯广告。本人所有文章仅在CSDN、掘金和个人博客(一定是异想之旅域名)发布,除此之外全部是盗文!
本文适用对象:要求证书更新后自动化部署(除了IIS之外的服务器软件)、能接受一定成本(19元)的个人开发者
去年3月网站使用SSL证书先是使用的腾讯云免费证书。这个证书虽然有一年的有效期,但是免费版只支持单域名,对我这样做了许多小微服务站点的开发者就很不友好了。于是我在知乎上找到了来此加密(https://letsencrypt.osfipin.com/)。
这是一个基于Let’s Encrypt项目的封装,选择它主要是由于它简单、一劳永逸的验证方式和API的支持,方便我们部署到自己的服务器。
如果你的需求是上传到阿里云等云服务商的SSL证书管理,不需要本地部署,可以考虑OHTTPS(https://ohttps.com/),操作更加方便,成本接近。
我们首先注册账号,然后点击左上角的三条横杠,获取积分,充值一定金额保证账户余额达到200积分,再点击积分兑换兑换VIP。紧接着去申请证书,如果你已经可以使用自动验证那么最好,没有的话也没关系,先稍微麻烦一下配几次DNS验证,申请完后可以更改为自动验证。
关于自动重申:如果你有钱去自动重申自然是更好的(也不贵,更新一次一块钱),但是本文接下来的方法如果仅使用自动验证也是可以的,只是需要你每次更新时上网站来点两下按钮罢了。
按照上述操作后应该会看到这样子的界面:
我们先手动部署一次证书,然后再记住给出的自动验证ID,接着就可以上代码了!
代码很简单,且相比官方给出的脚本可扩展性更强、同时兼容Linux和Windows。需要改的都在开头,该讲到的在注释说明了。
每次过期前13天起,程序会每12小时拉取一次证书,直到证书有效期变长(也就是已经在官网重新申请了的)。
API KEY获取:点击来此加密网页左上角三个杠,API接口,创建一个KEY
##### User Info #####
email = "mail@yixiangzhilv.com" # 来此加密注册邮箱
key = "APIKEY" # 你的API KEY
cids = ["29dwnz"] # 每个需要更新证书的自动验证ID
crt_files = ["E:/Desktop/fullchain.crt"] # 需要更新的证书文件的本地路径(顺序对应cid)
crt_key_files = ["E:/Desktop/private.pem"] # 证书密钥文件(顺序对应cid)
reload_shell = ["nginx -s reload"] # 更新证书后需执行的命令
##### End User Info #####
import os
import shutil
import time
import requests as rq
import zipfile
# 构建API请求参数
head = {
"Authorization": "Bearer %s:%s" % (key, email)}
url = "https://api.osfipin.com/letsencrypt/api/order/down?type=auto&day&id="
# 从下载的文件取fullchain.crt和private.pem
crt_file_name = "fullchain.crt"
crt_key_file_name = "private.pem"
def unzip(file_name):
# 解压zip文件
zip_file = zipfile.ZipFile(file_name)
if os.path.isdir(file_name + "_files"):
pass
else:
os.mkdir(file_name + "_files")
for names in zip_file.namelist():
zip_file.extract(names, file_name + "_files/")
zip_file.close()
return file_name + "_files"
def ftime():
# 获取格式化的时间显示
return time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
def get_etime(file):
# 检查crt文件的有效期,返回GMT格式