背景
所以我有一个库来实现服务器端代码。如果提供了SSLContext
,该库将实现 SSL。不需要由公共 CA 签名(SSLContext
即,它接受自签名证书。)
问题
由于一些问题,当服务器端代码被执行时,我需要检查服务器是否已启动。如果没有SSLContext
提供,这很简单:只需连接到服务器的端口即可。
但是,如果SSLContext
提供了,那么我需要“包装”与另一个 SSL 上下文的连接。
- 我可以使用
ssl.SSLContext()
,默认情况下在 Python>=3.6 上非常安全,但是我们使用的静态代码分析软件抱怨“不安全的默认值” - 我可以使用
ssl.create_default_context()
,但除非还提供 CA 文件,否则它将拒绝使用自签名证书与服务器的连接(因为默认情况下create_default_context
会拉取系统的 CA 文件)
问题
我打算这样做:
... snipped code ...
# conn is socket connection to target server host:port
ca = self.server_ssl_context.method_to_get_ca()
test_client_context = ssl.create_default_context(cafile=ca)
conn = test_client_context.wrap_socket(conn)
有没有办法从SSLContext
提供的库中检索 CA 文件?(在我上面的计划中,SSLContext
用户提供的将存储在self.server_ssl_context
)