2011-12-08 12 views
2

https urlで接続を設定しようとしていますが、まだテスト中であるため、urlがテスト環境にリダイレクトされ、証明書が信頼されていて有効であるがドメイン名と一致しないというメッセージが表示され、続行したい場合。私はJavaでこれを扱うのに苦労している。私が見つけたすべての答えは、このようなTrustManagerを使用することをお勧めします。Java SSL接続の「間違った名前」タイプのエラーを無視します

TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() { 
    public X509Certificate[] getAcceptedIssuers() { 
     return null; 
    } 

    public void checkClientTrusted(X509Certificate[] certs, String authType) { 
     return; 
    } 

    public void checkServerTrusted(X509Certificate[] certs, String authType) { 
     return; 
    } 
}}; 

sslContext.init(kmf.getKeyManagers(), trustAllCerts, new SecureRandom()); 

しかし、これは何も変わりません。

認証には、クライアント証明書の秘密鍵を読み取る際にパスワードを入力する必要があります。これは、ブラウザとアプリケーションの両方から正しく同じに正しく動作します。この認証後、ブラウザでプロンプトがポップアップ表示されるか、私のアプリケーションで 'bad_certificate'エラーが発生しました。ドメインの検証を完全に無視するか、同じプロンプトが表示されるようにするには、他の方法がありますか?

わかりやすくするために、私のアプリケーションでは、パスワードプロンプトが表示されません。アプリケーションの秘密鍵にアクセスしようとしているアプリケーションを検出したウィンドウから発信されたものだと思います。 2番目のプロンプトは同様のやり方で動作しますが、それを実現するためのパラメータはまだ見つかりませんでした。

答えて

0

あなたのコードをテストするためにこれを行っている場合、これは正しいことではないことを私に教えてください。ブラウザはエラーを無視し、問題があっても継続したい場合はユーザーに促すことがよくあります。彼が続けることを決めた場合、彼は決定を所有しています。 JavaアプリケーションでJDKを使用している場合、デフォルトのSSLSocketFactoryを使用すると、SSLハンドシェイクが成功した場合にのみSSLセッションが確立されます。これはセキュリティ上の理由によるものです。あなたのブラウザのような機能が必要な場合は、セキュリティ上の問題に関係なく処理を進めるには、独自のカスタム実装が必要です。または、SSLをまったく使用しないでください。

+0

これは有効な警告です。しかし、私はこれを否定して答えたわけではありません.Javaコードが正当なHTTPS URLに接続する必要がある状況があります。そのJavaコードは(適切なブラウザのように)「証明書の名前Xが一致しませんURLのホスト名Y "と、ユーザが接続を希望する場所を指定します。 –

0

ドメインの検証を無視するようにいずれかの他の方法があります...

はい。 URLのホスト名とサーバーの 識別ホスト名が一致した場合に、検証メカニズムは、この接続 を許可すべきかどうかを判断するために、このインタフェースの実装に戻って を呼び出すことができ、ハンドシェーク中に

:JavaのHostnameVerifierインターフェイスを参照してください。

関連する問題