Python 3.x ssl.CertificateError:hostname';example.com';不';t与';exampleserver.com';?

Python 3.x ssl.CertificateError:hostname';example.com';不';t与';exampleserver.com';?,python-3.x,ssl-certificate,urllib,urllib2,urllib3,Python 3.x,Ssl Certificate,Urllib,Urllib2,Urllib3,当我试图用urllib库打开一个网站时,我得到了一个错误。我不明白为什么会发生这个错误?目前我使用的是python 3.6版本。这个版本有问题吗 url = 'https://example.com' html = urllib.request.urlopen(url).read().decode('utf-8') text = get_text(html) data = text.split() print(data) 当SSL/TLS证书的公用名与站点的域名不匹配时,会发生此错误。尝试将站

当我试图用urllib库打开一个网站时,我得到了一个错误。我不明白为什么会发生这个错误?目前我使用的是python 3.6版本。这个版本有问题吗

url = 'https://example.com'
html = urllib.request.urlopen(url).read().decode('utf-8')
text = get_text(html)
data = text.split()
print(data)

当SSL/TLS证书的公用名与站点的域名不匹配时,会发生此错误。尝试将站点的域名更改为exampleServer.Com,然后查看它是否有效。否则,您必须编写自定义逻辑以忽略名称不匹配错误。

当SSL/TLS证书的公用名称与您站点的域名不匹配时,会发生此错误。尝试将站点的域名更改为exampleServer.Com,然后查看它是否有效。否则,您将不得不编写自定义逻辑以忽略名称不匹配错误。

我已通过以下代码解决了此问题:

需要导入ssl库吗 导入ssl

需要在加载url之前添加此代码 ssl.match_hostname=lambda证书,主机名:True

例如:

import ssl

ssl.match_hostname = lambda cert, hostname: True
url = 'https://example.com'
html = urllib.request.urlopen(url).read().decode('utf-8')
text = get_text(html)
data = text.split()
print(data)

我用这个密码解决了这个问题:

需要导入ssl库吗 导入ssl

需要在加载url之前添加此代码 ssl.match_hostname=lambda证书,主机名:True

例如:

import ssl

ssl.match_hostname = lambda cert, hostname: True
url = 'https://example.com'
html = urllib.request.urlopen(url).read().decode('utf-8')
text = get_text(html)
data = text.split()
print(data)

自定义逻辑在某种意义上包括“try block”以避免错误?我不确定python。但通常在每个框架中,都有回调方法,当发生SSL握手时会调用这些方法。默认情况下,仅当所有验证都通过时,此方法才返回true。但是,您可以编写自己的逻辑来忽略名称不匹配错误,并从此方法返回true。您可以在Pythoncustom逻辑中搜索这个回调方法,包括“try block”以避免错误?我不确定python。但通常在每个框架中,都有回调方法,当发生SSL握手时会调用这些方法。默认情况下,仅当所有验证都通过时,此方法才返回true。但是,您可以编写自己的逻辑来忽略名称不匹配错误,并从此方法返回true。您可以在PythonSo中搜索这个回调方法,基本上您在任何情况下都返回true。从安全角度来看,这可能有风险。您至少应该检查有效的证书及其到期时间。如何检查有效的证书?在python中,我们有单独的处理程序来检查证书到期时间和主机名。所以,无论你做什么都是正确的。您不需要在此处验证证书。有单独的回调“cert_time_to_seconds(cert_time)”,用于验证证书。因此,基本上,在每种情况下,您都返回true。从安全角度来看,这可能有风险。您至少应该检查有效的证书及其到期时间。如何检查有效的证书?在python中,我们有单独的处理程序来检查证书到期时间和主机名。所以,无论你做什么都是正确的。您不需要在此处验证证书。有单独的回调“cert\u time\u to_seconds(cert\u time)”,用于验证证书。