2013-12-15 2 views
0

Я хотел бы подключиться к тестовому серверу в https из java-программы, которую я создал. Я не хочу проверять что-либо в сертификате, как я могу это достичь?java https no verify certificate

Я использую:

HttpURLConnection connection = (HttpURLConnection) (new URL(server).openConnection()); 
          connection.setDoOutput  (true); 
          connection.setDoInput  (true); 
          connection.setInstanceFollowRedirects(false); 
          connection.setRequestMethod("POST"); 
      OutputStream  out = connection.getOutputStream(); 
      OutputStreamWriter wout = new OutputStreamWriter(out, "UTF-8"); 
           wout.write(xml); 
           wout.flush(); 
           out .close(); 




      //READ RESPONSE. 
      InputStream in = connection.getInputStream(); 

Но когда я исполняю, я получаю:

javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No subject alternative names present 

ответ

0

Как правило, вы можете Acces HTTPS сайтов, но Somesites хотел сертификат. Таким образом, вы можете использовать коды. И вам нужно принять сертификат с программой InstallCert.

String httpsURL = "https://www.google.com"; 
URL myurl = new URL(httpsURL); 
       HttpsURLConnection con = (HttpsURLConnection)myurl.openConnection(); 
       InputStream ins = con.getInputStream(); 
       InputStreamReader isr = new InputStreamReader(ins); 
       BufferedReader in = new BufferedReader(isr); 
0

Вы можете сделать это таким образом ..

URL url1; 
try { 
      url1 = new URL(url); 

      if(url1.getProtocol().equalsIgnoreCase("https")){// you dont need this check 
       try { 
       HostnameVerifier hv = new HostnameVerifier() { 

         public boolean verify(String urlHostName, javax.net.ssl.SSLSession session) { 

          if (urlHostName.equals(session.getPeerHost())) { 
           logger.info("Verified HTTPS "+session.getPeerHost()+" >> "+ urlHostName); 
          } else { 
           logger.info("Warning: URL host "+urlHostName+" is different to SSLSession host "+session.getPeerHost()); 
          } 
          return true; 
         } 
        }; 

        TrustManager[] trustAll = new javax.net.ssl.TrustManager[] { new javax.net.ssl.X509TrustManager() { 

         public java.security.cert.X509Certificate[] getAcceptedIssuers() { 

          return null; 
         } 

         public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType) { 

         } 

         public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType) { 

         } 
        } }; 

        javax.net.ssl.SSLContext sc = javax.net.ssl.SSLContext.getInstance("SSL"); 

        sc.init(null, trustAll, new java.security.SecureRandom()); 

        SSLSocketFactory factory = (SSLSocketFactory) sc.getSocketFactory(); 
        HttpsURLConnection.setDefaultSSLSocketFactory(factory); 
        HttpsURLConnection.setDefaultHostnameVerifier(hv); 

        HttpsURLConnection connection = (HttpsURLConnection)     url1.openConnection(); 
        connection.setDoOutput(true); 
        connection.setDoInput(true); 
        connection.setRequestMethod("POST"); 
        connection.setUseCaches(false);  

Продолжайте OutputStreamWriter записи части. Вы можете сделать это без импорта сертификата ssl и без поддержки сторонних разработчиков.

0

, если вы пытаетесь получить от https://IP/file, он будет возвращать ошибку IP-не проверено

+0

Добро пожаловать на переполнение стека, пожалуйста, [взять тур] (https://stackoverflow.com/tour) , убедитесь, что вы прочитали [Как написать хороший ответ?] (https://stackoverflow.com/help/how-to-answer) и обновили свой ответ с дополнительной информацией. – lordrhodos

Смежные вопросы