2016-03-15 98 views
1

我目前正在使用http服务的web服务!我被要求更改(使用)https而不是调用此webservice!使用https调用Web服务

我使用日食开普勒和JBoss EAP6.1

我,我要创建一个密钥库和编辑的server.xml文件在互联网上找到。 事情是,我无法找到这个JBOss版本的XML文件[我有一个standalone.xml文件是一样的吗? ] 和密钥存储的生成其中我必须这样做吗? 谢谢你的安泽! 如果我在错误的方式,你会请重定向我?

再次感谢!

回答

1

获取HTTPS url的证书。 (您可以在浏览器中输入URL,然后从浏览器证书安装位置提取证书)。在此之后,将此证书添加到JBOSS服务器使用的应用程序的JRE中。很可能这将是您在系统环境中提供的JRE。您可以通过谷歌获得如何在密钥库中安装证书。可能会这样做。

0

您正在通过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); 
} 
0

除了回答@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"); 
      } 
+0

我真的不应该从哪里开始我应该配置服务器的xml文件,如果是的话哪一个?如果我必须创建或导入certificat从哪里到哪里我应该这样做....最后,我正在处理的webservice是为另一家公司,所以如果我将证书添加到jdk目录那怎么回事为公司工作? – Hopeful

+0

我以前遇到类似的情况,所以在你的情况下,如果你的webservice正在为其他公司工作,那么理想情况下你不应该导入任何证书(提供客户端的jdk/jre是可以访问的)。我使用HttpClient 4.x作为我必须以xml的形式向客户端(其他公司)发送一些数据。您是否拥有该公司的https URL的SLA?我的意思是那里有任何可以使用你的web服务的公司的机制?如果是,那么你可以使用httpclient(还有其他的API!)。让我知道你是否需要一些关于代码的帮助。 – Suyash