解决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不验证证书, 也是不安全的做法。