我目前正在尝试在python中复制一个java工具,允许用户继续对云中的应用程序进行一些REST API调用。 使用此Java工具,您可以创建使用传统用户/密码类型凭据或.cer证书的脚本。
我可以使用请求库轻松地在Python中重新创建用户/密码身份验证。
但对于证书方式,这是另一个故事。我一直在寻找在Python中做的解决方案,但看起来.cer证书对于Python来说是不够的。
我是SSL / TLS的新手,所以我可能没有理解它背后的所有概念,但似乎除了.cer证书(这是一个PEM格式,包含公钥和“---” --BEGIN CERTIFICATE ----- ----- END CERTIFICATE -----“part”,我需要获取私钥。这很奇怪,因为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 lib(_ssl.c:2603)'),))
我认为这是由于我的证书,因为我可以使用基本身份验证执行此请求。
由于以下命令,我可以看到证书中的内容:
openssl x509 -text -inform DER -in certificate.cer
这给了我一个格式如下的文本:
数据: 签名算法: 发行者 有效性: 主题公钥 签名算法: -----开始证书----- -----结束证书-----
答案 0 :(得分:-1)
...我需要获取私钥。这很奇怪,因为Java工具根本不需要它。
如果要对自己进行身份验证,即服务器端的服务器证书和客户端站点的客户端证书,则始终需要证书的私钥。如果您只有证书但没有私钥,则只能验证对等方的身份验证,但不能自行进行身份验证。这与Java,Python ......无关......
如果你有一个带有Java的工作客户端证书,那么你的密钥库中也有匹配的私钥,但可能没有导出它以供Python使用。或者,根本没有客户端证书,但您只检查了服务器证书的有效性(不需要私钥)。在这种情况下,您也不应该尝试将此证书用作Python中的客户端证书。 但是,如果没有任何代码和/或详细的错误消息,很难确切地说出问题是什么。