3

Python3.2で正常に機能する単純なクライアント/サーバーSSLコードがあります。しかし、(サードパーティのモジュールが豊富なため)2.7に切り替えることにしました。現在、コードは失敗しています。コードは次のとおりです。

クライアント:

def connect(self):
    self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    self.sock.connect(('localhost', 4430))
    self.ssl_sock = ssl.wrap_socket(self.sock, cert_reqs = ssl.CERT_NONE, ssl_version = ssl.PROTOCOL_TLSv1)

サーバ:

self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    self.sock.bind((self.hostname, 4430))
    self.sock.listen(5)
    while True:
        self.newsocket, self.fromaddr = self.sock.accept()
        self.ssl_sock = ssl.wrap_socket(
                            self.newsocket, 
                            server_side = True,
                            certfile = "cert.pem",
                            ssl_version=ssl.PROTOCOL_TLSv1
        ) 

        self._handle_client(self.ssl_sock)

cert.pem(サーバーの.pyファイルと同じディレクトリにあります):

-----BEGIN RSA PRIVATE KEY-----
(812 "random" characters here)
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
(1260 "random" characters here)
-----END CERTIFICATE-----

失敗は次のとおりです
。1。サーバーはself.sock.accept()を待機します
。2。クライアントはself.sock.connect()に接続します。3
。サーバーはwrap_socketに進みますが、次のエラーで失敗します。

Traceback (most recent call last):
  File "C:\Program Files\Python27\lib\multiprocessing\process.py", line 258, in _bootstrap
    self.run()
  File "C:\workspace\projectc\server\server\clientlistener.py", line 49, in run
    ssl_version=ssl.PROTOCOL_TLSv1
  File "C:\Program Files\Python27\lib\ssl.py", line 381, in wrap_socket
    ciphers=ciphers)
  File "C:\Program Files\Python27\lib\ssl.py", line 141, in __init__
    ciphers)
SSLError: [Errno 336265218] _ssl.c:351: error:140B0002:SSL routines:SSL_CTX_use_PrivateKey_file:system lib

PS
1)certfileに存在しないファイルを使用しても同じエラーが発生するため、wrap_socket呼び出しに疑いがあります。
2)sslのPythonドキュメントで別のラッピングを試しました(つまり、ssl.SSLContextを使用)。sslモジュールの一部である場合、「module」オブジェクトに属性「SSLContext」がないのは奇妙です。Python 3.2で試したとき、これは問題ではありませんでした。

更新:
この問題は、Eclipse内から「実行」を実行している場合にのみ発生し、別々のコマンドプロンプトから両方のファイルを実行している場合には発生しないことがわかりました。まだ問題を調査しています...

更新2: 同じコードを使用して非常に単純なクライアント/サーバースクリプトを試しましたが、機能します。現在、サーバーコードがマルチプロセッシングサブプロセス(メインサーバープロセスによって起動される)内にあるため、機能していないようです。関連している?

4

2 に答える 2

3

問題が解決しました。Eclipse が何らかの情報を保持していたと思いますが、保持している情報はわかりませんでした。Python 3.2 から 2.7 への移行に関係している可能性がありますが、以前に実行構成で変更しました。Eclipse 環境のリセットは機能しました (単にコンピューターを再起動するだけでは十分ではありませんでした)。

于 2012-10-09T09:21:42.573 に答える