公的認証局による、SSL認証がされているサイトかどうかを検証するコードを書いてみたのですが、少々お聞きしたい点があり、質問させて貰いました。
test_1.py
def get_server_certificate(hostname): context = ssl.create_default_context() try: # address ((host, port) ペア) で listen しているTCPサービスに接続し、 # ソケットオブジェクトを返します with socket.create_connection((hostname, 443)) as sock: with context.wrap_socket(sock, server_hostname=hostname) as sslsock: #Falseの場合はdictで取得、Trueの場合はバイナリ形式で取得 der_cert = sslsock.getpeercert(True) sslsock.match_hostname(der_cert,hostname) except: print('証明書の取得に失敗') get_server_certificate('www.google.com')
test_2.py
def get_server_certificate(hostname): context = ssl.create_default_context() try: # address ((host, port) ペア) で listen しているTCPサービスに接続し、 # ソケットオブジェクトを返します with socket.create_connection((hostname, 443)) as sock: # print('sockは ' , sock ) # exit() context.wrap_socket(sock, server_hostname=hostname) except: print('証明書の取得に失敗') get_server_certificate('www.google.com')
上記のコード2つとも、SSL証明書が実装されていないサイトに通信を行った場合、例外が発生します。
そもそもなのですが、context.wrap_socket(sock, server_hostname=hostname)
ここの部分で例外が発生している為、ホストとコモンネームを比較する、match_hostname
関数は通さなくても良いのではないかと現時点では推測しております。
しかし、念のためSSL認証がされているサイトかどうかを確かめる場合は、こちらの関数を使用した方が良いのでしょうか。
アドバイスの方、頂けましたら幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/13 09:42 編集
2020/06/13 09:45
2020/06/13 11:51
2020/06/13 11:55
2020/06/13 11:58