2

Java Embedded Machine 経由で安全な http に接続しようとしています。

ポート 8090 で自己署名の Apache サーバーを実行しています。Web ブラウザーを使用して移動するhttps://myserver:8090と、自己署名証明書の警告が表示され、正常に読み込まれます。

私はこのコードを持っています

        URL dstUrl = new URL("https://myserver:8090")
        URLConnection result = dstUrl.openConnection();


        System.out.println("Protocol: "+dstUrl.getProtocol()+", is HTTPS:"+(result instanceof HttpsURLConnection)); 
// Echo: Protocol HTTPS is HTTPS:false

        if (result instanceof HttpsURLConnection) {//will not reach
            try {
                HttpsURLConnection conn = (HttpsURLConnection) result;
                conn.setSSLSocketFactory(sslContext.getSocketFactory());
                conn.setHostnameVerifier(defaultHostVerifier);
            } catch (Exception e) {
                //sout will not ignate
            }
        }
        return (HttpURLConnection) result;

このコードは正常に機能するはずですが、openConecction() は常に HttpUrlConnection を返し、HttpsUrlConnection を返しません。プロトコルが https であることがわかっている場合、強制的に HttpsUrlConnection を開くことができる可能性はありますか?

編集:

私の輸入品:

import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URI;
import java.net.URL;
import java.net.URLConnection;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;

編集2:

発行者のサイトでURLStreamHandlerFactory、マシンの起動時に適用される必要があることがわかったので、https プロトコルは非推奨によって返されますcom.sun.net.ssl.internal.www.protocol.https.Handler

これで、javax による HttpsUrlConnection が返されないことがわかりましたが、com.sun.net.ssl.HttpsUrlConnection

とにかくありがとう

4

0 に答える 0