linux - Python - [SSL: CERTIFICATE_VERIFY_FAILED] 证书验证失败:无法获取本地颁发者证书 (_ssl.c:1091)
问题描述
我有一个 Amazon linux 2 虚拟机,我正在从这个虚拟机发出一个 python 请求。为了提出请求,我使用自签名证书。
我已将自签名证书文件内容附加到文件“/etc/pki/tls/certs/ca-bundle.crt”中。
CURL 命令工作正常,但是当使用 python 的 requests 方法发出请求时,它会抛出以下错误。
错误:( 由 SSLError(SSLCertVerificationError(1,'[SSL: CERTIFICATE_VERIFY_FAILED] 证书验证失败:无法获取本地颁发者证书(_ssl.c:1091)')引起))
我尝试通过提供“MyAppcert.crt”和“ca_bundle.crt”文件的路径来对 Python 请求方法使用“验证”参数,但是这两种方法都失败了。
import requests
requests.get("https://<my-endpoint>:8888/", verify="/home/ec2-user/ssl_cert/MyAppcert.crt")
同样的用例在 Windows 服务器上运行良好。
任何帮助将不胜感激。
问候,
拉胡尔·库姆哈尔
解决方案
@SteffenUllrich 感谢您的回复。我使用“openssl x509 -in file.pem -text”验证了我的证书,发现缺少“keyUsage = Certificate Sign”。使用“keyUsage = Certificate Sign”创建新证书后,问题已解决。
推荐阅读
- google-apps-script - Google Apps 脚本配额如何用于网络应用程序中的 doGet 和 doPost 函数?
- ray - object_store_memory 和 redis_max_memory 有什么关系?
- fortran - 指数泰勒级数的问题
- python - Python中的输入输出隐马尔可夫模型实现
- flutter - 在 Flutter 中请求位置时,BLoC 不会产生状态
- javascript - Discord bot 获取所有渠道中的用户数
- android - 找不到带有哈希字符串“android-Q”的目标
- java - 返回单词列表中可以用输入字符的子集组成的所有单词的集合
- blockchain - 许可的区块链和网络节点
- python - 如何在 AWS sagemaker 上选择超参数来训练好的对象检测模型?