如何为Wiremock/Mockserver配置自定义域名用于通配符证书测试?
实现方案
结论
你描述的通配符证书验证场景完全可以通过WireMock或MockServer两款Java生态下的服务模拟工具实现,以下给出WireMock的实操方案:
步骤1:生成含通配符域名的密钥库
首先使用JDK自带的keytool工具生成包含*.dev.domain通配符证书的PKCS12格式密钥库,执行命令如下:
keytool -genkeypair -alias wildcard-dev -keyalg RSA -keysize 2048 \ -storetype PKCS12 -keystore keystore.p12 -validity 365 \ -dname "CN=*.dev.domain, OU=Test, O=Test, L=Beijing, ST=Beijing, C=CN" \ -storepass changeit -keypass changeit
你也可以导入已有的通配符证书到密钥库中使用。
步骤2:启动WireMock并加载自定义密钥库
独立运行模式
直接通过启动参数指定HTTPS端口和密钥库路径即可:
java -jar wiremock-jre8-standalone-2.35.0.jar \ --https-port 8443 \ --https-keystore ./keystore.p12 \ --keystore-password changeit \ --keystore-type PKCS12
JUnit集成模式
在测试代码中初始化WireMock时传入HTTPS配置:
@Rule public WireMockRule wireMockRule = new WireMockRule(options() .httpsPort(8443) .keystorePath("./keystore.p12") .keystorePassword("changeit") .keystoreType("PKCS12") );
步骤3:自定义域名路由配置
不需要修改WireMock的服务绑定配置,仅需要在被测客户端所在的主机上修改hosts文件,添加如下映射即可:
<WireMock服务所在IP> test.dev.domain
被测客户端访问https://test.dev.domain:8443时,请求会自动路由到WireMock服务,WireMock返回的通配符证书可正常匹配该域名,即可验证客户端对通配符证书的支持逻辑。
可选:多域名Stub匹配
如果需要针对不同的二级域名返回不同的模拟响应,可以通过匹配Host请求头实现,示例如下:
WireMock.stubFor(get(urlEqualTo("/check")) .withHeader("Host", equalTo("test.dev.domain")) .willReturn(aResponse() .withStatus(200) .withBody("Matched test.dev.domain")));
MockServer适配方案
如果偏好使用MockServer,仅需要在启动时指定自定义密钥库参数即可:
java -jar mockserver-netty-5.15.0-jar-with-dependencies.jar \ -Dmockserver.ssl.keyStorePath=./keystore.p12 \ -Dmockserver.ssl.keyStorePassword=changeit \ -serverPort 8443
后续域名路由配置逻辑和WireMock一致。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

