认证机构API
CertificateAuthority类提供一个接口来管理根ca并生成适合的动态主机证书
用于本机pythonssl库以及pyopensslSSL模块。
该类提供了几个用于存储根ca和生成的主机ca的选项。
基于文件的证书缓存
ca=CertificateAuthority('My Custom CA','my-ca.pem',cert_cache='/tmp/certs')filename=ca.cert_for_host('example.com')
在此配置中,根ca存储在my-ca.pem中并动态生成证书
放在/tmp/certs中。在本例中,返回的filename将是/tmp/certs/example.com.pem。
然后可以将此文件名与pythonssl.load_cert_chain(certfile)命令一起使用。
请注意,certauth永远不会删除动态创建的证书,如果需要的话,仍由用户偶尔处理清除操作。
内存中证书缓存
ca=CertificateAuthority('My Custom CA','my-ca.pem',cert_cache=50)cert,key=ca.load_cert('example.com')
此配置将根ca存储在my-ca.pem,但对动态创建的证书使用内存中的证书缓存。
这些证书存储在lru缓存中,配置为最多保留50个证书。
然后,cert和key可以与OpenSSL.SSL.Context.use_certificate一起使用
context=SSl.Context(...)context.use_privatekey(key)context.use_certificate(cert)
自定义缓存
还可以提供存储和检索每个主机证书的自定义缓存实现:
ca=CertificateAuthority('My Custom CA','my-ca.pem',cert_cache=CustomCache())cert,key=ca.load_cert('example.com')classCustomCache:def__setitem__(self,host,cert_string):# store cert_string for hostdefget(self,host):# return cached cert_string, if availablecert_string=...returncert_string
通配符证书
为了减少生成的证书数量,可以方便地生成通配符证书。
cert,key=ca.load_cert('example.com',wildcard=True)
这将为*.example.com生成证书。
要自动为父域生成通配符证书,请使用:
cert,key=ca.load_cert('test.example.com',wildcard=True,wildcard_for_parent=True)
这也将为*.example.com
生成证书
从1.3.0开始,certauth使用tldextract来确定给定主机的tld,
如果父域本身是一个tld后缀,则不会使用它。
例如,呼叫:
cert,key=ca.load_cert('example.co.uk',wildcard=True,wildcard_for_parent=True)
现在将生成*.example.co.uk的证书,而不是*.co.uk。
cli用法示例
certauth还包括一个用于创建和管理证书的简单命令行api。
usage: certauth [-h] [-c CERTNAME] [-n HOSTNAME] [-d CERTS_DIR] [-f] [-w]
root_ca_cert
positional arguments:
root_ca_cert Path to existing or new root CA file
optional arguments:
-h, --help show this help message and exit
-c CERTNAME, --certname CERTNAME
Name for root certificate
-n HOSTNAME, --hostname HOSTNAME
Hostname certificate to create
-d CERTS_DIR, --certs-dir CERTS_DIR
Directory for host certificates
-f, --force Overwrite certificates if they already exist
-w, --wildcard_cert add wildcard SAN to host: *.<host>, <host>
创建新的根CA证书:
certauth myrootca.pem --certname "My Test CA"
在目录certs_dir:
certauth myrootca.pem --hostname "example.com" -d ./certs_dir
如果根证书不存在,它将自动创建。
如果^ {TT21}$不存在,它也会自动创建。
example.com的证书将创建为certs_dir/example.com.pem。
如果它已经存在,它将不会被覆盖(除非使用{TT26}$选项)。
-w选项可用于创建一个通配符证书,该证书具有example.com和*.example.com
历史记录
certificateauthority功能已经从nadeem douba最初在中间人代理pymiproxy中发现的证书管理演变而来。
它还被互联网档案馆的Noah Levitt扩展到warcprox。
ca功能也在pywb中重用,并最终分解到这个单独的模块化包中。
它现在也被wsgiprox用来为任何wsgi应用程序提供通用的https代理包装。