Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用httplib2打开ssl连接时出错_Python_Sockets_Https_Certificate_Httplib2 - Fatal编程技术网

Python 使用httplib2打开ssl连接时出错

Python 使用httplib2打开ssl连接时出错,python,sockets,https,certificate,httplib2,Python,Sockets,Https,Certificate,Httplib2,我正在使用httplib2打开ssl连接。下面是代码 import httplib2 if __name__=='__main__': conn = httplib2.Http(disable_ssl_certificate_validation=True) conn.add_certificate('serverkey.pem', 'servercert.pem', '') resp, content = conn.request(uri = 'https://xxx

我正在使用httplib2打开ssl连接。下面是代码

import httplib2

if __name__=='__main__':
    conn = httplib2.Http(disable_ssl_certificate_validation=True)
    conn.add_certificate('serverkey.pem', 'servercert.pem', '')
    resp, content = conn.request(uri = 'https://xxx.xxx.xxx.xxx:xxxx/Konfigurator
                   /REST/login?userName=xxx&pass=xxx', method = 'POST')
    print resp
这就是我得到的错误

Traceback (most recent call last):
File "C:\eclipse-workspace\REST\src\examples.py", line 7, in <module>
resp, content = conn.request(uri = 'https://xxx.xxx.xxx.xxx:xxx/Konfigurator/REST/login?userName=xxx&pass=xxx', method = 'POST')
File "C:\Python27\lib\site-packages\httplib2-0.7.1-py2.7.egg\httplib2\__init__.py", line 1437, in request
(response, content) = self._request(conn, authority, uri, request_uri, method, body, headers, redirections, cachekey)
 File "C:\Python27\lib\site-packages\httplib2-0.7.1-py2.7.egg\httplib2\__init__.py", line 1189, in _request
(response, content) = self._conn_request(conn, request_uri, method, body, headers)
 File "C:\Python27\lib\site-packages\httplib2-0.7.1-py2.7.egg\httplib2\__init__.py", line 1163, in _conn_request
conn.connect()
File "C:\Python27\lib\site-packages\httplib2-0.7.1-py2.7.egg\httplib2\__init__.py", line 925, in connect
raise socket.error, msg
socket.error: [Errno 10054] An existing connection was forcibly closed by the remote host
回溯(最近一次呼叫最后一次):
文件“C:\eclipseworkspace\REST\src\examples.py”,第7行,在
resp,content=conn.request(uri=)https://xxx.xxx.xxx.xxx:xxx/Konfigurator/REST/login?userName=xxx&pass=xxx,方法='POST')
请求中的第1437行文件“C:\Python27\lib\site packages\httplib2-0.7.1-py2.7.egg\httplib2\\uuuuu init\uuuuu.py”
(响应,内容)=self.\u请求(conn,authority,uri,request\u uri,method,body,header,重定向,cachekey)
文件“C:\Python27\lib\site packages\httplib2-0.7.1-py2.7.egg\httplib2\\uuu init\uuu.py”,第1189行,在请求中
(响应,内容)=自连接请求(连接,请求uri,方法,正文,标题)
文件“C:\Python27\lib\site packages\httplib2-0.7.1-py2.7.egg\httplib2\\ u_init___;.py”,第1163行,在连接请求中
连接
文件“C:\Python27\lib\site packages\httplib2-0.7.1-py2.7.egg\httplib2\\uuuuu init\uuuuu.py”,第925行,在connect中
raise socket.error,msg
socket.error:[Errno 10054]远程主机已强制关闭现有连接

代码是正确的还是我遗漏了什么?

您的代码似乎是正确的,即以下简化版本能够正确地获得谷歌的HTTPS首页:

>>> import httplib2
... from pprint import pprint
... conn = httplib2.Http()
... resp, content = conn.request(uri="https://encrypted.google.com")
... pprint(resp)
{'cache-control': 'private, max-age=0',
 'content-location': 'https://encrypted.google.com',
 'content-type': 'text/html; charset=ISO-8859-1',
 'date': 'Fri, 04 Nov 2011 09:56:58 GMT',
 'expires': '-1',
 'server': 'gws',
 'set-cookie': 'PREF=ID=efe3264c0da8b563:FF=0:TM=1320400618:LM=1320400618:S=AsZHdP7eQQXrsYOw; expires=Sun, 03-Nov-2013 09:56:58 GMT; path=/; domain=.google.com, NID=52=RJx7UWMiVEQGLvS3nVLz4iit6Z-V0pMSXzbReygHwJVt40kg4rhs1NS2U025XEyz_0ajtbGhsUDqbqIK5gje16sxka4sStsV4KmQRPOnbpNoeL4mN9Nge-NSEoziU8yH; expires=Sat, 05-May-2012 09:56:58 GMT; path=/; domain=.google.com; HttpOnly',
 'status': '200',
 'transfer-encoding': 'chunked',
 'x-frame-options': 'SAMEORIGIN',
 'x-xss-protection': '1; mode=block'}
因此,我猜测您的证书导致远程服务器呕吐并强制断开会话。您是否控制服务器,如果是,是否有来自服务器的任何日志或诊断


事实上,仔细看,我正试图理解你的“添加证书”呼叫。为什么要将特定IP地址指定为证书的域?服务器的密钥是否实际表示该IP地址?你试过空字符串吗?

我成功了。问题是服务器仅支持TLSv1和SSLv3加密。如果未指定版本,httplib2模块已默认为SSLv23。这导致服务器使用RST数据包进行响应。可能是他们代码中的错误。在他们的init.py中进行了更改,在wrap_socket函数中包含了“ssl_version=3”(3代表TLS),并且成功了。

我能够在wireshark中捕获数据包。但它是加密的。有没有办法把这些证书放到wireshark中,这样它就可以解密。你在谷歌上搜索过吗?我认为这是一个循序渐进的过程;忽略所有IIS漏洞。就域名而言,我没有。它是我们网络中的一台本地机器,我们只是使用它的IP进行测试。无论如何,我已经删除了它,并把它空白。另外,当我尝试在不使用任何证书的情况下连接时,也会出现完全相同的错误。所以我假设这里有根本性的错误。当然,如果您在没有证书的情况下失败,我怀疑是服务器配置错误。来自web服务器的日志和诊断是您的朋友;也许是关于超级用户的新问题?作为一个例子,我花了一段时间才让SSL在我编写的ErlangWeb服务器上工作,来自服务器的日志对于调试它至关重要。