2010-11-24 42 views
2

私はこれを持っています:SSLクライアント - いつ証明書が必要ですか?

 SSLSocketFactory factory = HttpsURLConnection.getDefaultSSLSocketFactory(); 
    SSLSocket socket = (SSLSocket) factory.createSocket("www.verisign.com", 443); 

これは、 "接続が拒否されました"というエラーで2行目で失敗しています。

これで、上記の作業を行う前に、私のトラストストアにverisignの証明書をインストールする必要がありますか? SSLサーバーに接続してgetPeerCertificates()を実行して証明書を取得できるという印象を受けました。これは私たちのブラウザがするものではありませんか?それ以外の場合は、どの署名機関を使用するかをどのように知っていますか?

(明らかに私はVerisignを例として使用しています。私の実際のURLはここではあまりにも醜いので...)

+0

私はファイアウォールや何かで焼かれているのだろうかと思う。私もできません:URL url =新しいURL( "www.google.com"); HttpURLConnection con =(HttpURLConnection)url.openConnection(); con.getInputStream()から読み取る –

答えて

1

接続が拒否されたということは、ターゲットのホスト:ポートでリッスンしていないこと、またはファイアウォールが途中に入ったことを意味します。これは、論理的にも時間的にもSSLの前にあります。

+0

疑いがあると確認されました。 –

1

では、リモートサービスが稼働して実際にあることを確認し、あなたができることを持っていますそれに接続しますか?おそらく、 "Connection refused"エラーは実際には拒否された接続です。 :-)

+0

https://www.verisign.comアップしているようです----- –

+0

@トニーエニス:彼はそれが実際に接続しているサイトではなかったが、彼はしなかったURLを明らかにする。質問の最後の文:) –

+0

はい、私は本当にverisignのWebサイトを試しました。それもそれに接続できません。 (Q:Verisignは自己署名証明書を使用していますか?lolz) –

1

通常、サーバーの証明書をコンピュータに明示的にインストールする必要はありません。 PKIは、システムが事前の知識なしにサーバーの証明書を検証できる方法で動作します。ただし、サーバーの証明書に、既知のCA(つまり、クライアントシステムにルート証明書またはその他の証明書が既にリストされている証明機関)のルートがある場合にのみ有効です。これが当てはまらない場合(例えば、自己署名証明書やその他のカスタム証明書がサーバーにある場合)、クライアントクラスに証明書をインストールしてから、前述のクラスがサーバー証明書を正しく検証できるようにする必要があります。

about certificates and how they are used in SSL hereを読むことができます。

+0

_...サーバーの証明書は、既知のCA ...のルートになっています。ルートまたはその他の証明書が既にクライアントシステムにリストされています... _接続先のURLにVerisignによって署名された証明書があり、Verisignが私のキーストアにある場合、すべてが背後で動作しますか? –

+0

私はjavax.net.ssl.trustStoreとjavax.netを設定しました.ssl.keyStorePassword環境変数 –

+0

@Tony残念ながら、Java SSLクラスが証明書を検証する方法、つまりJava Runtimeが信頼できる証明書のリストを保持しているかどうかはわかりません。 –

関連する問題