я пытаюсь вызвать службу REST с помощью JBoss остальное легко следующим образомдля отдыха простых вызовов по протоколу HTTPS, как принять все сертификаты
public ETTestCasePackage getPackageById(String packageId) throws PackageNotFound {
ClientRequest req = new ClientRequest("https://facebook/api");
req.header("Authorization", "Basic " + EztrackerConstants.base64AuthenticationValue);
req.pathParameter("id", packageId);
ETTestCasePackage etPackage = null;
try {
logger.info("invoking "+req.getUri());
//ProxyFactory.create
ClientResponse<ETTestCasePackage> res = req.get(ETTestCasePackage.class);
etPackage = res.getEntity();
} catch (Exception e) {
logger.debug("Not able to retrieve details for testcase package having id = " + packageId, e);
throw new PackageNotFound("Package with id " + packageId + " not found", e);
}
return etPackage;
}
но выше коде явно бросить «коллегиально не прошедших проверку подлинности»;
javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated
at sun.security.ssl.SSLSessionImpl.getPeerCertificates(Unknown Source)
at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:126)
at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:437)
at
Я могу добавить соответствующий сертификат в свои локальные java-системы безопасности, чтобы решить эту проблему. , но я могу запустить это так много машин, поэтому не могу сделать это для всех машин. поэтому я хочу, чтобы мой клиент http принимал все запросы, переопределяя проверки HTTP.
но для отдыха просто httprequest, я не могу найти способ сделать это. будет ли кто-то помогать мне делать это для отдыха.
Thanks in Advance, syam.
Я пробовал этот кусок кода, вызывающий фактический код для игнорирования, но все же не переопределял настройки по умолчанию. любая идея заставить его работать для этого спокойного клиента.
private void test(){
TrustManager[] trustAllCerts = new TrustManager[]{
new X509TrustManager() {
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}
public void checkClientTrusted(
java.security.cert.X509Certificate[] certs, String authType) {
}
public void checkServerTrusted(
java.security.cert.X509Certificate[] certs, String authType) {
}
}
};
// Install the all-trusting trust manager
try {
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
} catch (Exception e) {
}
}
static {
//for localhost testing only
javax.net.ssl.HttpsURLConnection.setDefaultHostnameVerifier(
new javax.net.ssl.HostnameVerifier(){
public boolean verify(String hostname,
javax.net.ssl.SSLSession sslSession) {
return true;
}
});
}
}
Там нет ничего «очевидным» о первый код, бросающий PeerNotAuthenticatedException. Это только делает это, если что-то не так. Подход «всех доверенных сертификатов» радикально небезопасен и его даже не следует рассматривать. Либо распространяйте свой самозаверяющий сертификат, либо гораздо лучше его подписывайте CA. – EJP