我目前正在使用http的网络服务!我被要求更改(使用) https 而不是调用此网络服务!
我正在使用eclipse kepler和JBoss EAP6.1
我在互联网上发现我必须创建密钥库并编辑 server.xml 文件。
问题是我在这个xml
版本中找不到JBOss
文件[我有一个 standalone.xml 文件是否相同? ]
并且为了生成密钥库,我必须这样做吗?
谢谢你的配件!
如果我走错了路,你能不能指引我走正确的道路?
再次感谢!
答案 0 :(得分:1)
获取HTTPS网址的证书。 (您可以通过在浏览器中键入URL然后从浏览器证书安装位置提取证书来完成此操作)。之后,将此证书添加到JBOSS服务器使用的应用程序的JRE中。这很可能是你在系统环境中给出的JRE。您可以谷歌获取如何在密钥库中安装证书。可能这会起作用。
答案 1 :(得分:0)
您通过https呼叫远程网络服务,对吧?
好的,您可以在密钥库中导入远程服务的证书(有很多指南,请查看this other question示例)
OR
您可以绕过整个https证书(在远程调用之前启动此静态方法):
/**
* Bypassing SSL certificate check
*
* @throws Exception
*/
public static void doTrustToCertificates() throws Exception {
Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
TrustManager[] trustAllCerts = new TrustManager[]{
new X509TrustManager() {
@Override
public X509Certificate[] getAcceptedIssuers() {
return null;
}
@Override
public void checkServerTrusted(X509Certificate[] certs, String authType) throws CertificateException {
}
@Override
public void checkClientTrusted(X509Certificate[] certs, String authType) throws CertificateException {
}
}
};
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, new SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
HostnameVerifier hv = new HostnameVerifier() {
@Override
public boolean verify(String urlHostName, SSLSession session) {
if (!urlHostName.equalsIgnoreCase(session.getPeerHost())) {
logger.warn("Warning: URL host '" + urlHostName + "' is different to SSLSession host '" + session.getPeerHost() + "'.");
}
return true;
}
};
HttpsURLConnection.setDefaultHostnameVerifier(hv);
}
答案 2 :(得分:0)
除了回答@Rahul之外,您还可以在Windows操作系统的命令提示符下使用以下命令导入证书(.cer)文件:
(假设您已设置所需的Java路径)
keytool -importcert -file <path of certificate>\<YourCertificateName>.cer -keystore D:\java\jdk1.7.0_40\jre\lib\security\cacerts -alias <certificateAliasName> -storepass <Password>
通常默认<password>
是&#39; changeit&#39;。
如果webservice用于第三方客户端,那么您可以使用HttpClient进行交互。我不确定您使用该Web服务执行什么样的操作。我假设您要将一些xml发送到该URL。您可以参考以下代码:
HttpPost httppost = new HttpPost(url);
CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(AuthScope.ANY,
new UsernamePasswordCredentials(username, password));
CloseableHttpClient client = HttpClientBuilder.create().setDefaultCredentialsProvider(credentialsProvider).build();
StringEntity entity = null;
try {
entity = new StringEntity(xmlToSend);
} catch (UnsupportedEncodingException e) {
LOG.error("Unsupported Encoding ", e);
}
entity.setContentType("text/xml");
httppost.setEntity(entity);
try{
CloseableHttpResponse response = client.execute(httppost);
returnCode = response.getStatusLine().getStatusCode();
EntityUtils.consume(entity);
LOG.debug("HttpResponse :" + EntityUtils.toString(response.getEntity()));
}catch(IOException e){
LOG.error("Error occured while sending the xml");
}