Это первый раз, когда я получил требование подключиться к https url. В мгновение ока я узнал, что мне нужно пройти SSLContext
.Как настроить wildfly для использования https с ClientBuilder в resteasy?
Я также узнал, что мне нужно настроить в standalone.xml, чтобы это сделать.
Любые указатели на решение/ссылку, рабочий код будет высоко оценен.
Нужно ли нам генерировать хранилища ключей? или wildfly предоставляет любые существующие?
Это то, что я пробовал:
SSLContext context = null;
KeyManagerFactory kmf = null;
KeyStore ks = null;
char[] storepass = "somestringhere".toCharArray();
char[] keypass = "somestringhere".toCharArray();
try {
context = SSLContext.getInstance("SSL");
} catch (NoSuchAlgorithmException e3) {
// TODO Auto-generated catch block
e3.printStackTrace();
}
try {
kmf = KeyManagerFactory.getInstance("SunX509");
} catch (NoSuchAlgorithmException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
FileInputStream fin = null;
try {
fin = new FileInputStream("file here");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
ks = KeyStore.getInstance("JKS");
} catch (KeyStoreException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
ks.load(fin, storepass);
} catch (NoSuchAlgorithmException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (CertificateException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
kmf.init(ks, keypass);
} catch (UnrecoverableKeyException | KeyStoreException | NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
context.init(kmf.getKeyManagers(), null, null);
} catch (KeyManagementException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Client client = ClientBuilder.newBuilder().sslContext(context).build();
WebTarget target = client
.target("https://....");
Builder builder = target.request();
Я попытался https://stackoverflow.com, он дал 200OK, я попробовал google.com, он сказал документ переместилась 302 статуса. Я попробовал URL, который я хочу, чтобы соединить я получил коллегиально не прошла проверку подлинности исключения
Caused by: javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated
at sun.security.ssl.SSLSessionImpl.getPeerCertificates(SSLSessionImpl.java:421) [jsse.jar:1.7.0_71]
at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:128) [httpclient-4.2.5.jar:4.2.5]
at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:572) [httpclient-4.2.5.jar:4.2.5]
at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:180) [httpclient-4.2.5.jar:4.2.5]
at org.apache.http.impl.conn.ManagedClientConnectionImpl.open(ManagedClientConnectionImpl.java:294) [httpclient-4.2.5.jar:4.2.5]
at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:640) [httpclient-4.2.5.jar:4.2.5]
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:479) [httpclient-4.2.5.jar:4.2.5]
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:906) [httpclient-4.2.5.jar:4.2.5]
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:805) [httpclient-4.2.5.jar:4.2.5]
at org.jboss.resteasy.client.jaxrs.engines.ApacheHttpClient4Engine.invoke(ApacheHttpClient4Engine.java:283) [resteasy-client-3.0.6.Final.jar:]
... 30 more
И сервер запрашивает для базовой аутентификации, это причина для исключения?
Я подключения HTTPS URL, но что URL не mine..I значит, не из моего приложения JAX-RS ... Я просто хочу, чтобы подключиться к этому URL, используя ClientBuilder апи .. поэтому в этом случае мне не нужно настраивать сервер wildfly с правом сертификата? так как я не хочу размещать какие-либо https-вызовы? – pinkpanther
Извините, я думал, что вы хотите провести тестирование со своего сервера и клиента. Если сервер, к которому вы обращаетесь, имеет сертификат, подписанный хорошо известным ЦС, скорее всего, у Java есть сертификат в собственном магазине доверия, и вам не нужно будет его настраивать. Предположим, вы хотели получить доступ к API Google. В хранилище доверия обязательно будет сертификат, и вам не нужно настраивать клиента. Это нужно делать только тогда, когда сертификату не доверяют. Вы можете попытаться сделать запрос https на сервер и посмотреть, что произойдет. Если cert не доверен, вы можете либо игнорировать ненадежный сертификат, либо загрузить его, либо добавить его. –
Возможно, я мог бы найти вам некоторую хорошую информацию в любом случае, но сначала вы должны, вероятно, проверить, работает ли он с URL-адресом, который вы пытаетесь доступ. –