使用 Python 请求信任自签名证书

Vij*_*man 7 python apache ssl python-requests

我的 apache ssl conf 具有以下配置

#   Server Certificate:
SSLCertificateFile /etc/pki/tls/certs/localhost.crt

#   Server Private Key:
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
Run Code Online (Sandbox Code Playgroud)

我没有此服务器的 CA 证书。我仍然可以将 localhost.crt 安装到我的客户端以成功验证我的服务器吗?

在客户端:我使用 Python 请求库 (2.2.1)。使用默认 CA BUNDLE 路径。即使我将 localhost.crt 添加到默认路径中的 cacert.pem 中,我也无法看到验证通过。我看到异常:

    File "/usr/lib/python2.7/site-packages/requests/adapters.py", line 385, in send
    raise SSLError(e)
SSLError: [Errno 1] _ssl.c:504: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
Run Code Online (Sandbox Code Playgroud)

我做错了什么吗?我应该只添加在服务器中签署 localhost.crt 的 CA 吗?

谢谢,维杰

Wal*_*lly 5

如果您提供代码并且更清楚您在做什么,那么您会得到一个很好的答案。

如果您不想在使用无效证书时出现错误,请尝试该verify=False属性。

>>> requests.get('https://kennethreitz.com', verify=False)

如果您想使用自定义证书,请将证书放在脚本文件夹中并使用参数cert=('/path/client.cert', '/path/client.key')

>>> requests.get('https://kennethreitz.com', cert=('/path/client.cert', '/path/client.key'))

有关更多信息,请阅读docs.python-requests.org/en/master/user/advanced/站点