您的位置:

解决CertificateError("too many wildcards in certificate DNS name: " + repr(dn))在urllib3出现报错

  发布时间:2023-02-19 19:31:17
报错的原因是由于在证书中使用了过多的通配符导致的。如何解决解决方案可能有以下几种:更新证书:如果证书是由第三方颁发的,可以尝试联系第三方更新证书。使用忽略证书错误的代码:可以在urllib库中设置参数,忽略证书错误, 但是这个做法是不安全的如果是第三方证书,最好联系第三方解决,如果是自己生成的证书最好重新生成证书。如果你使用的是requests库而非urllib库, 你可以在发起请求时加入这个verify=False是告诉requests不验证证书, 也是不安全的做法。

报错的原因

"CertificateError: too many wildcards in certificate DNS name" 是由于在证书中使用了过多的通配符导致的。在证书中使用通配符是可以的,但是过多的通配符可能会使证书不安全。

如何解决

解决方案可能有以下几种:

1. 更新证书:如果证书是由第三方颁发的,可以尝试联系第三方更新证书。

2. 使用不含通配符的证书:如果证书是自己生成的,可以尝试使用不含通配符的证书。

3. 使用不含通配符的域名:如果证书是自己生成的,可以尝试使用不含通配符的域名。

4. 使用忽略证书错误的代码:可以在urllib3库中设置参数,忽略证书错误, 但是这个做法是不安全的

如果是第三方证书,最好联系第三方解决,如果是自己生成的证书最好重新生成证书。

使用例子

下面是一个使用urllib3库并忽略证书错误的例子:


import urllib3

urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
http = urllib3.PoolManager()
response = http.request('GET', 'https://example.com', 
                        cert_reqs='CERT_NONE', 
                        assert_hostname=False)

print(response.status)
print(response.data)

上面的代码禁用了urllib3的安全警告,并且设置了证书请求为CERT_NONE,并且assert_hostname=False。这样就能忽略证书错误了,但这样的做法是不安全的,请慎重使用。

如果你使用的是requests库而非urllib3库, 你可以在发起请求时加入 verify=False


import requests

response = requests.get('https://example.com', verify=False)

这个verify=False是告诉requests不验证证书, 也是不安全的做法。