これらは、分かりやすくするために別々の質問として表現することもできますが、すべて同じ問題に関連しています。SSL証明書サーバー名の解決方法/ keytoolを使用して代替名を追加できますか?
SSL証明書サーバー名はどのように解決されていますか?
ブラウザは証明書のCNフィールドを使用しているように見えますが、Javaのメカニズムは「主体代替名」だけを見るように見えるのはなぜですか?
keytoolを使用してSSL証明書に代替名を追加することはできますか? そうでない場合は、代わりにopenSSLを使用していますか?
ちょっとした背景: HTTPSを使用して複数のサーバーと通信するためにメインサーバーを取得する必要があります。当然のことながら、私たちはすべてのサーバー(多くの場合があります)にSSL証明書を購入したくないので、自己署名証明書を使用したい(私はkeytoolを使って証明書を生成しています)。証明書をOSに信頼できるものとして追加すると、ブラウザ(IEとChrome)はその接続を信頼できるものとしてうれしく受け入れます。しかし、Javaのcacertsファイルに証明書を追加した後、Javaはまだ信頼されたような接続を受け入れ、以下の例外スローしません:java.security.cert.CertificateException:によって引き起こさ
ないサブジェクト代替名 存在を (sunname.Checker.java:75) X509TrustManagerImpl.checkIdentity(X509T rustManagerImpl.java:264) (com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted( X509TrustManagerImpl.java:250)私は、Javaが私を実装する証明書を信頼することができますことを発見しcom.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(CLIEN tHandshaker.java:1185)より ... 14
でここからコピーした自分のHostNameVerifier:com.sun.jbi.internal.security.https.DefaultHostnameVerifier(ちなみに、HostnameVerifierの引数として渡されたホスト名は正しいので、受け入れられているはずです)。
私は証明書フィールドCNをホスト名(通常はIPアドレス)として使用しています。
誰かが私に何か間違っていることを教えてもらい、正しい方向に向けることができますか?
リンクが壊れています。 – axiopisty
あなたの代わりを選んでください:http://grepcode.com/search?query=DefaultHostnameVerifier&n= – Renato