2

このトピックに関する現在の質問は私の問題を解決しませんでした。Google も同様です。

関連するサーバー コード:

class ReuseHTTPServer(BaseHTTPServer.HTTPServer):
    def __init__(self, address, handler, queue=None):
        BaseHTTPServer.HTTPServer.__init__(self, address, handler)

        self.address = address
        ssl_socket = ssl.wrap_socket(socket.socket(self.address_family, self.socket_type),
                                     keyfile = KEY_PATH,
                                     certfile = CERTIFICATE_PATH,
                                     server_side = True,
                                     cert_reqs = ssl.CERT_REQUIRED,
                                     ssl_version = ssl.PROTOCOL_TLSv1,
                                     ca_certs = CA_PATH)
        s = self.socket.getsockname()

        print "serving:", s[0], "on port:", s[1]

        self.socket = ssl_socket

        self.server_bind()
        self.server_activate()

クライアントコード:

conn = https.HTTPSConnection(HOST, port=PORT, key_file=KEY_PATH, cert_file=CERT_PATH)

        conn.putrequest("GET", '/cgi-bin/retrieveRunningInstances')

        conn.endheaders()

        response = conn.getresponse()

クライアントに接続しようとすると、SSLError errno 8; が発生します。プロトコル違反で EOF が発生しました。openssl を使用して証明書を確認しました。髪を引っ張っています。どんな助けでも大歓迎です。

編集:

でのハンドシェイク中にエラーが発生しconn.getresponse()ます。

4

1 に答える 1

0

私はそれを理解したと思います。私は同じ問題を抱えていました:

SSLError errno 8; EOF occurred in violation of protocol

cert_file が見つからないことが判明しました。次のように指定しましたが、ありませんでした。

server = HTTPServer( ('',5005), HttpHandler )
server.socket = ssl.wrap_socket( server.socket, certfile='kencert.pem', server_side=True )

.pem ファイルを追加すると、うまくいきました。

お役に立てれば!

于 2012-12-18T00:23:19.633 に答える