Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.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
Python中的SSL:为什么它不';不向服务器发送证书?_Python_Ssl_Ssl Certificate_X509_Handshake - Fatal编程技术网

Python中的SSL:为什么它不';不向服务器发送证书?

Python中的SSL:为什么它不';不向服务器发送证书?,python,ssl,ssl-certificate,x509,handshake,Python,Ssl,Ssl Certificate,X509,Handshake,我正在编写一些软件,应该从SSL安全的网页获取信息。下面是我用来连接服务器的一段代码 s = socket.socket (socket.AF_INET, socket.SOCK_STREAM) ssl_sock = ssl.wrap_socket ( s, ca_certs = '/home/stilz/Desktop/Certyfikaty/GLOWNE_CA.cer', cert_reqs = ssl.CERT_REQUIRED, ssl_version =

我正在编写一些软件,应该从SSL安全的网页获取信息。下面是我用来连接服务器的一段代码

s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
ssl_sock = ssl.wrap_socket (
    s,
    ca_certs = '/home/stilz/Desktop/Certyfikaty/GLOWNE_CA.cer',
    cert_reqs = ssl.CERT_REQUIRED,
    ssl_version = ssl.PROTOCOL_SSLv3,
)
ssl_sock.connect ((HOST, PORT))
然而,这不起作用。它引发异常,并显示消息“握手警报失败”。我捕获了一些来自脚本的TCP数据包,以及来自Internet Explorer的相应数据包,发现我的脚本根本不发送证书(服务器返回类似“致命:未提供证书”)而IE正常发送。据我所知,文件ca.cer是x509证书(以“----开始证书------”开头)

请帮帮我,告诉我做错了什么。如果我提供的信息很少,请告诉我

关于

如果服务器请求(并要求)客户端发送证书,则需要提供
ssl.wrap_socket
证书路径(
certfile
)及其匹配的私钥(
keyfile
)。
ca\u certs
参数仅用于客户端根据已知的ca证书验证服务器的证书,它与发送客户端证书无关


您可能需要从IE导出客户端证书和私钥(然后将其转换为PEM格式)。

首先,您需要确定是否需要在服务器上进行身份验证(在这种情况下,证书仅发送到服务器),或者您需要验证服务器的真实性(在这种情况下,证书不会发送到服务器)

现在,关于代码中的问题:

案例1:您不需要在服务器上进行身份验证。在这种情况下,您不需要指定您的证书,并且不会向服务器发送任何内容

案例2:您需要在服务器上对自己进行身份验证。在这种情况下,您需要在keyfile和certfile参数中提供您的证书和私钥文件。只有这样,您的证书才会发送到服务器(并且在握手中使用私钥)

我猜您的案例1实际上是这样的。因此,首先您需要通过使用web浏览器连接到服务器并检查站点的证书链来检查服务器是否提供了有效的证书。站点可能发送其证书,但忽略了中间CA证书


无论如何,我想提醒您,我建议您重新阅读。

IE使用智能卡获取密钥。是公用的还是专用的?据我所知,从智能卡获取私钥是不可能的。我说的对吗?无论如何,我可以做些什么从IE导出这些东西?提前谢谢。智能卡可能会提供证书和t私钥。但是,它可能会嵌入加密功能,以便私钥不需要(或不能)离开智能卡。您可能无法将私钥以PEM格式取出,以便
ssl.ssl\u wrap
使用。根据智能卡使用的接口,可能值得查找“PKCS\11”在Python(或任何智能卡格式)中。我尝试过OpenSC工具(pkcs11和pkcs15),但显然它们无法列出密钥。如果IE可以做到这一点,我必须做什么?我尝试过一些USB嗅探(它是USB读卡器)但我注意到没有流量。也许你的卡与PKCS#11不兼容。试着找出Windows下使用的是哪些驱动程序。@stilz可能是OpenSC无法访问该卡(某些设备会出现这种情况)。在Windows上使用Python有什么特别的原因吗?更适合Windows的驱动程序(如.NET)将能够通过CryptoAPI(IE的工作方式)访问智能卡。欢迎使用。您可以通过编辑来更新自己的问题。您可以对问题进行投票(向上投票或向下投票)如果你得到了满足你需要的答案并回答了你的问题,你可以将其标记为@Eugene同意的答案。你可以在问题中说,这是关于在Windows下使用智能卡上的证书/私钥(如果它在Windows下?…
/home/stilz/Desktop/
看起来不是这样)。显然,我没有阅读您提供的部分。它解释了如何工作。现在我必须获得私钥(certfile和公钥/私钥都在智能卡上)。如果您能提供帮助,将不胜感激(请参阅下一篇文章下面的评论)。提前感谢