我遵循一个Python ssl演示编写的教程
import ssl
import socket
HOSTNAME = "www.cloudflare.com"
context = ssl.create_default_context()
context = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
context.verify_mode = ssl.CERT_REQUIRED
context.check_hostname = True
#context.load_verify_locations("/etc/ssl/certs/ca-bundle.crt")
conn = context.wrap_socket(socket.socket(socket.AF_INET), server_hostname=HOSTNAME)
conn.connect((HOSTNAME, 443))
# cert = conn.getpeercert()
#
# print(cert)
这行代码我不懂,功能是什么
context.load_verify_locations("/etc/ssl/certs/ca-bundle.crt")
我在macOS中运行它,我不知道哪条路径可以访问ca-bundle.crt
,也不知道ca-bundle.crt
的函数。你能帮我回答这些问题吗
你知道如何验证证书吗?如果否,您可以从Wikipedia page about PKI开始
简言之。证书由证书颁发机构签署。我们信任这些机构,因为他们会检查认证请求中的所有索赔。因此,如果站点为
stackoverflow.com
提供证书并由受信任的CA签名,那么我们认为这确实是堆栈溢出受信任的权限集很小。几十个。它们的公钥作为证书与操作系统、浏览器、openssl发行版一起分发。这些证书称为根证书
调用
context.load_verify_locations("/etc/ssl/certs/ca-bundle.crt")
加载openssl maintaners信任的CA的根证书列表。该证书列表存储在文件/etc/ssl/certs/ca-bundle.crt
中但在MacOS中,不需要这种调用。默认OpenSSL发行版从操作系统加载CA证书。
cloudflare.com
的证书由DigiCert颁发。这是一个信誉良好的CA,所有浏览器和操作系统都信任它。它们的证书存储在MacOS中,并在初始化默认上下文时加载到进程中仅供参考。常量
ssl.PROTOCOL_SSLv23
用词不当,自python 3.6以来就被弃用了。改用ssl.PROTOCOL_TLS
相关问题 更多 >
编程相关推荐