Python WWS库需要整个证书链来验证服务器
我正在使用ssl.py连接到Web服务器,我想验证服务器证书 我有一个根证书,它签署了一个中间证书,最后签署了服务器证书 我只想向客户端提供中间CA,这样它就可以验证由它签名的所有证书。但是,似乎我需要提供整个证书链ROOT\u CA->INTERMEDIATE\u CA,以便验证工作 对此有什么见解吗 以下是我正在使用的脚本:Python WWS库需要整个证书链来验证服务器,python,authentication,ssl,certificate,wss,Python,Authentication,Ssl,Certificate,Wss,我正在使用ssl.py连接到Web服务器,我想验证服务器证书 我有一个根证书,它签署了一个中间证书,最后签署了服务器证书 我只想向客户端提供中间CA,这样它就可以验证由它签名的所有证书。但是,似乎我需要提供整个证书链ROOT\u CA->INTERMEDIATE\u CA,以便验证工作 对此有什么见解吗 以下是我正在使用的脚本: import asyncio import pathlib import ssl import websockets ssl_context = ssl.SSLCon
import asyncio
import pathlib
import ssl
import websockets
ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
ssl_context.check_hostname = False
ssl_context.verify_mode = ssl.CERT_REQUIRED
server_cert = pathlib.Path(__file__).with_name("intermediate_ca_server.ca-chain.cert.pem")
ssl_context.load_verify_locations(server_cert)
async def hello():
uri = "wss://<url>"
async with websockets.connect(
uri, ssl=ssl_context
) as websocket:
await websocket.send('test data')
greeting = await websocket.recv()
print(f"< {greeting}")
导入异步IO
导入路径库
导入ssl
导入WebSocket
ssl\u context=ssl.SSLContext(ssl.PROTOCOL\u TLS\u客户端)
ssl\u context.check\u hostname=False
ssl\u context.verify\u mode=ssl.CERT\u必需
server\u cert=pathlib.Path(\uuuuu file\uuuuu)。带有\u名称(“中间\u ca\u server.ca chain.cert.pem”)
ssl上下文。加载验证位置(服务器证书)
异步def hello():
uri=“wss://”
与websockets.connect异步(
uri,ssl=ssl\U上下文
)作为websocket:
等待websocket.send('测试数据')
问候语=等待websocket.recv()
打印(f“<{问候语}”)
默认情况下,OpenSSL需要完整的证书链,包括根证书。在OpenSSL 1.0.2中,添加了一个新的验证标志X509_V_flag_PARTIAL_CHAIN
,这使得即使该证书不是根证书(即主体和颁发者不同),也可以让信任链在受信任证书中结束
Python似乎还没有为此定义常量,因此需要使用整数表示:
ctx = ssl.create_default_context()
ctx.load_verify_locations(cafile='subca.pem') # contains only sub-CA
ctx.verify_flags |= 0x80000 # set X509_V_FLAG_PARTIAL_CHAIN
ctx.ssl_wrap(...)