upyun 没提供 https 证书更新的 API 不如自己写一个(以及日志下载)

2020-01-16 10:20:18 +08:00
 cy97cool

https://github.com/zjuchenyuan/EasyLogin/blob/master/examples/upyun/upyun.py

基于我的 EasyLogin 写的,其实就是封装了一下 requests 和 Beautifulsoup,提供了 cookie 保存和内容缓存机制

这个 upyun.py 会登录 console.upyun.com ,提供规则刷新和 https 证书更新功能,用法如

# 这里的 @会被替换成*, 刷新 https://py3.io/*.html 的缓存
python3 upyun.py purge https://py3.io/@.html

# 查看所有证书,只显示当前正在使用的自有证书+正在使用的已经过期的证书
python3 upyun.py https list

# 更新所有 30 天之内过期的证书
python3 upyun.py https renew

更新证书除了需要在 config.py 中提供登录的USERNAMEPASSWORD之外,还需要提供一个 api_func(domain_name)函数,这个函数需要返回证书信息

 {"certificate":"-----BEGIN CERTIFICATE-----\n...", 
  "private_key":"-----BEGIN RSA PRIVATE KEY-----\n..."}

我是使用函数计算用 dns 验证自动更新证书: https://py3.io/Nginx/#https_1

这个函数就是这个样子:(注意到传入的域名可能是子域名 需要判断后缀)

def renew_api(domain):
    namedict = {
      'py3.io': 'py3io_ATxx', 
    }
    for k, v in namedict.items():
        if domain.endswith(k):
            return get_from_oss(v)
    return False

import requests
sess = requests.session()
def get_from_oss(name):
    crt = sess.get("https://OSSNAME.oss-cn-REGION.aliyuncs.com/{name}.crt".format(name=name), headers={"Referer":"Referer_STRING"})
    key = sess.get("https://OSSNAME.oss-cn-REGION.aliyuncs.com/{name}.key".format(name=name), headers={"Referer":"Referer_STRING"})
    return {"certificate": crt.text, "private_key": key.text}

另外 upyun 真的会在 30 天删访问日志,然而法律要求至少保留六个月┑( ̄Д  ̄)┍ 所以需要自己下载日志咯: https://github.com/zjuchenyuan/EasyLogin/blob/master/examples/upyun/downloadlogs.py

config.py 读取 mydomains,调用 upyun 提供的 openapi 获取日志并下载

976 次点击
所在节点    CDN
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/638341

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX