【问题标题】:How to get public key using PyOpenSSL?如何使用 PyOpenSSL 获取公钥?
【发布时间】:2012-05-08 22:18:49
【问题描述】:

我正在尝试创建 python 脚本,它将采用 PKCS#12 包并打印 x509 证书中包含的一些信息,并用于此目的 PyOpenSSL 模块。到目前为止,我想从证书公钥中获取。但是 PKey 对象没有合适的方法。我可以从哪里搬出去?任何想法如何获得公钥?

pfx=open('./1.p12','rb').read()
PKCS=crypto.load_pkcs12(pfx)
cert=PKCS.get_certificate()
PKey=cert.get_pubkey()

print PKey
<OpenSSL.crypto.PKey object at 0x012432D8>

谢谢。

【问题讨论】:

  • 等等,您似乎已经在使用get_pubkey 方法来获取公钥。什么不工作?
  • 您似乎正在使用pyOpenSSL,并且您似乎不接受与使用dump_privatekey 相关的答案,该答案适用于没有任何附加参数的RSA 公钥。鉴于他描述的问题,我只能得出您试图询问查看任何/所有密钥类型而不事先知道密码或密码的问题 - 这根本不可能。您要么通过提供适当的输入来知道要生成什么,要么天真地猜测或暴力破解您正在寻找的结果 - 很抱歉,但这是事实

标签: python x509 public-key


【解决方案1】:

我假设你想从文件中读取公钥。

首先安装pyopenssl

pip install pyopenssl

from OpenSSL import crypto
import os

   file_path = os.path.join(os.getcwd(),'/certificates/test.crt')
   f = open(file_path, "r")
   cert = f.read()
   pub_key_obj = crypto.load_certificate(crypto.FILETYPE_PEM, cert).get_pubkey()
   pub_key = crypto.dump_publickey(crypto.FILETYPE_PEM,pub_key_obj)
   print(pub_key)

你会得到如下输出:

-----开始公钥-----

....

-----结束公钥-----

【讨论】:

    【解决方案2】:

    首先你可以像这样加载证书

    from OpenSSL import crypto
    
    #cert is the encrypted certificate int this format -----BEGIN -----END    
    crtObj = crypto.load_certificate(crypto.FILETYPE_PEM, cert)
    pubKeyObject = crtObj.get_pubkey()
    pubKeyString = crypto.dump_publickey(crypto.FILETYPE_PEM,pubKeyObject)
    print pubKeyString
    

    你会看到类似的东西

    -----BEGIN PUBLIC KEY----- 
    ....
    ....
    -----END PUBLIC KEY-----
    

    【讨论】:

    • 我收到initializer for ctype 'char' must be a bytes of length 1, not int
    【解决方案3】:

    改为使用:

    c.dump_privatekey(c.FILETYPE_TEXT,pubkey)
    

    【讨论】:

      【解决方案4】:

      这行得通吗?

      print PKey
      <OpenSSL.crypto.PKey object at 0x012432D8>
      
      from OpenSSL import crypto
      
      crypto.dump_privatekey(PKey)
      

      【讨论】:

        猜你喜欢
        • 2013-02-06
        • 2017-10-14
        • 2012-11-30
        • 1970-01-01
        • 2014-02-16
        • 1970-01-01
        • 1970-01-01
        • 2017-04-02
        • 2012-01-02
        相关资源
        最近更新 更多