【发布时间】:2015-04-12 14:35:10
【问题描述】:
我不知道如何通过 CXF 3.0.4 JAX-RS 2.0 客户端以编程方式禁用 CN 检查。我的代码如下:
System.setProperty("jsse.enableSNIExtension", "false");
HttpsURLConnection.setDefaultHostnameVerifier(
new HostnameVerifier(){
public boolean verify(String hostname,
SSLSession sslSession) {
return true;
}
});
Client client = ClientBuilderImpl.newClient();
String urlHost = "https://" + centralNode;
WebTarget target = client.target(urlHost).path(BASE_SERVICE_URL);
String encodedpw = Base64.encodeBase64String(passwd.getBytes());
String body = "{\"uid\" : \"" + uid + "\",\"password\": \"" + encodedpw + "\"}";
Response res = target.request(MediaType.APPLICATION_JSON).post(Entity.entity(body, MediaType.APPLICATION_JSON));
如您所见,我已经尝试覆盖默认主机名验证器,并将 jsse.enableSNIExtension 设置为 false。这些都不起作用,我仍然遇到异常:
“https URL 主机名与客户端信任库中服务器证书上的公用名 (CN) 不匹配。确保服务器证书正确,或禁用此检查(不推荐用于生产)设置 CXF 客户端 TLS 配置属性“disableCNCheck”为真。”
请帮忙!
【问题讨论】:
-
您知道禁用主机名检查实际上与禁用任何类型的证书验证相同,因为现在攻击者可以使用由受信任的 CA 签名的任何证书,而不仅仅是与主机匹配的证书姓名?
标签: ssl certificate cxf jax-rs cruisecontrol.net