解决python代码

时间:2012-10-14 17:05:52

标签: python ssl network-programming

我正在学习python的第一步,请原谅我的问题。我想运行下面的代码(取自:http://docs.python.org/library/ssl.html):

import socket, ssl, pprint
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# require a certificate from the server
ssl_sock = ssl.wrap_socket(s,
                           ca_certs="F:/cert",
                           cert_reqs=ssl.CERT_REQUIRED)

ssl_sock.connect(('www.versign.com', 443))

print repr(ssl_sock.getpeername())
print ssl_sock.cipher()
print pprint.pformat(ssl_sock.getpeercert())

# Set a simple HTTP request -- use httplib in actual code.
ssl_sock.write("""GET / HTTP/1.0\r
Host: www.verisign.com\r\n\r\n""")

# Read a chunk of data.  Will not necessarily
# read all the data returned by the server.
data = ssl_sock.read()

# note that closing the SSLSocket will also close the underlying socket
ssl_sock.close()  

我收到了以下错误:

  

追踪(最近一次通话):     文件“C:\ Users \ e \ workspace \ PythonTesting \ source \ HelloWorld.py”,第38行,in       ssl_sock.connect(('www.versign.com',443))

     

文件“C:\ Python27 \ lib \ ssl.py”,第331行,在连接

self._real_connect(addr, False)
     

文件“C:\ Python27 \ lib \ ssl.py”,第314行,_real_connect

     

self.ca_certs,self.ciphers)

     

ssl.SSLError:[Errno 185090050] _ssl.c:340:错误:0B084002:x509证书例程:X509_load_cert_crl_file:system lib

python中的错误报告看起来并不能指导找到问题的根源。我可能弄错了。任何人都可以帮我告诉我代码中的问题是什么?

3 个答案:

答案 0 :(得分:3)

这是已知Python标准库难以使用的一个领域。相反,您可能希望使用请求库。有关发送证书的文档,请访问:http://docs.python-requests.org/en/latest/user/advanced/#ssl-cert-verification

答案 1 :(得分:2)

您的代码是指驱动器'F:'上的证书文件(使用ca_certs参数),在执行期间找不到 - 是否有一个?

请参阅相关的documentation

  

ca_certs文件包含一组连接的“认证”   权限“证书,用于验证证书   从连接的另一端传递。

答案 2 :(得分:0)

您的文件系统中是否存在引用的证书?我认为该错误是对此代码中的无效证书的回应:

ssl_sock = ssl.wrap_socket(s,ca_certs =“F:/ cert”,cert_reqs = ssl.CERT_REQUIRED)