2017-12-06 3 views
1

PEM 공개 키의 10 진수 형식의 정확한 위치에 도달하려고합니다. Pem에 없습니다. 모든파이썬에서 PEM 형식의 "Decimal"로 정확하게 공개 키를 추출합니다.

먼저 나는 퍼블릭 키를 추출하는 "PEM, RFC2459을 가져 pyasn1_modules에서"내가 사용 그 후

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() 

를 사용하여 내 PEM 인증서를 얻을. 이것은 공개 키에 대한 2 진 표현을 제공합니다. 십진수를 변환 한 후 나는 이것을 사용하고 싶지 않습니다. 내 experiance에서 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 

이제 Pem 형식으로 내 게시 키가 있습니다. 다른 연구 후 나는 이것을 발견했지만이 결과만을 제공했다. 여전히 10 진수 나 2 진 형식의 공개 키를 추출 할 수 없습니다.

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)의 넣어 밖으로을 줄 것이다>

이 내 첫 번째 질문입니다. 미안 해요. 부탁하지 마세요. 내 두뇌는 지금 당장 이해할 수없는 쓰레기 인코딩을 가진 모든 종류의 직원으로 가득차 있습니다. 이 문제를 도와 줄 수있는 사람이 있습니까?

내가 정확히 http://lapo.it/asn1js/을 찾았지만 파이썬에서 사용할 수 없습니다. 내가 원하는 데이터를 추출하기 위해 셀레늄이나 치료법을 사용할 수 있습니다. 그러나 이것은 정말로 나를 죽일 것이다. 방법이 있어야 내가 시도하는 모듈 : 나는이 주제에 노력

그 모듈 :

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 

을 Btw는 나와 함께이 문제를 encountiring 누구를 위해. pycrypto 제대로 창문에 woring되지 않습니다 (내가 VCPython2.7.msi를 설치하더라도 "당신이 그것을 시도 해보니 무슨 뜻인지 알 수 있습니다.") 나는 가상 우분투로 전환합니다. 고맙습니다.

답변

1

파이썬 ssl lib는이 문제에 대해 강력하지 않습니다. 그래서 전 리눅스 터미널에서 OPENSSL로 모든 것을 바꿉니다.

이렇게하면 s_client 지원 SNI로 인해 브라우저에서 제공 할 PEM을 제공합니다.

openssl x509 -in outer.pem -text 

이 항목은 PEM 파일의 모든 피어를 가져옵니다. 정확히 16 진법을 제공하는 공개 키 모듈을 원한다면 말이죠.

openssl x509 -in outer.pem -modulus -noout 

Alitle 비트 서브 프로세스는 easly 당신이 원하는 모든 것을 얻을 것이다 터미널 출력에서와에 alittle 비트 정규식 출력 파일을 얻을 수 있습니다. 타이 오픈. 나는 이것을 읽은 누군가를 도울 수 있기를 바랍니다.

관련 문제