0

開発のみを目的として、サーバーから SSL 証明書を受け入れるように Java を強制しようとしています。C#では、これを行うことができます:

    public class MyPolicy : ICertificatePolicy
    {
        public bool CheckValidationResult(
          ServicePoint srvPoint
        , X509Certificate certificate
        , WebRequest request
        , int certificateProblem)
        {

        //Return True to force the certificate to be accepted.
        return true;

        } // end CheckValidationResult
    } // class MyPolicy

そして、サーバーに接続する前にインスタンス化します。

System.Net.ServicePointManager.CertificatePolicy = new MyPolicy();

Javaに同様のソリューションはありますか?

4

2 に答える 2

2

開発目的でのみ、私は強制しようとしています

'For development purposes only' you are very ill-advised to attempt any such thing. Your development is worthless until it works correctly, i.e. properly, i.e. in this case handles the certificates correctly. Building bandaids is just a waste of time, and building bandaids on top of security issues is a major security risk that you shouldn't even be contemplating. I have a nasty suspicion that many of these 'bandaids' find their way by commission or omission into production, and that many of the world's SSL- and HTTPS-based systems are radically insecure as a result. Don't join them. Understand why you are having the problem and fix the problem.

于 2012-06-28T11:35:43.143 に答える
1

正しい方法は、この証明書をトラスト ストアにインポートすることです。(私は知っています... これは開発コードにすぎませんが、動作するようになると、圧力がかかると不要なコードのビットを削除するのを忘れることがあることは誰もが知っています。)

あまり理想的ではない方法は、何も検証しないトラスト マネージャーを構築することです。

正しい方法で行うと、SSLContext手動で処理する必要がない場合があります (SSLSocketFactoryクライアントを作成して構成するため): デフォルトの場所またはシステム プロパティで十分な場合があります。

カスタムのトラスト マネージャーが必要な場合は、独自のトラスト マネージャーを作成する必要があります(正しい方法で行う場合は、特定のトラスト ストアからSSLContextを初期化することも理にかなっていますが、まったく問題はありません)。SSLContext

詳細については、この回答を参照してください (ただし、Restlet 固有のものは必要ありません)。

SSLContextそれ(または結果) をアプリケーションに渡す方法はSSLSocketFactory、使用しているフレームワークによって異なります。

于 2012-06-28T00:27:57.937 に答える