python - 在 key /证书不匹配的情况下测试 TLS 证书身份验证

标签 python ssl https certificate client-certificates

我有一个使用 TLS 客户端证书进行用户身份验证的 Web 服务。如果服务正确实现(“配置为执行”)证书身份验证,现在我想编写一个全栈测试。

特别是我想知道是否可以使用与提供的客户端证书不匹配的 key 来加密请求。

理想情况下,测试将使用 Python 编写,但任何其他通用语言也可以。

所以我的第一次尝试是使用 Python 的 requests 包:

requests.post(url, data=payload, cert=(cert_path, key_path), verify=False)

如果 key 与证书匹配,这会起作用,但如果不匹配,我就得到

requests.exceptions.SSLError: [X509: KEY_VALUES_MISMATCH] key values mismatch (_ssl.c:2718)

这是一个客户端错误,因此请求永远不会到达服务器(因此不会在那里测试任何东西)。

所以我的问题是:是否真的有可能出示错误的证书,或者协议(protocol)设计不可能这样做?有任何关于如何实现此类测试的提示吗?

最佳答案

在 TLS 协议(protocol)中,可以发送 CertificateVerify 消息,其中包含的签名与客户端发送的证书不匹配。因此协议(protocol)设计不会排除它,也不可能排除它,因为此签名的目的是证明客户端可以访问与发送的证书匹配的私钥。

但是,通过使用 requests,您可以在非常高的级别上进行测试,这实际上是在尝试保护您免受典型错误的影响。如果您想使用无效签名等进行测试,您需要在较低级别工作,例如通过使用 scapy 构建您自己的 TLS 握手。 .请注意,您需要更深入地了解 TLS 如何进行此类测试。

关于python - 在 key /证书不匹配的情况下测试 TLS 证书身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43003685/

相关文章:

azure - Crystal Reports 通过 HTTP 工作,但不能通过 HTTPS

python - 索引到 numpy mgrid

javascript - PHP/Javascript/Python 不重新加载 div

python - Python 生成器函数中的代码重复

ssl - Outlook 和 Gmail 阻止 SSL 通讯中的图像

c++ - 如何设置连接超时

python 如何获取导入包中运行脚本的文件名

eclipse - 无法验证 SSL 主机

ssl - 什么是地址绑定(bind)/域绑定(bind)证书?

android - Android 4.4 中的自适应播放