1

私たちのチームはウェブサイトをクロールして、情報を最新の状態に保ちます。HTTPSページをクロールするときにセキュリティ例外が発生していました。問題は、Javaにページからの自己署名証明書の受け入れに問題があったことでした。

受け入れる証明書のリストを保持するのではなく(将来的に維持するのが難しい可能性があります)、私はneu242によって提供される回避策を使用してSSL証明書の検証を無効にします。

public static void disableCertificateValidation() 
{
    // Create a trust manager that does not validate certificate chains
      TrustManager[] trustAllCerts = new TrustManager[] { 
        new X509TrustManager() {
          public X509Certificate[] getAcceptedIssuers() { 
            return new X509Certificate[0]; 
          }


        @Override
        public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException
        {
            // TODO Auto-generated method stub

        }
        @Override
        public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException
        {
            // TODO Auto-generated method stub

        }
      }};

      // Ignore differences between given hostname and certificate hostname
      HostnameVerifier hv = new HostnameVerifier() {

        @Override
        public boolean verify(String arg0, SSLSession arg1)
        {
            // TODO Auto-generated method stub
            return true;
        }
      };

      // Install the all-trusting trust manager
      try {
        SSLContext sc = SSLContext.getInstance("SSL");
        sc.init(null, trustAllCerts, new SecureRandom());
        HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
        HttpsURLConnection.setDefaultHostnameVerifier(hv);
      } catch (Exception e) {}
}

もちろん、これは重大なセキュリティリスクをもたらします。ただし、このコードをダウンロードプログラム(画像とPDFドキュメントをダウンロードするプログラム)でのみ使用していて、機密情報を送信するためにこのプログラムを使用していない場合、どのようなセキュリティリスクが存在しますか?私の理解では、このトラストマネージャーは実行中のJVMに対してのみ設定されます(プログラムを実行しているサーバーはOSレベルでの証明書の検証を無効にしません)。さらに、画像とドキュメントのリクエストが傍受された場合、コードは応答をそれぞれ画像またはpdfに変換しようとし、悪意のあるソフトウェアを起動しません。どこかで見逃しているセキュリティリスクはありますか?

4

3 に答える 3

5

あなたが直面しているリスクは、悪意のあるサーバーがあなたとオリジンサーバーの間に自分自身を置く可能性があることです(これは中間者攻撃です)。つまり、実サーバーからドキュメントを受け取っていると思いますが、実際には海賊サーバーからドキュメントを受け取っています。したがって、ドキュメントの種類とそれらをどのように処理するかによって異なります...

于 2012-10-25T20:26:44.010 に答える
0

証明書の検証を無効にすることができます。通信は引き続き安全であり、サーバーのIDを認証することはできません。問題はありません。

于 2012-10-25T20:15:36.660 に答える
0

唯一の現実的な「傍受」シナリオは、クライアントコンピューターがランダムな場所(コーヒーショップなど)のワイヤレスネットワーク上にある場合です。あなたのスクレイピングサーバーは明らかにそうではないので、実際には証明書の検証を無効にするリスクはありません。

于 2012-10-27T03:11:10.540 に答える