七牛云下载证书脚本

285 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第15天 点击查看活动详情

前言

昨天分析了七牛云申请证书,填写信息,验证证书状态的接口,使用Python脚本模拟了其中的功能,今天就来分析下载证书的接口。

接口分析

接着昨天验证的例子,确认一下当检测结果为域名所有权验证通过时,订单状态为待确认image.png

此时https://portal.qiniu.com/api/certificate/v1/sslorder这个接口certID字段还是为空,再等待几分钟后,订单状态为待审核,此时certID字段仍旧为空

image.png

接着不断请求这个查询接口,知道certID不为空的时候证明证书可以下载了,一般等待5到10分钟就可以了,最长半个小时

image.png 此时的订单状态为已签发,点击查看,接着点击下载证书

image.png

输入密码,证书格式为默认的就行。 image.png 我自己手动输入了一个1,再看看控制台,直接的一个get请求,有两个参数一眼明了,证书ID和密码

image.png

代码模拟

接着就是使用代码模拟这个请求了,自己测试了一下,放在浏览器直接请求不行,这里还是需要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')  # 删掉压缩包

这样操作会删掉压缩包,留下压缩后的文件夹,如下所示:

image.png

密钥读取

非常简单,直接亮代码:

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。