java - 通过 X.509 客户端证书(.cer 文件)进行 Python 身份验证并与 Java 进行比较

标签 java python ssl python-requests x509certificate

我目前正在尝试在 python 中复制一个 java 工具,它允许用户继续对云中的应用程序进行一些 REST API 调用。 使用此 Java 工具,您可以创建使用传统用户/密码类型凭据或 .cer 证书的脚本。

我可以使用请求库在 Python 中轻松地重新创建用户/密码身份验证。

但是对于证书方式,那就是另外一回事了。几天来我一直在寻找可以在 Python 中执行的解决方案,但看起来 .cer 证书对于 Python 来说是不够的。

我是 SSL/TLS 的新手,所以我可能不了解它背后的所有概念,但似乎除了 .cer 证书(这是一种 PEM 格式,包含公钥和“--- --BEGIN CERTIFICATE----- -----END CERTIFICATE-----”部分),我需要获取私钥。这很奇怪,因为 Java 工具根本不需要它。

如果有人能就这个话题启发我,那就太好了!

谢谢,

克里斯

附加信息:

正如 Steffen 所问(非常感谢您的帮助),我会更准确。 我正在尝试使用 Python 执行此请求:

req = requests.request('GET','https://api.YXZ.com/1/9/whatever/', cert='certificate.pem')

我有这个错误信息:

requests.exceptions.SSLError: HTTPSConnectionPool(host='api.XZY.com', port=443): 最大重试次数超过 url:/1/9/whatever (由 SSLError(SSLError(336265225, u'[ SSL] PEM 库 (_ssl.c:2603)'),))

我认为这是由于我的证书所致,因为我可以通过基本身份验证执行此请求。

由于以下命令,我可以看到证书中的内容:

openssl x509 -text -inform DER -in certificate.cer

这给了我以下格式的文本:

数据: 签名算法: 发行人 有效性: 主题公钥 签名算法: -----开始证书----- -----证书结束-----

最佳答案

... I would need to get the private key. Which is weird as the Java tool does not need that at all.

如果您想对自己进行身份验证,则始终需要证书的私钥,即服务器端的服务器证书和客户端站点的客户端证书。如果您只有证书而没有私钥,则您只能验证对等方的身份验证而不能验证您自己。这是独立于Java、Python ...

如果您有一个使用 Java 的有效客户端证书,那么您的 keystore 中也有匹配的私钥,但可能没有导出它以供 Python 使用。或者根本没有客户端证书,但您只检查了服务器证书的有效性(不需要私钥)。在这种情况下,您也不应尝试将此证书用作 Python 中的客户端证书。 但是,如果没有任何代码和/或详细的错误消息,很难准确判断问题出在哪里。

关于java - 通过 X.509 客户端证书(.cer 文件)进行 Python 身份验证并与 Java 进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45828023/

相关文章:

java - 使用匿名类创建参数化类型对象

java - hibernate 搜索: Indexed data with Ngram filter and while searching it gives incorrect result due to tokenizing while querying

java - CUDA对齐要求: should I change my data structures?

python - Selenium CSS_Selector 寻找具有特定文本的元素结果是 'NoSuchElementException'

python - 在 OpenCV 中实现 Photoshop 高通滤波器 (HPF)

python - 在 OSX 上安装 TkTreectrl

java - 在 EJB 中使用 SSL 出现异常 : Keystore was tampered with, 或密码不正确

java - 通过Java代码关闭MQ channel

sql-server - 与 SQL Server 的 SSL 连接期间出现问题

ssl - wget 工作时访问 https 时 curl 错误 52