我需要编写一个脚本,通过HTTPS连接到公司内部网上的一组站点,并验证它们的SSL证书是否有效;它们没有过期,它们是为正确的地址颁发的,等等。我们使用我们自己的内部公司证书管理局对这些网站,所以我们有公共密钥的CA,以验证证书对。
默认情况下,Python在使用HTTPS时只接受和使用SSL证书,因此即使证书无效,Python库(如urllib 2和Twisted)也会很高兴地使用证书。
如何用Python验证证书?
发布于 2018-02-28 17:29:42
发布版本2.7.9/3.4.3 on,Python默认情况下尝试执行证书验证。
参考:https://www.python.org/dev/peps/pep-0476/
这些更改会影响所有相关的stdlib模块(urllib/urllib 2、http、httplib)。
相关文件:
https://docs.python.org/2/library/httplib.html#httplib.HTTPSConnection
这个类现在默认执行所有必要的证书和主机名检查。
https://docs.python.org/3/library/http.client.html#http.client.HTTPSConnection
在3.4.3版本中更改:这个类现在默认执行所有必要的证书和主机名检查。
发布于 2018-02-28 18:06:24
pip install backports.ssl_match_hostname
或者,您可以将其作为项目的依赖项列出:
from backports.ssl_match_hostname import match_hostname, CertificateError
...
sslsock = ssl.wrap_socket(sock, ssl_version=ssl.PROTOCOL_SSLv3,
cert_reqs=ssl.CERT_REQUIRED, ca_certs=...)
try:
match_hostname(sslsock.getpeercert(), hostname)
except CertificateError, ce:
...
https://stackoverflow.com/questions/-100007459
复制相似问题