我目前正在使用http服务的web服务!我被要求更改(使用)https而不是调用此webservice!使用https调用Web服务
我使用日食开普勒和JBoss EAP6.1
我,我要创建一个密钥库和编辑的server.xml文件在互联网上找到。 事情是,我无法找到这个JBOss版本的XML文件[我有一个standalone.xml文件是一样的吗? ] 和密钥存储的生成其中我必须这样做吗? 谢谢你的安泽! 如果我在错误的方式,你会请重定向我?
再次感谢!
我目前正在使用http服务的web服务!我被要求更改(使用)https而不是调用此webservice!使用https调用Web服务
我使用日食开普勒和JBoss EAP6.1
我,我要创建一个密钥库和编辑的server.xml文件在互联网上找到。 事情是,我无法找到这个JBOss版本的XML文件[我有一个standalone.xml文件是一样的吗? ] 和密钥存储的生成其中我必须这样做吗? 谢谢你的安泽! 如果我在错误的方式,你会请重定向我?
再次感谢!
获取HTTPS url的证书。 (您可以在浏览器中输入URL,然后从浏览器证书安装位置提取证书)。在此之后,将此证书添加到JBOSS服务器使用的应用程序的JRE中。很可能这将是您在系统环境中提供的JRE。您可以通过谷歌获得如何在密钥库中安装证书。可能会这样做。
您正在通过https调用远程web服务,对不对?
好吧,你可以导入远程服务的证书中的密钥库(大量有关指南,看看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);
}
除了回答@Rahul的,你可以导入在命令提示符下使用以下命令证书(.cer)文件的Windows操作系统:
(假设你已经设置所需的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>
是 '的changeit'。
如果web服务用于第三方客户端,那么您可以使用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");
}
我真的不应该从哪里开始我应该配置服务器的xml文件,如果是的话哪一个?如果我必须创建或导入certificat从哪里到哪里我应该这样做....最后,我正在处理的webservice是为另一家公司,所以如果我将证书添加到jdk目录那怎么回事为公司工作? – Hopeful
我以前遇到类似的情况,所以在你的情况下,如果你的webservice正在为其他公司工作,那么理想情况下你不应该导入任何证书(提供客户端的jdk/jre是可以访问的)。我使用HttpClient 4.x作为我必须以xml的形式向客户端(其他公司)发送一些数据。您是否拥有该公司的https URL的SLA?我的意思是那里有任何可以使用你的web服务的公司的机制?如果是,那么你可以使用httpclient(还有其他的API!)。让我知道你是否需要一些关于代码的帮助。 – Suyash