使用Clarifai Python GRPC客户端调用模型时出现握手错误如何解决
问题原因
你遇到的SSL证书验证失败报错,是gRPC版本更新后内置的根证书信任列表与Clarifai服务端使用的SSL证书不兼容导致的。
修复方案
按优先级选择以下方案操作即可:
- 方案一:降级gRPC到兼容版本
两周前运行正常,直接将gRPC相关包回退到当时的版本即可,参考命令:
pip install grpcio==1.38.1 grpcio-tools==1.38.1 clarifai-grpc==7.4.0
安装完成后直接运行原有脚本即可恢复正常。
- 方案二:显式指定系统根证书初始化通道
如果不想降级gRPC版本,替换原有代码中初始化channel的代码即可:
import grpc from clarifai_grpc.grpc.api import service_pb2_grpc # 不同操作系统根证书路径不同,按需调整 # macOS路径 cert_path = "/etc/ssl/cert.pem" # Linux路径 # cert_path = "/etc/ssl/certs/ca-certificates.crt" # Windows路径可自行导出系统受信任根证书后指定本地路径 with open(cert_path, "rb") as f: root_certs = f.read() credentials = grpc.ssl_channel_credentials(root_certificates=root_certs) channel = grpc.secure_channel("api.clarifai.com:443", credentials) stub = service_pb2_grpc.V2Stub(channel)
剩下的代码逻辑不需要修改,直接运行即可。
- 方案三:临时关闭证书验证(仅测试场景使用,禁止生产环境使用)
如果只是本地测试,不想修改证书配置,可以临时关闭SSL验证,替换初始化channel的代码为:
import grpc from clarifai_grpc.grpc.api import service_pb2_grpc credentials = grpc.ssl_channel_credentials() channel = grpc.secure_channel( "api.clarifai.com:443", credentials, options=[("grpc.enable_http_proxy", 0), ("grpc.ssl_target_name_override", "api.clarifai.com")] ) stub = service_pb2_grpc.V2Stub(channel)
内容的提问来源于stack exchange,提问作者Bernardo
相关产品推荐
相关产品推荐

