2017-12-06 24 views
1

PEM公開鍵の10進数形式の正確なポイントに到達しようとしています。 Pemにはない。すべてのPythonでPEM形式の「Decimal」として正確に公開鍵を抽出します

まずiはブリックキーを抽出するために "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証明書を取得します。これにより、公開鍵のバイナリ表現が得られます。 decimal i reilzeを変換した後、これは私が使いたいとは思っていません。 私の経験では、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形式としてまだ私のPublickキーを持っています。他のいくつかの研究の後、私はこれを見つけましたが、この出力しか与えませんでした。まだ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/を見つけましたが、私は正確にそれが必要ですが、私はそれをPythonで使うことはできません。私はセレンやスクラピーを使って、自分が望むデータを抽出するかもしれません。しかし、これは本当に私を殺すでしょう。道があるはず私が試したこれらのモジュール:私はこのテーマにしようとした

それらのモジュール:

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 

をところで私と一緒にこの問題をencountiringている人のために。私はVCPython2.7.msiをインストールしますが、 "あなたがそれを試してみるとどういう意味なのか分かります")私はvirtual-ubuntuに切り替えます。ありがとうございました。

答えて

1

この問題では、Python ssl libは強力ではありません。ですから、Linux端末でOPENSSLにすべて変更します。

これは、s_clientサポートSNIのために、どのブラウザがPEMを提供するかを示します。

openssl x509 -in outer.pem -text 

これはあなたのPEMファイルのすべてのピアを取得します。もしあなたが正確に16進数を与えるPublic key modulusを取得したいならば。

openssl x509 -in outer.pem -modulus -noout 

Alitleビットサブプロセスあなたはイースリーあなたが欲しいすべてを取得するの端子出力からとalittleがビット正規表現で出力ファイルを取得することができます。 Ty openssl。私はこれを読んだ誰かを助けることができればと思います。

関連する問題