Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过X.509客户端证书(.cer文件)进行Python身份验证并与Java进行比较_Java_Python_Ssl_Python Requests_X509certificate - Fatal编程技术网

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

通过X.509客户端证书(.cer文件)进行Python身份验证并与Java进行比较,java,python,ssl,python-requests,x509certificate,Java,Python,Ssl,Python Requests,X509certificate,我目前正在尝试用python复制一个java工具,该工具允许用户对云中的应用程序进行一些RESTAPI调用。 使用此Java工具,您可以创建使用传统用户/密码类型凭据或.cer证书的脚本 我可以使用请求库在Python中轻松地重新创建用户/密码身份验证 但对于证书的方式,这是另一回事。几天来,我一直在寻找用Python实现的解决方案,但看起来.cer证书对于Python来说还不够 我对SSL/TLS非常陌生,因此我可能不了解它背后的所有概念,但似乎除了.cer证书(这是一种PEM格式,包含公钥和

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

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

但对于证书的方式,这是另一回事。几天来,我一直在寻找用Python实现的解决方案,但看起来.cer证书对于Python来说还不够

我对SSL/TLS非常陌生,因此我可能不了解它背后的所有概念,但似乎除了.cer证书(这是一种PEM格式,包含公钥和“----开始证书----------结束证书------”部分)之外,我还需要获取私钥。这很奇怪,因为Java工具根本不需要它

如果有人能在这个话题上启发我,那就太棒了

谢谢

克里斯

其他信息:

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

req=requests.request('GET','',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-notify DER-in certificate.cer

这给了我一个如下格式的文本:

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

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

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

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

我觉得请求库必须支持一些ssl/tls。参见文档。另请参见。了解ssl/tlsThx Vasif的绝佳资源。我将深入了解itThx Steffen,如果有帮助的话,我添加了附加信息。@ChrisKeo:附加信息仅表明您试图使用证书进行客户端身份验证,但该证书没有私钥,正如我所解释的,这是必需的。现在还不清楚原始代码是否真的使用了客户端证书——在这种情况下,您还需要从原始密钥存储中导出私钥,而不仅仅是证书。因此,如果我理解得很好,我需要从原始密钥存储中导出私钥(我必须了解如何做到这一点)然后我将能够创建一个彻底的.pem文件,结合私钥和我已经拥有的证书。这是正确的吗?我知道这是一个很长的时间(我发现了答案很久以前),但再次感谢你的答案。在随后的研究中,我意识到我试图复制的身份验证没有使用标准的PKI体系结构。