携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第15天 点击查看活动详情
前言
昨天分析了七牛云申请证书,填写信息,验证证书状态的接口,使用Python脚本模拟了其中的功能,今天就来分析下载证书的接口。
接口分析
接着昨天验证的例子,确认一下当检测结果为域名所有权验证通过时,订单状态为待确认。
、
此时https://portal.qiniu.com/api/certificate/v1/sslorder这个接口certID字段还是为空,再等待几分钟后,订单状态为待审核,此时certID字段仍旧为空
接着不断请求这个查询接口,知道certID不为空的时候证明证书可以下载了,一般等待5到10分钟就可以了,最长半个小时
此时的订单状态为
已签发,点击查看,接着点击下载证书
输入密码,证书格式为默认的就行。
我自己手动输入了一个
1,再看看控制台,直接的一个get请求,有两个参数一眼明了,证书ID和密码
代码模拟
接着就是使用代码模拟这个请求了,自己测试了一下,放在浏览器直接请求不行,这里还是需要cookie验证,代码是这样:
def download_data(cookie,cert_id,pwd):
url = 'https://portal.qiniu.com/api/certificate/v1/ssl/download?certid=' + cert_id + '&type=PEM_Nginx&key_store_pwd=' + pwd
response = requests.get(url, headers=headers,cookies=cookie)
save_path = os.getcwd()+'/'+cert_id+'.zip'
with open(save_path, 'ab') as f:
f.write(response.content)
f.flush()
print(save_path+" 下载完成!")
此时统计目录下就会有一个证书ID为名的zip文件,现在就把它通过代码解压,需要用到zipfile这个包:
...
import zipfile
...
def decode_package(cert_id,pwd):
unzip_path = os.getcwd()+'\'+cert_id
zip_file = zipfile.ZipFile(os.getcwd()+'\'+cert_id+'\.zip')
if not os.path.exists(unzip_path):
os.makedirs(unzip_path)
zip_list = zip_file.namelist() # 得到压缩包里所有文件
for i in zip_list:
zip_file.extract(i, unzip_path, '1'.encode('utf-8')) # 解压到的目标文件夹
zip_file.close()
os.remove(os.getcwd()+'\'+cert_id+'\.zip') # 删掉压缩包
这样操作会删掉压缩包,留下压缩后的文件夹,如下所示:
密钥读取
非常简单,直接亮代码:
def read_file(domain,cet_id):
with open(os.getcwd()+'\'+cet_id+'\'+domain+'.crt','r') as f1:
print(f1.read())
with open(os.getcwd()+'\'+cet_id + '\' + domain + '.crt', 'r') as f2:
print(f2.read())
总结
今天只分析了一个接口,非常简单,然后使用Python 解压了一个带密码的压缩文件,较为冷门,后面可以把密钥读出来直接填入到自己需要的地方非常完美,我自己是使用Git上传到代码仓库的,明天就测试一下使用Python 操作Git。