具有自签名证书的双向TLS,具有python中的请求



我创建了客户端和服务器证书:

# client
openssl req -new -newkey rsa:4096 -x509 -sha256 -days 365 -nodes -out ssl/client.crt -keyout ssl/client.key
# server
openssl req -new -newkey rsa:4096 -x509 -sha256 -days 365 -nodes -out ssl/server.crt -keyout ssl/server 

然后使用python,我有以下内容:

import requests
response = requests.get(
"https://localhost:8080/",
verify="ssl/server.crt",
cert=("ssl/client.crt", "ssl/client.key")
)

我还有一个gunicorn服务器,它使用服务器自签名证书运行。

代码片段引发了以下错误:

requests.exceptions.SSLError: HTTPSConnectionPool(host='localhost', port=8080): Max retries exceeded with url: / (Caused by SSLError(SSLError(1, '[SSL: TLSV1_ALERT_UNKNOWN_CA] tlsv1 alert unknown ca (_ssl.c:2633)')))

这是一个自签名证书,所以我不确定它所期望的CA是什么。

tlsv1警报未知ca

服务器正在发回TLS警报,因为它无法验证您的客户端证书-签署证书的证书颁发机构(ca(对服务器来说是未知的。您需要在服务器中禁用客户端证书验证,或者(更好(使服务器信任您的客户端证书。

这是一个自签名证书,所以我不确定它需要什么CA。

自签名证书由其自身签名,即CA就是证书本身。

看起来服务器无法验证您的客户端证书。如果您只是为客户端和服务器使用一对自签名证书,那么服务器还需要使用客户端的证书作为其CA,因为它将尝试验证它是由CA签名的,在这种情况下,CA就是客户端。

我最近写了一篇关于使用自签名证书部署mTLS的博客,它可能会对您有所帮助,因为它包含了更多细节,特别是如何配置客户端和服务器。点击此处查看:https://otterize.com/blog/so-you-want-to-deploy-mtls

相关内容

最新更新