You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WSO2 Micro Integrator配置密钥库公钥证书未被加载问题

WSO2 Micro Integrator mTLS配置不生效问题排查修复

问题现象

使用Integration Studio 7.2.0的Hello World Docker模板创建MI项目,配置mTLS双向认证时出现以下异常:

  • 已在deployment.toml中编写自定义密钥库、信任库配置:
[keystore.tls]
file_name = "interceptor.jks"
password = "wso2carbon"
alias = "interceptor"
key_password = "wso2carbon"

[truststore]
file_name = "interceptor.jks"
password = "wso2carbon"
alias = "mg"
algorithm="AES"
  • 自定义密钥库interceptor.jks包含两个条目:别名为interceptor的服务端私钥、别名为mg的客户端信任证书
  • 不带跳过证书校验参数调用服务时请求失败,调用命令如下:
curl --cacert interceptor.pem --cert mg.pem --key mg.key  "https://xml-interceptor:8253/api/v1/handle-request" -H "content-type: application/json" -H "accept: application/json" -d '{"requestBody": "eyJuYW1lIjoiVGhlIFByaXNvbmVyIn0="}' -v
  • 添加-k参数跳过证书校验可请求成功,但客户端收到的服务端证书为WSO2默认localhost证书,证书详情:
* Server certificate:
*  subject: C=US; ST=CA; L=Mountain View; O=WSO2; OU=WSO2; CN=localhost
*  start date: Oct 23 07:30:43 2019 GMT
*  expire date: Jan 25 07:30:43 2022 GMT
*  issuer: C=US; ST=CA; L=Mountain View; O=WSO2; OU=WSO2; CN=localhost
*  SSL certificate verify result: unable to get local issuer certificate (20), continuing anyway.
> POST /api/v1/handle-request HTTP/1.1
  • MI运行日志输出SSL握手告警:
[2022-06-15 13:38:29,417]  WARN {SourceHandler} - I/O error: Received fatal alert: unknown_ca
  • 尝试将自定义私钥导入默认wso2carbon.jks后问题仍存在。

排查修复步骤

核心判断:8253端口HTTPS监听器未加载自定义密钥库,仍在使用内置默认证书,问题集中在文件挂载、配置语法、监听器参数、密钥库有效性四个环节,按以下顺序排查:

  1. 确认密钥库文件挂载路径正确
    • Docker模板运行的MI容器,默认从<MI_HOME>/repository/resources/security/目录读取密钥库文件,仅在deployment.toml写文件名无法让服务找到文件。
    • 进容器执行ls /home/wso2carbon/wso2mi-*/repository/resources/security/,确认interceptor.jks存在且对wso2carbon用户可读。如果是docker-compose部署,检查volume映射规则,必须将本地jks文件映射到容器内上述security目录,不能只挂载conf目录。
  2. 修正deployment.toml配置语法错误
    • 当前信任库配置存在无效字段:alias不属于truststore的合法配置项,truststore会自动读取库内所有受信任证书条目,无需指定单独别名;JKS信任库默认证书算法为SunX509,错误配置algorithm="AES"会导致配置解析失败。修正后的全局密钥库配置如下:
    [keystore.tls]
    file_name = "interceptor.jks"
    password = "wso2carbon"
    alias = "interceptor"
    key_password = "wso2carbon"
    
    [truststore]
    file_name = "interceptor.jks"
    password = "wso2carbon"
    
    • 修改后必须进容器确认deployment.toml内容已更新,避免因挂载路径错误导致容器内仍使用旧配置。
  3. 补充HTTPS监听器的mTLS配置
    • 仅配置全局keystore和truststore不会自动让8253端口的HTTPS传输层加载自定义证书,也不会开启双向证书校验,必须在deployment.toml中补充传输层配置,该部分配置优先级高于全局密钥库配置:
    [transport.http]
    listener.keystore.file = "interceptor.jks"
    listener.keystore.password = "wso2carbon"
    listener.keystore.key_password = "wso2carbon"
    listener.keystore.alias = "interceptor"
    listener.truststore.file = "interceptor.jks"
    listener.truststore.password = "wso2carbon"
    listener.ssl.verify_client = "require"
    
    • 其中listener.ssl.verify_client = "require"表示强制开启双向认证,要求客户端必须提供信任库内签发的合法证书。
  4. 验证密钥库本身有效性
    • 本地执行keytool命令检查jks内的条目类型是否正确:
    keytool -list -v -keystore interceptor.jks -storepass wso2carbon
    
    • 确认输出中interceptor条目类型为PrivateKeyEntry(服务端私钥),mg条目类型为trustedCertEntry(客户端信任证书),不要将两类证书的存储类型搞反。同时检查服务端证书的SAN扩展字段,必须包含调用时使用的域名xml-interceptor,否则证书加载成功后仍会报域名不匹配错误。
  5. 清理配置冲突
    • 还原之前修改的默认wso2carbon.jks文件,不要同时修改默认密钥库和自定义keystore配置,避免参数冲突。重启容器时删除旧的持久化配置卷,防止旧配置缓存覆盖新参数。

有效性验证

配置修改完成重启容器后,执行以下命令检查服务端返回的证书:

echo | openssl s_client -connect xml-interceptor:8253 2>/dev/null | openssl x509 -noout -subject -issuer

输出的证书主体不再是CN=localhost即为证书加载成功,此时再执行不带-k参数的curl命令即可正常完成mTLS握手,日志中也不会再出现unknown_ca告警。如果仍返回默认证书,直接查看MI启动日志中Loading keystore开头的日志行,确认服务启动时实际加载的密钥库路径,顺着路径排查挂载或配置错误即可。


内容的提问来源于stack exchange,提问作者Amila Senadheera

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 03:33:08