我不知道如何以編程方式禁用CXF 3.0.4 JAX-RS 2.0客戶端的CN檢查。我的代碼如下:如何禁用CN檢查CXF 3.0.0 + jax-rs 2.0客戶端
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));
正如你所看到的,我已經嘗試覆蓋默認的HostnameVerifier,並設置jsse.enableSNIExtension爲false。這些工作都沒有,我仍然得到例外:
「https URL主機名與客戶端的信任庫中的服務器證書上的通用名稱(CN)不匹配。請確保服務器證書是正確的,或禁用此檢查(不推薦用於生產)將CXF客戶端TLS配置屬性「disableCNCheck」設置爲true。「
請幫忙!
您知道,禁用主機名檢查與禁用任何類型的證書驗證實際上是一樣的,因爲現在攻擊者可以使用由受信任的CA簽署的任何證書,而不僅僅是與主機名匹配的證書? –