3

私の目標は、ホストに接続するための Python スクリプトを開発し、openssl を実行するのと同様に、サーバーの公開キーの長さをビット単位で決定することです。

(openssl s_client -connect 10.18.254.29:443)
yada yada yada
Server certificate
-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----
Server public key is 2048 bit

この基本的なスクリプトを開始しました:

from M2Crypto import SSL, RSA
SSL.Connection.clientPostConnectionCheck = None
ctx = SSL.Context()
conn = SSL.Connection(ctx)
conn.connect(('1.1.1.1', 443))
cert = conn.get_peer_cert()
print cert.get_issuer().as_text()

print cert.get_subject().as_text()
print cert.get_fingerprint()

print cert.get_pubkey().get_rsa().as_pem()

キーの長さ属性を表示する方法が見つからないようです。何か案は?

4

2 に答える 2

2

@abarnert の助けに基づいて、コードを次のように変更しました

from M2Crypto import SSL, RSA

SSL.Connection.clientPostConnectionCheck = None
ctx = SSL.Context()
conn = SSL.Connection(ctx)
conn.connect(('10.18.254.29', 443))
cert = conn.get_peer_cert()

print cert.get_issuer().as_text()

print cert.get_subject().as_text()
print cert.get_fingerprint()

**def size(self):
    """
    Return the size of the key in bytes.
    """
    return m2.pkey_size(self.pkey)**

print cert.get_pubkey().size()*8

于 2013-03-22T19:15:28.323 に答える
2

一般的な方法は次のとおりです。

print key.size()

docs for PKeysay のように、これはビット単位ではなくバイト単位のサイズです。したがって、「2048」を取得するには、8 を掛ける必要があります。

RSA であることがわかっていて、すでに を呼び出している場合は、次の操作get_rsa()を実行できます。

print len(rsa)

ドキュメントにはこれが何をするかは書かれていませんが、長さをビット単位で返します。

M2Crypto の場合と同様に、実際に確認する必要があるのは libssl/libcrypto ドキュメントです (openssl コマンドライン ツールではありません)。また、どの C 関数が呼び出されているか推測できない場合でも、ソースは通常非常に単純です。

たとえば、次のことがわかりますPKey.size()

def size(self):
    """
    Return the size of the key in bytes.
    """
    return m2.pkey_size(self.pkey)

そしてRSA.__len__、次のとおりです。

def __len__(self):
    return m2.rsa_size(self.rsa) << 3

m2.rsa_sizeまた、 M2Crypto内の標準コーディング規約により、RSA_size.

于 2013-03-22T18:13:47.297 に答える