2

Pythonプログラムのsslで既存のソケット接続をラップするのに問題があります。基本的に、これはSTARTTLSの実装です。つまり、現在接続されているクライアントがSTARTTLSコマンドを発行でき、サーバーが接続を保護します。

これが私が苦労しているコードの部分です:

self.client_s = ssl.wrap_socket(
    self.client_s,
    certfile='/path/to/cert.crt',
    keyfile='/path/to/key.key',
    do_handshake_on_connect=False
    )
while True:
    try:
        self.client_s.do_handshake()
        break
    except ssl.SSLError, e:
        if e.args[0] == ssl.SSL_ERROR_WANT_READ:
            select([self.client_s], [], [])
        elif e.args[0] == ssl.SSL_ERROR_WANT_WRITE:
            select([], [self.client_s], [])
        else: raise

opensslを使用して接続すると、次のようになります。

_ssl.c:491: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol

私はこれを実行して接続しています:

openssl s_client -connect localhost:50000 -crlf -starttls smtp -debug -ssl3

-ssl2、、、-no_ssl2またはを使用するようにopensslコマンドを変更して-tls1も役に立ちません。追加も試みましserver_side=True to wrap_socket()たが、SSLハンドシェイクがタイムアウトになります。

wrap_socket()STARTTLSコンテキストで接続を使用しようとしたときではなく、接続が最初から最後まで暗号化されている場合は正常に機能することに注意してください。

Pythonのバージョンは2.4.3です

よろしくお願いします。ポインタや助けに感謝します。

4

0 に答える 0