Docker部署Appwrite后Python调用接口报SSL自签名证书验证错误求解
问题原因
报错核心原因是Docker部署的Appwrite默认使用自签名SSL证书,本地Python的请求库默认不信任非权威CA签发的证书,和你猜测的证书信任问题完全吻合。
解决方法
方案1:本地测试快速跳过验证(仅限开发环境使用)
直接在Appwrite客户端配置中添加set_self_signed(True)参数,跳过证书校验,修改后的代码如下:
from appwrite.client import Client from appwrite.services.users import Users client = Client() (client .set_endpoint('https://localhost/v1') # Your API Endpoint .set_project('testwriter') # Your project ID .set_key('b5b793e92b7f1badf34c3ef0ebfd475418a2372306ea4094eb5efb20bdc76e283e28345801d34c441149cc796f0ea7608ff0696a2121f577ca2beada75f904a46b1293a1d57699eed9750a2f12c4daa261e73231f6479e425276e7df053305118080f8280e7462b01b45349310f7086fc90a606d0d5ff2e102d7119ff627e0d4') # Your secret API key .set_self_signed(True) # 新增该行,跳过自签名证书校验 ) users = Users(client) result = users.create('email@example.com', 'password')
注意:该方案会降低请求安全性,绝对禁止在生产环境使用
方案2:长期使用,信任自签名证书
如果你需要保留HTTPS访问,可按以下步骤操作:
- 从Appwrite容器中导出证书:执行命令
docker cp appwrite:/etc/nginx/ssl/appwrite.crt ~/appwrite.crt,如果你的Appwrite容器名有自定义,替换命令中的appwrite为你的容器名 - 将导出的证书添加到本地系统的受信任根证书列表:
- MacOS:双击证书文件,在钥匙串中设置为「始终信任」
- Linux:将证书移动到
/usr/local/share/ca-certificates/目录,执行sudo update-ca-certificates - Windows:右键证书文件,选择「安装证书」,导入到「受信任的根证书颁发机构」存储区
- 也可以直接在Appwrite客户端配置中指定证书路径,添加
.set_certificate("~/appwrite.crt")即可
方案3:本地开发改用HTTP访问
如果没有HTTPS需求,可直接将接口地址的协议改为HTTP,注意确认Docker部署时是否映射了Appwrite的80端口,如果映射的是自定义端口(比如8080),需要在地址中带上端口:
.set_endpoint('http://localhost:80/v1') # 替换为你实际的HTTP访问地址
注意事项
- 跳过SSL验证、使用HTTP访问的方案仅适合本地开发环境,生产环境必须使用正规CA机构签发的SSL证书,避免数据泄露风险
- 如果修改过Appwrite的默认端口映射,需要在endpoint地址中填写实际映射的端口
内容的提问来源于stack exchange,提问作者vwdewaal
相关产品推荐
相关产品推荐

