Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.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_Python Requests - Fatal编程技术网

Python 如何找到SSL证书文件的路径?

Python 如何找到SSL证书文件的路径?,python,ssl,python-requests,Python,Ssl,Python Requests,我想使用Python请求来获取公司内部网页的内容(比如,)。我可以在浏览器中看到此页面,并且可以“查看证书” 因此,现在我想获取包含请求的网页,因此我会: import requests requests.get('https://internal.com') 但我得到了一个警告: SSLError: [Errno 1] _ssl.c:504: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify

我想使用Python请求来获取公司内部网页的内容(比如,)。我可以在浏览器中看到此页面,并且可以“查看证书”

因此,现在我想获取包含请求的网页,因此我会:

import requests
requests.get('https://internal.com')
但我得到了一个警告:

SSLError: [Errno 1] _ssl.c:504: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
所以我想我需要指定一个证书文件:

requests.get('https://example.com', cert=('/path/server.crt', '/path/key'))

但是如何找到证书文件的路径?我可以在浏览网页时从Chrome或IE获取此信息吗?或者我缺少了更基本的东西?

cert参数用于客户端身份验证。如果你想向服务器证明你的身份。如果这是问题所在,则服务器上会出现错误

您需要的是服务器端身份验证。服务器必须证明其身份。 由于您正在连接到内部服务器,因此请求在其提供的捆绑包中没有此服务器证书,因此无法确认服务器标识。 您必须使用内部CA包提供请求。 要做到这一点,您必须先从浏览器中提取它

从文档中:

You can also pass "verify" the path to a "CA_BUNDLE" file for private certs.
You can also set the "REQUESTS_CA_BUNDLE" environment variable.
Chrome(短版):

  • 将其放入您的URL栏
    chrome://settings/certificates
  • 选择“权限”选项卡
  • 找到您的内部CA并单击导出
  • 最佳格式为“Base64编码证书链”
  • 保存到您将再次找到它的位置
  • 现在可以使用`request.get(url,verify=)
您还可以通过以下方式访问证书管理器:

(chrome的步骤与其他浏览器非常相似)

  • 转到“设置”
  • 单击底部的“显示高级设置”
  • HTTPS/SSL->“管理证书”
  • 见上文

确保在导出crt时,在文件类型“另存为”下拉列表中选择“带链导出”-这样它将在一个文件中包含所有三个证书。这就是我的问题。

确切的错误是什么?@brent5000:你试过伪造用户代理吗?通过头['user-agent']伪造用户代理会返回相同的SSLError(刚刚添加到问题中)。谢谢,我能够根据这些说明导出证书。但是,当我将.cer传递给requests.get('https://...,verify='/path/to/.ces',我得到错误:[Errno 1]_ssl.c:504:error:14090086:ssl例程:SSL3_GET_SERVER_CERTIFICATE:CERTIFICATE verify失败。请求似乎不喜欢我的特定证书,但您回答了我的问题,非常感谢。@brent5000另一种方法是单击url栏旁边的ssl按钮。这让您可以查看当前站点的证书链n导出顶部的证书,然后重试。如果Chrome浏览器无法执行此操作,会发生什么情况?我尝试使用firefox执行@t-8ch建议的操作,但无法导出证书。没有“Base64编码的证书链”或任何其他链导出选项。我只有“Base-64编码的X.509(.CER)”.这是否意味着我无法导出整个链?