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

WireMock如何代理至要求mTLS的服务器?

WireMock代理mTLS服务器401证书无效问题解决方案

问题概述

此前已实现WireMock记录请求响应,但代理到要求mTLS的服务器时始终返回401,提示证书无效。按官方文档配置信任存储后问题依旧,查询相关内容发现多是被测系统与WireMock间的mTLS配置,而非WireMock出站代理的配置,还看到有Issue提到WireMock代理无法提供证书,疑问是否当前无法实现该需求。

关键配置区分

很多人会混淆WireMock的两类SSL配置:

  • 信任存储(truststore):用于让WireMock信任目标服务器的CA证书,确保SSL连接能建立,但这不是mTLS要求的客户端证书认证环节
  • 密钥存储(keystore):WireMock作为客户端向目标服务器提供自身的客户端证书,这才是满足mTLS双向认证的核心配置

具体配置步骤

1. 准备客户端密钥库

将你的客户端证书(含私钥)打包为JKS或PKCS12格式的密钥库,示例用keytool生成PKCS12转JKS:

keytool -importkeystore -srckeystore your-client-cert.p12 -srcstoretype PKCS12 -destkeystore wiremock-client-keystore.jks -deststoretype JKS

2. 配置WireMock SSL上下文

Java代码启动方式

WireMockServer wireMockServer = new WireMockServer(options()
    .httpsPort(8443)
    // 可选:目标服务器用自签证书时,配置信任存储信任其CA
    .trustStorePath("path/to/truststore.jks")
    .trustStorePassword("your-truststore-pass")
    // 核心:配置WireMock作为客户端的密钥存储,提供给目标服务器认证
    .keystorePath("path/to/wiremock-client-keystore.jks")
    .keystorePassword("your-keystore-pass")
    // 若密钥与密钥库密码不同,需单独指定
    .keyManagerPassword("your-key-pass")
);
wireMockServer.start();

命令行启动方式

java -jar wiremock-jre8-standalone.jar \
  --https-port 8443 \
  --truststore path/to/truststore.jks \
  --truststore-password your-truststore-pass \
  --keystore path/to/wiremock-client-keystore.jks \
  --keystore-password your-keystore-pass \
  --key-manager-password your-key-pass

3. 配置代理映射

创建代理映射文件__files/mappings/proxy-mapping.json,确保请求转发到目标服务器:

{
  "request": {
    "method": "ANY",
    "urlPattern": ".*"
  },
  "response": {
    "proxyBaseUrl": "https://your-target-mtls-server.com"
  }
}

关于GitHub Issue的说明

你提到的Issue是早期版本WireMock的代理证书支持问题,当前WireMock 3.x及以上版本已完全支持出站代理的mTLS配置,只要正确设置密钥存储和信任存储即可正常工作。

排查建议

  1. 检查密钥库是否包含完整的客户端证书链(含中间CA),缺失链可能导致服务器认证失败
  2. 验证密钥库、信任库的密码正确性,密码错误会导致证书无法加载
  3. 确认目标服务器支持的证书格式(部分服务器可能仅接受PKCS12)
  4. 启用WireMock调试日志查看SSL握手细节:
    java -jar wiremock-jre8-standalone.jar --verbose --debug
    
  5. 用openssl直接测试客户端证书有效性,排除证书本身问题:
    openssl s_client -connect your-target-mtls-server.com:443 -cert your-client-cert.pem -key your-client-key.pem -CAfile server-ca.pem
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 06:35:04