Python httplib 禁用证书验证

1 投票
1 回答
4233 浏览
提问于 2025-04-18 01:42

我有以下代码可以使用:

def createCon(host,auth):
    con = httplib.HTTPSConnection(host)
    return con
def _readJson(con,url):
    con.putrequest("GET",url)
    ...
    r = con.getresponse()

这段代码在一个特定的服务器上运行正常,但在另一个服务器上却出现了SSLError(安全证书错误)。如果我在浏览器中打开这个网址,我需要接受证书,然后就能正常工作。但是,我该如何接受这个证书或者关闭它的验证呢?这个证书是自签名的,存储在一个Java的密钥库中,所以我更希望能关闭验证...

这段代码的目的是在请求之间重用连接,所以我不想对它进行太大的修改。

我该怎么做呢?我尝试修改一些例子,但没有成功。

con.putrequest("GET",url, verify=False)
or
con.request.verify=False

我不知道如何访问会话或请求对象,或者如何修改默认设置。

更新:这并没有帮助:

socket.ssl.cert_reqs='CERT_NONE'

嗯,实际上错误信息很奇怪...:

SSLError:'[Errno 1] _ssl.c:492: error:100AE081:elliptic curve routines:EC_GROUP_new_by_curve_name:unknown group'

祝好:
Bence

1 个回答

2

你的错误信息指向你使用的openssl版本中的一个bug。简单来说:客户端在宣传它拥有的一些功能,但实际上并没有这些功能。如果服务器选择了这样的功能,就会出现这个错误信息。解决这个问题的方法是升级你本地的openssl安装。如果你能控制服务器,服务器端也可以找到一种解决办法。

撰写回答