python-3.x - 如何修复 ssl_certification 错误,该错误由 ssl 包生成并在 restAPI 中使用
问题描述
我正在从 vCenter 6.5 下载 SSL 证书并将证书复制到如下文件中。
cert = ssl.get_server_certificate((server, port))
with open(file_name, "w") as outfile:
outfile.write(cert)
稍后当我在 restAPI 中使用 file_name 时,出现错误
[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:618)
我尝试在 Shell 中交叉验证证书,但出现以下错误
# openssl verify -verbose -CAfile file_name file_name
file_name: CN = pn-a26-ub-15-7-vc.cisco.com, C = US
error 20 at 0 depth lookup:unable to get local issuer certificate
有人可以帮助解决生成证书的问题吗
解决方案
您通过-CAfile
参数传递的文件应包含用于颁发要验证的证书的根证书(和中间证书,如果有的话)。您似乎正在通过服务器证书本身。
如果这是 CA 签名的证书,您可以省略该-CAfile
参数。如果没有,您应该以 PEM 格式提供发行者链。据我所知,vCenter 使用自签名证书。您可以使用此处描述的方法下载根证书。
推荐阅读
- javascript - 如何将此函数从 lambda 更改为 rds aurora
- python - 同时运行2个python窗口
- javascript - 在 JavaScript 中将 JWT 令牌转换为 JSON
- amazon-web-services - 在 AWS 上缓冲网站事件流的经济有效方式?
- flutter - Flutter/Dart Firestore 查询:如何获取今天在文档中开始/结束日期之间的所有文档?
- javascript - 如何动态地将下拉列表添加到 td
- json - 如何在 discord py rewrite 中阻止使用 .json 文件的用户?
- azure - Azure 自动化运行手册中的 Powershell 脚本文件(Stop-Transcript 错误 - 主机当前未在转录)
- visual-studio - 如何为 ItemGroup (*.csproj) 指定 '|net35|net40|net45|'.Contains($(TargetFramework)) 条件?
- php - mod_rewrite 不适用于没有文件扩展名的查询字符串