So umgehen Sie die Zertifikatüberprüfung in einem Java-Webdienst-Client

In der Java-Web-Service-Entwicklungsumgebung generieren Entwickler immer ein Testzertifikat mit "keytool". Während des Client-Tests wird der Web-Service-Test-Client häufig die folgenden Fehlermeldungen erhalten:

  1. link://webservices/jax-ws/java-security-cert-certificateexception-no-name-passende-localhost-found/[java.security.cert.CertificateException:

Kein passender Name für localhost gefunden]. link://webservices/jax-ws/suncertpathbuilderexception-ungültiger-zertifizierungspfad-zum-angefordertes-ziel/gefunden[SunCertPathBuilderException:

Es wurde kein gültiger Zertifizierungspfad für das angeforderte Ziel gefunden.]

Hier ist ein Quellcode, den ich aus dem Buch kopiert habe: Java Web Services: In Betrieb genommen, 1st Edition von Martin Kalin . Ein sehr nützlicher Code in der Testumgebung NUR ** , zu studieren und als Lesezeichen für zukünftige Referenz zu empfehlen.

package com.mkyong.client;

import java.net.MalformedURLException;
import java.net.URL;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.cert.Certificate;
import java.security.cert.X509Certificate;
import java.io.** ;

import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLPeerUnverifiedException;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;

public class HttpsClient{

  public static void main(String[]args)
  {
     new HttpsClient().testIt();
  }

  private TrustManager[]get__trust__mgr() {
     TrustManager[]certs = new TrustManager[]{
        new X509TrustManager() {
           public X509Certificate[]getAcceptedIssuers() { return null; }
           public void checkClientTrusted(X509Certificate[]certs, String t) { }
           public void checkServerTrusted(X509Certificate[]certs, String t) { }
         }
      };
      return certs;
  }

  private void testIt(){
     String https__url = "https://localhost:8443/HelloWorld/hello?wsdl";
     URL url;
     try {

       //Create a context that doesn't check certificates.
            SSLContext ssl__ctx = SSLContext.getInstance("TLS");
            TrustManager[]trust__mgr = get__trust__mgr();
            ssl__ctx.init(null,               //key manager
                         trust__mgr,          //trust manager
                         new SecureRandom());//random number generator
            HttpsURLConnection.setDefaultSSLSocketFactory(ssl__ctx.getSocketFactory());

        url = new URL(https__url);
        HttpsURLConnection con = (HttpsURLConnection)url.openConnection();

       //Guard against "bad hostname" errors during handshake.
            con.setHostnameVerifier(new HostnameVerifier() {
                public boolean verify(String host, SSLSession sess) {
                    if (host.equals("localhost")) return true;
                    else return false;
                }
            });

       //dumpl all cert info
        print__https__cert(con);

       //dump all the content
        print__content(con);

     } catch (MalformedURLException e) {
        e.printStackTrace();
     } catch (IOException e) {
        e.printStackTrace();
     }catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
     }catch (KeyManagementException e) {
        e.printStackTrace();
      }
   }

  private void print__https__cert(HttpsURLConnection con){
     if(con!=null){

     try {

    System.out.println("Response Code : " + con.getResponseCode());
    System.out.println("Cipher Suite : " + con.getCipherSuite());
    System.out.println("\n");

    Certificate[]certs = con.getServerCertificates();
    for(Certificate cert : certs){
      System.out.println("Cert Type : " + cert.getType());
      System.out.println("Cert Hash Code : " + cert.hashCode());
      System.out.println("Cert Public Key Algorithm : " + cert.getPublicKey().getAlgorithm());
      System.out.println("Cert Public Key Format : " + cert.getPublicKey().getFormat());
      System.out.println("\n");
    }


     } catch (SSLPeerUnverifiedException e) {
      e.printStackTrace();
     } catch (IOException e){
      e.printStackTrace();
     }
   }
  }

  private void print__content(HttpsURLConnection con){
    if(con!=null){

    try {

    System.out.println("** ** ** ** ** **  Content of the URL ** ** ** ** ** ** ** ** ");

    BufferedReader br =
        new BufferedReader(
            new InputStreamReader(con.getInputStream()));

    String input;

    while ((input = br.readLine()) != null){
       System.out.println(input);
    }
    br.close();

     } catch (IOException e) {
    e.printStackTrace();
     }
   }
  }
}