在python ssl编码中,`context.load\u verify\u locations(“/etc/ssl/certs/cabundle.crt”)`的功能是什么?

2024-06-16 11:19:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我遵循一个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的函数。你能帮我回答这些问题吗


Tags: importsslcontextetcloadsocketconnhostname
1条回答
网友
1楼 · 发布于 2024-06-16 11:19:28

你知道如何验证证书吗?如果否,您可以从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

相关问题 更多 >