2017-03-04 8 views
0

シナリオ、私はそれが混乱しているWebサーバーを扱っています(私はこの部分を制御しません、私はゲームをプレイしなければなりません。世界最大のソフトウェアベンダー)J2EE件名の代替名はありません。ジェダイの復讐

デフォルトでは、Webサーバが2つのSSLサービスを提供しています、それらのそれぞれが

全く別のSSL証明書

がある可能性があります証明書 署名アルゴリズム:sha1WithRSAEncryption RSAキー強度:1024

件名:* .dummy.nodomain 発行者:このページ

public List<String> doPostWithSSL(String direction, String dataToSend, String contentType, boolean OverrideSecurityVerifications) { 
     try { 
      URL url = new URL(direction); 
      List<String> webcontent = new ArrayList(); 

      HttpsURLConnection conn = (HttpsURLConnection) url.openConnection(); 
      conn.setRequestMethod("POST"); 
      conn.setRequestProperty("Host", getHostByUrl(direction)); 
      conn = new UserAgentsLibrary().getRandomUserAgent(conn); 

      if (contentType != null) { 
       conn.setRequestProperty("Content-Type", contentType); 
      } else { 
       conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 
      } 

      conn.setDoOutput(true); 

      if (OverrideSecurityVerifications) { 
       try { 
        TrustManager[] trustAllCerts; 
        trustAllCerts = new TrustManager[]{new X509TrustManager() { 
         @Override 
         public X509Certificate[] getAcceptedIssuers() { 
          return new X509Certificate[0]; 
         } 

         @Override 
         public void checkClientTrusted(X509Certificate[] certs, String authType) throws CertificateException { 
         } 

         @Override 
         public void checkServerTrusted(X509Certificate[] certs, String authType) throws CertificateException { 
         } 

        }}; 

        // We want to override the SSL verifications 
        SSLContext ctx = SSLContext.getInstance("TLS"); 
        ctx.init(null, trustAllCerts, null); 
        SSLSocketFactory factory = ctx.getSocketFactory(); 



        conn.setDefaultSSLSocketFactory(ctx.getSocketFactory()); 
        HostnameVerifier allHostsValid = (String hostname1, SSLSession session) -> true; 
        conn.setDefaultHostnameVerifier(allHostsValid); 

        conn.setSSLSocketFactory(factory); 

       } catch (KeyManagementException kex) { 
        System.out.println("[+] Error bypassing SSL Security " + kex.getMessage()); 
       } catch (NoSuchAlgorithmException nsex) { 
        System.out.println("[+] Error forgeting TLS " + nsex.getMessage()); 
       } 

      } 

      OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); 
      wr.write(dataToSend); 
      wr.flush(); 

      BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
      String line; 

      while ((line = rd.readLine()) != null) { //todo+=line+"\n";    
       webcontent.add(line); 
      } 

      wr.close(); 
      rd.close(); 
      return webcontent; 

     } catch (MalformedURLException mex) { 
      System.out.println("[+] Error: I received a malformed URL"); 
      return null; 
     } catch (SSLHandshakeException sslex) { 
      System.out.println("[+] Error: SSL Handshake Error!" + sslex.getMessage()); 
      return null; 
     } catch (IOException ioex) { 
      System.out.println("[+] Error: Input/Output Error!" + ioex.getMessage()); 
      return null; 
     } 
    } 
の例次のroot_NPL

:sha1WithRSAEncryption RSAキー強度::2048

件名:vhcalnplcs_NPL_01 発行*

証明書B 署名アルゴリズム.dummy.nodomain

証明書Bでプログラムを動作させることはできましたが(ここで問題はありません)、証明書Aで動作するようにはできませんはい、私はこのコードはMITMに対して脆弱であることを知って

  • ); ECT私にトラブル)

    • これは、サンプル・コードであるを検討する

      物事の原因になっている*、無関係な詳細を見ていないことユーザーに警告が表示されています

    • いいえ、キーストアに証明書を追加したくありません。私は純粋なJ2EEコードを使用してい
    • 、私はそれが標準でないものを使用したくない私は

    誰かが持っていたのWindows、Mac、Linuxのために働く解決策を見つけるしたいと思います

  • あなたは私に手を貸すことができますか?

    答えて

    0

    私は昨日疲れました。

    置き換えられたconn.setDefaultHostnameVerifier(allHostsValid); conn.setHostnameVerifier(allHostsValid)による ;

    さらに、ワイルドカードを使用した証明書でさえも動作します。

    関連する問題