【问题标题】:Python authentication via X.509 client certificate (.cer file) and comparison with Java通过 X.509 客户端证书(.cer 文件)进行 Python 身份验证并与 Java 进行比较
【发布时间】:2018-01-31 08:28:45
【问题描述】:

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

我可以使用 requests 库轻松地在 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

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

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

【问题讨论】:

  • 我觉得 requests 库必须支持一些 ssl/tls。请参阅文档。
  • 另见hpbn.co/transport-layer-security-tls。了解 ssl/tls 的绝佳资源
  • 谢谢瓦西夫。我会深入研究一下

标签: java python ssl python-requests x509certificate


【解决方案1】:

...我需要获取私钥。这很奇怪,因为 Java 工具根本不需要它。

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

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

【讨论】:

  • 谢谢 Steffen,如果有帮助,我添加了附加信息。
  • @ChrisKeo:附加信息仅表明您正在尝试使用证书进行客户端身份验证,但该证书没有私钥 - 正如我所解释的那样,这是需要的。目前尚不清楚原始代码是否真的使用了客户端证书——在这种情况下,您还需要从原始密钥存储中导出私钥,而不仅仅是证书。
  • 所以如果我理解得很好,我需要从原始密钥库中导出私钥(我必须找出如何这样做)然后我将能够创建一个完整的 .pem 文件,结合私钥和我已经拥有的证书。对吗?
  • 我知道已经很久了(我很久以前就找到了答案),但再次感谢您的回答。通过随后的研究,我意识到我试图复制的身份验证没有使用标准的 PKI 架构。
猜你喜欢
  • 1970-01-01
  • 2015-02-26
  • 2017-12-26
  • 2010-11-08
  • 1970-01-01
  • 2013-02-02
  • 1970-01-01
  • 2012-01-10
  • 1970-01-01
相关资源
最近更新 更多