用于mitm代理的简单证书颁发机构

certauth的Python项目详细描述


证书颁发机构证书生成工具

https://travis-ci.org/ikreymer/certauth.svg?branch=masterhttps://coveralls.io/repos/ikreymer/certauth/badge.svg?branch=master

这个包提供了一个小库,构建在pyOpenSSL之上,它允许创建自定义证书颁发机构证书, 并使用该ca证书生成按需动态主机证书。

它最适合与中间人https代理一起使用,例如,用于录制或重播web内容。

在受控制的设置中,应谨慎使用此工具创建的ca,以避免安全风险。

认证机构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个证书。

然后,certkey可以与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代理包装。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
图像处理Java 8 ImageIO在Linux中无法正确读取JPEG   spring如何用Java 1.4兼容版本替换@Resource注释   java Http请求参数类型传播   在web浏览器中看不到Java Maven Tomcatplugin web应用程序   jvm在Java中使用直接内存的目的是什么?   如何从列表转换为字符串java   java setAdapter gridview发送上下文   SwingJava。方法上的lang.NullPointerException   java什么是shell脚本、makefile和ant文件   当使用getGraphics()方法时,java JPanel图形会闪烁   java如何将迭代转换为递归?   java为什么我的抽屉菜单在同一个XML上有ConstraintLayout时没有响应?   java如何在图像上画一个圆?   Android studio:Rabbitmq:Error:java。lang.ClassNotFoundException:类io。千分尺。果心仪器找不到仪表注册表