Python SSL服务器提供中间CA证书
我正在使用Python(2.7)SSL模块编写一些服务器代码,如下所示:Python SSL服务器提供中间CA证书,python,ssl,certificate,ca,Python,Ssl,Certificate,Ca,我正在使用Python(2.7)SSL模块编写一些服务器代码,如下所示: ssock=ssl.wrap\u套接字(sock,ca\u certs=“all-ca.crt”,keyfile=“server.key”,certfile=“server.crt”,server\u side=True,ssl\u version=ssl.PROTOCOL\u TLSv1) “all-ca.crt”包含签名ca证书和根ca证书: -----BEGIN CERTIFICATE----- ... (signi
ssock=ssl.wrap\u套接字(sock,ca\u certs=“all-ca.crt”,keyfile=“server.key”,certfile=“server.crt”,server\u side=True,ssl\u version=ssl.PROTOCOL\u TLSv1)
“all-ca.crt”包含签名ca证书和根ca证书:
-----BEGIN CERTIFICATE-----
... (signing CA)...
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
... (root CA)...
-----END CERTIFICATE-----
Python SSL模块的文档说明:
通常,如果您使用的是SSL3或TLS1,则不需要将
“CA证书”文件中的完整链;你只需要根
证书,远程对等方应该提供另一个证书
从其证书链接到根目录所需的证书
证书
这是我用C语言编写SSL服务器的经验,但在这里似乎不起作用。如果我编写的客户端在其wrap_socket()调用中仅使用根证书:
csock=ssl.wrap\u套接字(sock,ca\u certs=“root-ca.crt”,cert\u reqs=ssl.cert\u REQUIRED,ssl\u version=ssl.PROTOCOL\u TLSv1)
然后引发一个异常:
ssl.SSLError:[Errno 1]\u ssl.c:499:error:14094418:ssl
例程:SSL3_读取字节:tlsv1警报未知ca
相反,如果我将all-ca.crt传递给client ca_certs参数,那么一切都会按预期工作,但这在客户端很不方便,不应该是必需的
有什么方法可以告诉服务器端它需要在协商时向客户端提供中间CA证书吗?在服务器端,使用
CA\u certs
选项验证客户端的证书。(如果CERT\u REQUIRED
设置为True
,服务器将要求客户端提供其证书)
事实上,CA\u certs
中的CA证书不会发送给客户端。服务器将只向客户端发送自己的证书。但是您可以将所有中间证书和服务器的证书放入server.crt.
中,例如,使用
cat server.crt intermediate-ca.crt root-ca.crt>server-chain.crt
生成证书链。“服务器将只向客户端发送自己的证书。此行为符合TLS协议的规定。”实际上,TLS协议允许发送证书链。@Bruno:事实上,TLS协议要求发送完整的证书链。引用:“证书列表-这是一个证书序列(链)。发送者的证书必须位于列表的第一位。下面的每个证书都必须直接证明它前面的证书。”根证书是可选的,所有其他中间证书都不是。另请参见。您是否尝试将您的服务器证书及其链捆绑到
server.crt
?谢谢Bruno,成功了。