TypeCodes

Python脚本上传博客自定义的SSL证书到七牛云

博客图片域名(cnd.typecodes.com)的SSL证书是通过Let's Encrypt申请的,因为证书有效期为3个月,所以需要用脚本定时去重新申请。

重新申请证书主要步骤为:

1、源主机上创建crontab定时任务;
2、先把图片域名DNS解析到源主机上,重新申请Let's Encrypt证书;
3、把申请到的SSL证书上传到七牛云的证书管理平台并启用;
4、把图片域名DNS重新解析到七牛云上;
5、最后重启源主机的Nginx服务。

上篇文章中使用Python脚本来切换DNS的解析,也就是实现了上面的2、4步骤;这篇文章主要是用Python脚本来上传SSL证书到七牛云上,也就是实现上面的步骤3。

1 七牛云存储相关

和前文中操作阿里云DNS的Python脚本一样,我们也需要在七牛创建一个API相关的AccessKey和SecretKey

七牛云开放的API接口对应的SDK库已经在GitHub了,对应python版本的地址是: https://github.com/qiniu/python-sdk/releases

2 要实现的功能

要实现的功能也就是上面说的步骤3:上传SSL证书到七牛云存储并启用。

所有已上传的自定义SSL证书都会在七牛云存储SSL证书服务上展示出来,如下图所示:

七牛云存储自定义的SSL证书

3 实现程序

根据七牛云存储的SDK python版本的说明,用下面这个Python脚本实现上面的需求。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#!/usr/bin/python
# -*- coding: UTF-8 -*-

# FileName:      qiniu_letssl.py
# (c) 2019.6.23 vfhky https://typecodes.com/python/qiniuletssl1.html
# https://github.com/vfhky/shell-tools/blob/master/filehandle/qiniu_letssl.py
# 脚本功能:上传从Let's Encrypt申请的 cdn.typecodes.com 的SSL证书到七牛云存储并启用。
# 使用方法: python qiniu_letssl.py
#
# 必须安装的核心包:             pip install qiniu

import qiniu
from qiniu import DomainManager
import os
import time

# 七牛云API相关的AccessKey和SecretKey.
# access_key = os.getenv('ACCESS_KEY', '')
access_key = "ac_key"
secret_key = "se_key"
# 操作的域名
domain_name = "cdn.typecodes.com"

auth = qiniu.Auth(access_key=access_key, secret_key=secret_key)
domain_manager = DomainManager(auth)

# Let's Encrypt申请的证书公钥和私钥文件所在的目录.
privatekey = "/etc/letsencrypt/live/{}/privkey.pem".format(domain_name)
ca = "/etc/letsencrypt/live/{}/fullchain.pem".format(domain_name)

with open(privatekey, 'r') as f:
    privatekey_str = f.read()

with open(ca, 'r') as f:
    ca_str = f.read()

ret, info = domain_manager.create_sslcert("{}/{}".format(domain_name, time.strftime("%Y%m%d_%M%S", time.localtime())),
                                        domain_name, privatekey_str, ca_str)
print(ret['certID'])

if domain_name.startswith("*"):
    domain_name = domain_name[1:]
ret, info = domain_manager.put_httpsconf(domain_name, ret['certID'], False)
print(info)

4 执行效果

执行python qiniu_letssl.py就会把Let's Encrypt申请的SSL证书公私钥文件上传到七牛云存储。从下面的效果可以看出目前博客用的证书文件命令就是cdn.typecodes.com/20190530_2840

启用自定义的SSL证书

5 脚本管理

目前已经把这个脚本放在Github了,地址是https://github.com/vfhky/shell-tools,以后脚本的更新或者更多好用的脚本也都会加入到这个工程中。

打赏支持

Comments »