在SSL中包装现有套接字 - Python

时间:2012-08-16 20:26:53

标签: python ssl starttls

我在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

更改openssl命令以使用-ssl2-no_ssl2-tls1无济于事。我也尝试添加server_side=True to wrap_socket(),但只是导致ssl握手超时。

我应该注意,当连接从头到尾加密时,wrap_socket()工作正常,而不是当我尝试在STARTTLS上下文中使用它时。

Python版本是2.4.3

在此先感谢,我感谢任何指点或帮助。

0 个答案:

没有答案