Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python WWS库需要整个证书链来验证服务器_Python_Authentication_Ssl_Certificate_Wss - Fatal编程技术网

Python WWS库需要整个证书链来验证服务器

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

我正在使用ssl.py连接到Web服务器,我想验证服务器证书

我有一个根证书,它签署了一个中间证书,最后签署了服务器证书

我只想向客户端提供中间CA,这样它就可以验证由它签名的所有证书。但是,似乎我需要提供整个证书链ROOT\u CA->INTERMEDIATE\u CA,以便验证工作

对此有什么见解吗

以下是我正在使用的脚本:

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(...)