2017-06-04 26 views
0

SSLを使用してIRCに接続します。私はPython 2.7に書きます。ただし、以下のコードのために:ssl.SSLError:[SSL:CERTIFICATE_VERIFY_FAILED]証明書の検証に失敗しました。

HOST = 'chat.freenode.net' 
PORT = 7000 
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
code = sock.connect_ex((HOST, PORT)) 
context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2) 
context.verify_mode = ssl.CERT_REQUIRED 
context.load_verify_locations('COMODOECCCertificationAuthority.crt') 
secure_sock = context.wrap_socket(sock) 

PyCharmが間違っている何行secure_sock = context.wrap_socket(sock)でエラーを示して?

答えて

1

context.load_verify_locations('COMODOECCCertificationAuthority.crt')

私は、ファイルCOMODOECCCertificationAuthority.crtにあるかわからないが、それはあなたがコモドによって署名された証明書を期待してのように見えます。しかし、chat.freenode.netの証明書の発行者は、暗号化しようとしていて、Comodoではありません。例:

$ openssl s_client -connect chat.freenode.net:7000 
... 
Certificate chain 
0 s:/CN=cherryh.freenode.net 
    i:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3 
1 s:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3 
    i:/O=Digital Signature Trust Co./CN=DST Root CA X3 

これは、信頼する必要があるルートCAが「DSTルートCA X3」であることを意味します。このCA hereの証明書をダウンロードできます。これをload_verify_locationsに信頼できるものとして追加すると動作します。

+0

私は 'https:// freenode.net /'ページを開き、私のブラウザ(最新のFirefox)を使って証明書をエクスポートしました。なぜそれがうまくいかなかったのですか? – yak

+0

上記の私の質問に加えて、あなたがリンクを投稿した証明書に変更したときに、新しいエラーが発生しました: 'ssl.SSLError:[SSL:TLSV1_ALERT_PROTOCOL_VERSION] tlsv1警告プロトコルバージョン(_ssl.c:1754)' – yak

+1

@ yak:サイトはさまざまなサービスに対してさまざまな証明書を使用でき、freenodeはこれを行っています。つまり、httpsとircに対して異なる証明書を使用しています。 2番目のエラーについては、これは別の問題であり、コメントで尋ねるべきではありません。あなたが使用しているPythonのフルバージョン(2.7.x)とopenssl( 'ssl.OPENSSL_VERSION')を含め、この問題についての詳細を提供する新しい質問をしてください。 –

関連する問題