python中的这个ssl错误是什么意思?

时间:2012-05-17 17:30:29

标签: python ssl ssl-certificate

我有以下简单的python代码,用于执行ssl握手并在客户端和服务器之间验证证书:

ssl_test.py:

import ssl
import socket

s = socket.socket()
print "connecting..."
#logging.debug("Connecting")
# Connect with SSL mutual authentication
# We only trust our server's CA, and it only trusts user certificates signed by it
c = ssl.wrap_socket(s, cert_reqs=ssl.CERT_REQUIRED,
                    ssl_version=ssl.PROTOCOL_SSLv3, ca_certs='ca.crt',
                    certfile='user.crt', keyfile='user.key')
c.connect((constants.server_addr, constants.port))

当我执行此操作时,我收到以下错误。

>python ssl_test.py
Traceback (most recent call last):
  File "ssl_test.py", line 12, in <module>
    c.connect(('192.168.1.82', 7070))
  File "C:\Python27\lib\ssl.py", line 331, in connect
    self._real_connect(addr, False)
  File "C:\Python27\lib\ssl.py", line 314, in _real_connect
    self.ca_certs, self.ciphers)
ssl.SSLError: [Errno 0] _ssl.c:340: error:00000000:lib(0):func(0):reason(0)

此错误意味着什么,我该如何解决?

2 个答案:

答案 0 :(得分:3)

这看起来像http://bugs.python.org/issue2687,其中给出了以下答案:

  

不,问题在于客户端的“ca_certs”参数。   您无法使用目录。您必须使用包含多个文件的文件   连锁证书。我会加强文档来做到这一点   更加清晰。

我看到你的ca_certs是一个文件,而不是一个目录,但也许这仍然有些亮点。 ca.crt文件是否格式正确且位置正确?

答案 1 :(得分:2)

我是Python的新手,在搜索原始的ssl.SSLError之后最终走上了这条路。我知道这对原始海报没有帮助,但它可能会帮助其他人解决这个错误。大多数Python示例都使用:

    ca_certs="/etc/ca_certs_file"

由于此文件不存在,您会收到此错误。要在最新版本的Linux上使用系统CA证书,请使用:

    ca_certs="/etc/ssl/certs/ca-certificates.crt"