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 /任何(由SSLError(SSLError(336265225,u'[SSL] PEM lib(_ssl.c:2603)'),))

我相信这是由于我的证书,因为我可以使用基本身份验证执行此请求。

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

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

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

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

最佳答案

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


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

如果您拥有使用Java的有效客户证书,则您的密钥存储区中还将具有匹配的私钥,但可能没有导出该证书供Python使用。或者,根本没有客户端证书,但是您仅检查服务器证书的有效性(不需要私钥)。在这种情况下,您也不应尝试将此证书用作Python中的客户端证书。
但是,很难准确地知道没有任何代码和/或详细的错误消息是什么问题。

相关文章:

java - 使用CDI @Named CDI没有任何价值吗?

java - 使类抽象vs使构造函数私有

python - Python脚本无法在没有密码的情况下连接到MySQL数据库

android - 网络服务,Android客户端,SSL

c - C上的SMTP:通过OpenSSL的STARTTLS

java - 使用JAXB时如何避免Android上的StAX API错误?

java - Java Runtime.exec在Linux中空间不足时失败

python - 熊猫在多列数据框上应用功能

python - 如何将字符串的各种格式转换为int列表? (蟒蛇)

amazon-web-services - 将CloudFront分配与Route 53域相关联的问题