在python中以PEM格式精确提取公钥为“Decimal”

问题描述 投票:1回答:1

我试图达到PEM公钥的十进制格式的确切点。不在Pem。

首先,我使用我的PEM证书

from socket import socket

import ssl
from OpenSSL import SSL
import string
import traceback
import json
import re

for i in file_content:
    final_list.append(i.strip())


file = open("SSL_out_put.json","w")
Temp_Priv_Key_list = [] 

counter = 1
for i in final_list[:4047]:
    print counter
    print i
    counter = counter + 1
    try:
        x = ssl.get_server_certificate((i, 443))
        Temp_Priv_Key_list.append({
            'counter' : counter,
            'i' : i,
            'x' : x
            })
        content = json.dumps(Temp_Priv_Key_list, indent=3)
        file.write(content)
        Temp_Priv_Key_list=[]
    except Exception , err:
        pass
        print Exception , err
file.close()

之后,我使用“from pyasn1_modules import pem,rfc2459”来提取publick键。这将为公钥提供二进制表示。转换十进制后我重新说这不是我想要使用的。请注意,在我的实验中,pyasc1无法正常工作。

经过大量研究后,我发现这里的代码仍以PEM格式提取公钥。

from cryptography import x509
from cryptography.hazmat.backends import default_backend

with open("cert.pem", "rb") as f:
    cert = f.read()

cert = str(cert)

x509 = OpenSSL.crypto.load_certificate(OpenSSL.crypto.FILETYPE_PEM, cert)
key_data = (OpenSSL.crypto.dump_publickey(OpenSSL.crypto.FILETYPE_PEM,x509.get_pubkey()))
print key_data

现在我仍然将我的Publick键作为Pem格式。经过一些其他的研究,我发现了这个,但只给出了这个输出仍然无法提取十进制或二进制格式的publick键。

from Crypto.PublicKey import RSA
from base64 import b64decode
from Crypto.Util import asn1

with open("public_key.pem", "rb") as f:
   cert = f.read()

#print cert

keyDER = b64decode(cert)
keyPub = RSA.importKey(keyDER)

print keyPub}

这段代码将为您提供<_RSAobj @ 0x7f65559da320 n(2048)的输出,e>

这是我的第一个问题。对不起,如果我不正确。我的大脑充满了各种各样的垃圾编码,现在无法理解。有人可以帮我解决这个问题。

我发现http://lapo.it/asn1js/我确实需要它,但我不能在python中使用它。我可以使用硒或scrapy来提取我想要的数据。但这真的会杀了我。应该有一种方法,我尝试过:

我试过这个主题的那些模块:

from pyasn1_modules import pem, rfc2459
from pyasn1.codec.der import decoder
from cryptography import x509
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives.asymmetric import rsa
#import pem
import socket, ssl
import OpenSSL

顺便问一下谁和我一起鼓励这个问题。 pycrypto在Windows上没有正常工作(虽然我安装了VCPython2.7.msi“你会知道我的意思,如果你会尝试它”)我将它切换到virtual-ubuntu。谢谢。

python encoding openssl public-key pem
1个回答
1
投票

Python ssl lib对于这个问题并不强大。所以我把整个事情改为linux终端上的OPENSSL。

timeout 3s openssl s_client -servername (site_name) -connect (site_name):443 -no_alt_chains

由于s_client支持SNI,这将为您提供PEM所提供的内容。

openssl x509 -in outer.pem -text

有了这个你将得到你的PEM文件的所有同伴。如果你想要你完全得到公钥模数,它会给你十六进制。

openssl x509 -in outer.pem -modulus -noout

一点点子进程,您可以轻松地从终端输出获取输出文件,并使用一点正则表达式,您将获得所需的一切。 Ty openssl。我希望我可以帮助那些阅读此内容的人。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.