Python 自动申请 SSL 证书
'''
项目地址: https://github.com/kshcherban/acme-nginx
安装: pip3 install acme-nginx
DNS API 支持: DigitalOcean DNS、Cloudflare和 AWS Route53。
sudo acme-nginx \
-k /path/to/account.key \
--domain-private-key /path/to/domain.key \
--virtual-host /etc/nginx/sites-enabled/customvhost \
-o /path/to/signed_certificate.pem \
-d example.com -d www.example.com
详细信息:参考项目
'''
import os
import subprocess
ACCOUNT_KEY = "/path/account.key" # 申请证书之前的私钥,可选,不重要
VIRTUAL_CONF = "/path/domain.conf" # 申请配置文件,申请下来会清空文件,可选,不重要
DOMAINS = ['1.com'] # 申请证书的域名
CERT_KEY = "/path/to/domain_key.pem" # 申请证书下来的 key
CERT_CERT = "/paht/to/domain_cert.pem" # 申请证书下来的 cert
def ApplySSL(**kwargs):
domainConf = kwargs['VIRTUAL_CONF']
accountKey = kwargs['ACCOUNT_KEY']
certKey = kwargs['certKey']
certCert = kwargs['CERT_CERT']
domainString = kwargs['DOMAINS']
ACME_NGINX_CMD = "acme-nginx \
--virtual-host {domainConf} \
-k {accountKey} \
--domain-private-key {certKey} \
-o {certCert} \
-d {domainString} \
--no-reload-nginx \
"
cmd = ACME_NGINX_CMD.format(domainConf=domainConf, accountKey=accountKey, certKey=certKey, certCert=certCert, domainString=domainString)
status, output = commands.getstatusoutput(cmd)
if int(status) != 0 or not os.path.exists(certKey) or not os.path.exists(certCert):
return False
return True
kwargs = {
'ACCOUNT_KEY': ACCOUNT_KEY,
'VIRTUAL_CONF': VIRTUAL_CONF,
'DOMAINS': " -d ".join(DOMAINS),
'CERT_KEY': CERT_KEY,
'CERT_CERT': CERT_CERT
}
ApplySSL(**kwargs)
Last updated