首页 > 解决方案 > 无法在 python 中加载 ssl 证书:TypeError: certfile should be a valid filesystem path

问题描述

我正在尝试使用 Python3 中的客户端证书(自签名)发送 POST 请求。该应用程序在 Docker 上运行(尽管它应该没有区别)。

当我尝试在上下文中加载证书和密钥文件时,出现以下错误。我已验证证书存在于文件系统中的路径 /app 中。这里出了什么问题?

TypeError: certfile 应该是一个有效的文件系统路径

这是我的代码:

import ssl

context = ssl._create_unverified_context()
context.load_cert_chain("/app/attendance.pem", "/app/key.pem")

conn = http.client.HTTPSConnection("someHost", 8200, context) # The error is thrown on this line

标签: pythonpython-3.xssl

解决方案


conn = http.client.HTTPSConnection("someHost", 8200, context) # The error is thrown on this line

HTTPSConnection 的文档中

class http.client.HTTPSConnection(host, 
   port=None, 
   key_file=None, 
   cert_file=None, 
   [timeout, ]
   source_address=None, *, 
   context=None, 
   ...

基于此,第三个参数是key_file。这意味着您的context将被解释为关键。这会导致您看到错误消息,因为上下文不是有效路径。与其使用(错误的)位置参数,context不如使用(正确的)命名参数:

conn = http.client.HTTPSConnection("someHost", 8200, context = context)

推荐阅读