4

私はPythonを学ぶ最初のステップにいるので、質問を失礼します。以下のコードを実行したい(http://docs.python.org/library/ssl.htmlから取得):

import socket, ssl, pprint
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# require a certificate from the server
ssl_sock = ssl.wrap_socket(s,
                           ca_certs="F:/cert",
                           cert_reqs=ssl.CERT_REQUIRED)

ssl_sock.connect(('www.versign.com', 443))

print repr(ssl_sock.getpeername())
print ssl_sock.cipher()
print pprint.pformat(ssl_sock.getpeercert())

# Set a simple HTTP request -- use httplib in actual code.
ssl_sock.write("""GET / HTTP/1.0\r
Host: www.verisign.com\r\n\r\n""")

# Read a chunk of data.  Will not necessarily
# read all the data returned by the server.
data = ssl_sock.read()

# note that closing the SSLSocket will also close the underlying socket
ssl_sock.close()  

次のエラーが発生しました。

トレースバック(最後の最後の呼び出し):ファイル "C:\ Users \ e \ worksheet \ PythonTesting \ source \ HelloWorld.py"、38行目、ssl_sock.connect(('www.versign.com'、443))

ファイル"C:\ Python27 \ lib \ ssl.py"、行331、接続

self._real_connect(addr, False)

_real_connectのファイル"C:\ Python27 \ lib \ ssl.py"、行314

self.ca_certs、self.ciphers)

ssl.SSLError:[Errno 185090050] _ssl.c:340:エラー:0B084002:x509証明書ルーチン:X509_load_cert_crl_file:system lib

Pythonでのエラー報告は、問題の原因を見つけるためのガイドには見えません。私は間違っているかもしれません。誰かが私にコードの問題が何であるかを教えてくれるのを手伝ってもらえますか?

4

3 に答える 3

3

これは、Python標準ライブラリの使用が難しいことが知られている領域の1つです。代わりに、リクエストライブラリを使用することをお勧めします。証明書の送信に関するドキュメントは、http://docs.python-requests.org/en/latest/user/advanced/#ssl-cert-verificationで入手できます。

于 2012-10-14T19:51:24.167 に答える
2

あなたのコードは、実行中に見つからないドライブ 'F:' (パラメーターを使用) の証明書ファイルを参照しています。ca_certs

関連ドキュメントを参照してください。

ca_certs ファイルには、連結された「認証局」証明書のセットが含まれており、接続の相手側から渡された証明書を検証するために使用されます。

于 2012-10-14T17:56:37.027 に答える
0

参照されている証明書はファイルシステムに存在しますか? エラーは、このコードからの無効な証明書に対応していると思います:

ssl_sock = ssl.wrap_socket(s,ca_certs="F:/cert",cert_reqs=ssl.CERT_REQUIRED)

于 2012-10-14T18:01:02.287 に答える