WSO2 API Manager 4.1调用HTTPS后端报certificate_unknown及400错误求助
解决WSO2 API Manager 4.1调用HTTPS后端返回400的问题
核心问题定位
日志中的[WARN - SourceHandler I/O error: Received fatal alert: certificate_unknown]是关键,说明APIM的客户端信任存储未信任后端HTTPS服务的证书,导致SSL握手失败,最终返回400状态码。
具体解决步骤
1. 导出后端HTTPS服务的证书
使用OpenSSL命令导出后端证书(替换<backend-host>和<port>为实际地址):
openssl s_client -connect <backend-host>:<port> < /dev/null | openssl x509 -outform PEM > backend-cert.pem
如果后端使用私有CA签发的证书,需导出CA根证书而非仅服务器证书,否则会出现信任链不完整问题。
2. 将证书导入APIM的客户端信任存储
APIM默认的客户端信任存储路径为<APIM_HOME>/repository/resources/security/client-truststore.jks,执行以下命令导入证书:
keytool -importcert -alias backend-cert -file backend-cert.pem -keystore <APIM_HOME>/repository/resources/security/client-truststore.jks -storepass wso2carbon
alias可自定义,建议用易识别的名称- 输入
yes确认信任该证书
3. 验证证书导入结果
执行命令确认证书已成功导入:
keytool -list -keystore <APIM_HOME>/repository/resources/security/client-truststore.jks -storepass wso2carbon | grep backend-cert
若能看到证书条目,说明导入成功。
4. 检查deployment.toml的SSL配置
确保APIM的SSL传输配置指向正确的信任存储,在<APIM_HOME>/repository/conf/deployment.toml中确认以下配置:
[transport.passthru_ssl] trust_store = "${carbon.home}/repository/resources/security/client-truststore.jks" trust_store_password = "wso2carbon"
若之前修改过配置,需确保没有覆盖或错误配置该参数。
5. 开启DEBUG日志排查细节(可选)
若问题仍存在,开启Wire日志查看详细SSL握手过程:
在<APIM_HOME>/repository/conf/log4j2.properties中添加:
logger.org.apache.synapse.transport.http.wire.name = Wire logger.org.apache.synapse.transport.http.wire.level = DEBUG
重启APIM后重新调用API,查看日志中SSL握手的具体错误信息,进一步定位问题。
内容的提问来源于stack exchange,提问作者Tos Mario
相关产品推荐
相关产品推荐

