我的ssl服务器和客户端代码在Windows机器上运行正常。但是,当我尝试在Ubuntu机器上执行相同的代码时,我在客户端执行以下行代码时遇到了一些错误:
sslconnection.connect((host,port))
所有代码文件和证书文件都存在于同一文件夹中。
File "clientsideCode.py", line 24, in <module>
sslConnection.connect((host,port))
File "/usr/lib/python2.7/ssl.py", line 433, in connect
self._real_connect(addr, False)
File "/usr/lib/python2.7/ssl.py", line 414, in _real_connect
self.ca_certs, self.ciphers)
ssl.SSLError: [Errno 0] _ssl.c:344: error:00000000:lib(0):func(0):reason(0)
我用来用ssl包装套接字的代码:
sslconnection = ssl.wrap_socket(clientsocket,cert_reqs=ssl.CERT_REQUIRED,ca_certs="server.crt")
答案 0 :(得分:1)
由于这个问题现在已经解决,所以任何人都会在这类问题上磕磕绊绊:
... ssl.wrap_socket(clientsocket,cert_reqs=ssl.CERT_REQUIRED...
这导致了初始问题,因为CERT_REQUIRED是服务器端的选项(要求客户端证书),并且只会在客户端错误地使用时导致问题。
但是在解决了这个问题之后又出现了另一个问题:
...... EOF违反协议
这意味着服务器在握手期间关闭了连接。当协议或密码不匹配或服务器设置错误时,通常会出现此错误。通过查看服务器端的错误消息,通常可以获得更多信息。这显然是后一种情况,即错误的设置:
证书或密钥有问题。但是,我再次从Windows机器复制到linux,然后一切顺利。