【问题标题】:How to read an untrusted certificate to extract informations using Python?如何读取不受信任的证书以使用 Python 提取信息?
【发布时间】:2014-04-21 04:57:15
【问题描述】:

我知道可以使用 OpenSSL 或 M2Crypto 读取 Python 中的证书,正如 How can I retrieve the TLS/SSL peer certificate of a remote host using python? 中的详细说明,但我希望能够使用不受信任的证书来做同样的事情。

不信任是指我(例如)刚刚生成的证书并将 csr 输出粘贴到我的 python 函数中。

这是我生成 csr 的方式:

openssl req -new -newkey rsa:2048 -nodes -keyout domain.key -out domain.csr

并将 domain.csr 的输出用于 S.O. 中的代码。之前的问题。

正如预期的那样,这不起作用。为了更快,使用 Openssl 执行相同操作会导致相同的错误:

openssl x509 -text -in Domain.csr -noout

无法加载证书 139698977908608:error:0906D06C:PEM 例程:PEM_read_bio:no start >line:pem_lib.c:703:Expecting: TRUSTED CERTIFICATE

期待:可信证书是这里的关键问题。

我该怎么办?

感谢您的帮助!

更新:通过搜索更多内容,我了解到如果 PRIVATE KEY 在此 SO 答案 https://stackoverflow.com/a/12312994/330867 的证书(又名 pem)内,这将起作用,但我正在尝试实施是一个可以从我以外的其他人的证书中提取信息的系统。而且我很确定“其他人”不想分享他们的私钥,所以我仍然卡住了。有什么想法吗?

更新 2: x509 和 req 证书之间似乎存在差异。如前所述,之前使用该命令生成的是一个 req。

所以现在我可以通过第一个 SO 链接读取 x509 证书,但是如何在 python 中读取 req 证书?

【问题讨论】:

    标签: python ssl certificate


    【解决方案1】:

    好的,我找到了答案,我相信它会对其他人有所帮助!

    因此,“req”证书和 x509 证书之间有一个重要区别!

    在 x509 中,私钥也包含在文件中!

    因此,在下文中,我将展示如何使用 REQ 和 x509 类型的证书生成证书并在 Python 中读取它。

    使用“req”证书:

    生成它:

    openssl req -new -newkey rsa:2048 -nodes -keyout domain.key -out domain.csr
    

    然后阅读它:

    import OpenSSL
    # cert contains the content of domain.csr
    OpenSSL.crypto.load_certificate_request(OpenSSL.crypto.FILETYPE_PEM, cert).get_subject().get_components()
    

    使用“x509”证书:

    生成它:

    openssl req -new -x509 -days 365 -nodes -out cert.pem -keyout cert.pem
    

    然后阅读它:

    import OpenSSL
    # cert contains the content of cert.pem
    OpenSSL.crypto.load_certificate(OpenSSL.crypto.FILETYPE_PEM, cert).get_subject().get_components()
    

    就是这样!

    不同之处在于您在OpenSSL.crypto 中加载证书的方式:

    • 对于“请求”:load_certificate_request()
    • 对于“x509”:load_certificate()

    就这么简单;)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-02
      • 1970-01-01
      • 2012-07-05
      • 2017-06-26
      • 1970-01-01
      • 1970-01-01
      • 2019-03-21
      • 1970-01-01
      相关资源
      最近更新 更多