Python には、pyasn1 を使用して PEM 形式のみを読み取る証明書パーサーがあります。ただし、どのようにすればよいですか 1. IP アドレスを指定してサーバー上のすべての証明書を一覧表示する
パーサーがそれぞれを 1 つずつ読み取ってフィールドを抽出できるようにするにはどうすればよいですか?
Python には、pyasn1 を使用して PEM 形式のみを読み取る証明書パーサーがあります。ただし、どのようにすればよいですか 1. IP アドレスを指定してサーバー上のすべての証明書を一覧表示する
パーサーがそれぞれを 1 つずつ読み取ってフィールドを抽出できるようにするにはどうすればよいですか?
IP アドレスを指定してサーバー上のすべての証明書を一覧表示するには、高レベルのフローは次のようになります。
For each IP:
For every port:
initiate a TLS/SSL connection
collect SSL Certificate information
then do your parsing, extraction etc
標準の Python ライブラリには、コア部分を使いこなすために必要な要素が含まれています。
>>> import ssl
>>> ssl.get_server_certificate(('www.google.com', 443,))
'-----BEGIN CERTIFICATE-----\nMIIEgDCCA2igAwIBAgIIcdMVyU ...
[...]
\nsaofrQ==\n-----END CERTIFICATE-----\n'
同じことが IP でも機能します。
>>> ssl.get_server_certificate(('109.88.203.241', 443,))
次に、スキャンループを多かれ少なかれ次のように記述できます。
import ssl
for ip in ips_to_scan:
for port in range(65536):
try:
yield ssl.get_server_certificate((ip, port,))
except:
pass
注: これは Python に関する質問であるため、ネットワークの礼儀正しさの問題は無視し、nmap は脇に置きます。try/except パスも残忍ですが、これは一例です。もちろん、エラー管理を改善することもできます。
これを超えて、より高度なもののために、これを広範囲に扱う利用可能なライブラリがたくさんあります。それらのいくつかは次のとおりです。