9

嗨,我要为 MitmProxy 应用程序生成根证书,它在家庭位置存在 4 个 cer

mitmproxy-ca.pem PEM 格式的私钥和证书。mitmproxy-ca-cert.pem PEM 格式的证书。使用它来分发到大多数非 Windows 平台。mitmproxy-ca-cert.p12 PKCS12 格式的证书。在 Windows 上使用。mitmproxy-ca-cert.cer 与 .pem 相同的文件,但具有某些 Android 设备所需的扩展名。

目前它将证书颁发者生成为 MitmProxy 我已经搜索了基于 python 构建的源代码请帮助我希望生成自己的证书或更改源代码以便生成其他颁发者

抱歉英语不好 //Sm(9)

4

5 回答 5

7

您可以将自己的证书与 mitmproxy 的 --cert 选项一起使用。

> openssl genrsa -out ca.key 2048
> openssl req -new -x509 -key ca.key -out ca.crt

   ... No need to fill out optional fields ...
   Common Name (eg, YOUR name) []:*.google.com  (domain you want to MITM here)
   ...

> cat ca.key ca.crt > ca.pem 
> mitmproxy --cert=ca.pem
于 2013-05-24T03:23:58.317 回答
3

mitmproxy将证书存储在~/.mitmproxy. 我有这些文件:

mitmproxy-ca-cert.cer
mitmproxy-ca-cert.p12
mitmproxy-ca-cert.pem
mitmproxy-ca.pem
mitmproxy-dhparam.pem

您应该尝试更换这些。

于 2016-09-30T16:31:08.567 回答
1

我花了很长时间才弄清楚,但我仍然很惊讶我找不到任何关于此的文档。关键是看看mitmproxy 是如何创建这个文件的。

我创建了自己的简化版他们的技术。这是您mitmproxy-ca.pem使用 python 生成自己的自定义文件的方式:

import datetime

from cryptography import x509
from cryptography.hazmat.primitives import hashes, serialization
from cryptography.hazmat.primitives.asymmetric import rsa
from cryptography.x509 import ExtendedKeyUsageOID, NameOID

KEY_SIZE = 2048
CA_EXPIRY = datetime.timedelta(days=10 * 365)

ORGANIZATION = "anything"
CN = "anything"

def create_ca():
    now = datetime.datetime.now()

    private_key = rsa.generate_private_key(
        public_exponent=65537,
        key_size=KEY_SIZE,
    )
    name = x509.Name([
        x509.NameAttribute(NameOID.COMMON_NAME, CN),
        x509.NameAttribute(NameOID.ORGANIZATION_NAME, ORGANIZATION)
    ])
    builder = x509.CertificateBuilder()
    builder = builder.serial_number(x509.random_serial_number())
    builder = builder.subject_name(name)
    builder = builder.not_valid_before(now - datetime.timedelta(days=2))
    builder = builder.not_valid_after(now + CA_EXPIRY)
    builder = builder.issuer_name(name)
    builder = builder.public_key(private_key.public_key())
    builder = builder.add_extension(x509.BasicConstraints(
        ca=True, path_length=None), critical=True)
    builder = builder.add_extension(x509.ExtendedKeyUsage(
        [ExtendedKeyUsageOID.SERVER_AUTH]), critical=False)
    builder = builder.add_extension(
        x509.KeyUsage(
            digital_signature=False,
            content_commitment=False,
            key_encipherment=False,
            data_encipherment=False,
            key_agreement=False,
            key_cert_sign=True,
            crl_sign=True,
            encipher_only=False,
            decipher_only=False,
        ), critical=True)
    builder = builder.add_extension(x509.SubjectKeyIdentifier.from_public_key(
        private_key.public_key()), critical=False)
    cert = builder.sign(private_key=private_key,
                        algorithm=hashes.SHA256())
    return private_key, cert

现在您已经生成了密钥和正确配置的证书,您可以将它们组合起来并将其写入.pem文件:

key, ca = create_ca() # to run the function above
key = key.private_bytes(
    encoding=serialization.Encoding.PEM,
    format=serialization.PrivateFormat.TraditionalOpenSSL,
    encryption_algorithm=serialization.NoEncryption(),
)
ca = ca.public_bytes(serialization.Encoding.PEM)

pem_content = key+ca

with open("mitmproxy-ca.pem", "wb") as w:
    w.write(pem_content)

您应该将此mitmproxy-ca.pem文件放在一个目录中,然后使用 mitmproxy--set confdir=/certdir选项引用该目录。

您可能还希望将证书分发给客户端,以便他们可以安装它。您应该只分发证书。像这样:

key, ca = create_ca() # from earlier, do not repeat

with open("cert_to_install.pem", "wb") as w:
    w.write(ca)

需要明确的是,这是您安装在 iPhone/Android 手机或计算机上的文件。

奖励: 要验证您的mitmproxy-ca.pem文件是否可用,mitmproxy 文档建议您使用以下命令进行验证:

openssl x509 -noout -text -in mitmproxy-ca.pem

输出应包含:

X509v3 extensions:
    X509v3 Key Usage: critical
        Certificate Sign
    X509v3 Basic Constraints: critical
        CA:TRUE
于 2021-11-22T22:59:51.633 回答
0

使用自定义证书

您可以通过将 --cert 选项传递给 mitmproxy 来使用自己的证书。

证书文件应为 PEM 格式。您可以使用以下说明生成此格式的证书:

openssl genrsa -out cert.key 8192
openssl req -new -x509 -key cert.key -out cert.crt
  (Specify the mitm domain as Common Name, e.g. *.google.com)
cat cert.key cert.crt > cert.pem
mitmproxy --cert=cert.pem

有关更多详细信息,请访问 MITM 文档此答案是从中复制的

另请注意,在撰写本文时,建议使用 8192 位证书

于 2014-07-24T04:53:24.647 回答
0

自定义证书信息可以通过直接编辑 mitmproxy python 文件来实现,但你需要先找到那些脚本文件。在我的例子中,那些 mitmproxy 模块文件在/usr/local/lib/python3.8/site-packages/mitmproxy/ .

以 mitmproxy 版本 v5.3.0 为例:

要更改expiryorganizationCN,您可以在 certs.py中自定义create_store的默认参数:

@staticmethod
def create_store(path, basename, key_size, organization="some org", cn="some cn", expiry=157680000 ):
    if not os.path.exists(path):

每次要更改证书信息时,请记住首先删除证书文件。

如果您有兴趣,可以找到 mitmproxy 模块路径:
vi `which mitmproxy`

import mitmproxy
print(mitmproxy.__file__)

mitmproxy

于 2021-06-09T06:09:46.513 回答