0

wsgen を使用して単純な Web サービスを開発しましたが、http (非 SSL) で問題なく動作します。https(SSL)で動作させる必要があります。ここにあるコードに従いました。したがって、SSL プロセスは今すぐ実行されます...私は Eclipse 内から Java アプリケーションとして実行しています。しかし、アクセスしようとすると「安全な接続に失敗しました」「受信したデータの信頼性を確認できなかったため、表示しようとしているページを表示できません」と表示されます。

そうは言っても、私は SSL の中間者なので、おそらくここで何か間違ったことをしているのでしょう。Keystore Explorer ツールを使用して、次のことを行いました。 - 新しい JKS キーストアを作成しました。- 新しいキー ペアを生成しました - キー ペアを *.pk12 ファイルとしてエクスポートしました。- ブラウザを開き、*.pk12 をインポートしました。*.cer を試しましたが、ブラウザーは署名されていない証明書を受け取りませんでした。

したがって、*.jks は Java コードで直接開かれ、動作します。Eclipse のデバッグで確認しました。SSL サービスは正常に起動しますが、ブラウザで同じエラーが表示されます...もう 1 つの問題は、問題の追跡を開始するための例外/エラーを含むログファイルを見つけることができないことです。Java の問題ではないと思います...SSL の問題だと思いますが、他にどこから始めればよいかわかりませんでした。

どんな助けでも大歓迎です!

public static void main(String[] args) throws Exception {
    Endpoint endpoint = Endpoint.create(new RapidCommandService());
    SSLContext ssl =  SSLContext.getInstance("SSLv3");

    KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); 
    KeyStore store = KeyStore.getInstance(KeyStore.getDefaultType());

    getLog().debug ( SHORT_NAME + ".main() - Java User Directory..........................[" + System.getProperty ( "user.dir" ) + "]" );
    getLog().debug ( SHORT_NAME + ".main() - Java Home Directory..........................[" + System.getProperty ( "java.home" ) + "]" );
    getLog().debug ( SHORT_NAME + ".main() - Java Version.................................[" + System.getProperty ( "java.version" ) + "]" );

    //Load the JKS file (located, in this case, at D:\keystore.jks, with password 'test'
    store.load(new FileInputStream("C:\\usr\\apps\\java\\jre-170-65\\lib\\security\\rapid-command-service.jks"), "changeit".toCharArray()); 

    //init the key store, along with the password 'test'
    kmf.init(store, "changeit".toCharArray());
    KeyManager[] keyManagers = new KeyManager[1];
    keyManagers = kmf.getKeyManagers();

    //Init the trust manager factory
    TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());

    //It will reference the same key store as the key managers
    tmf.init(store);

    TrustManager[] trustManagers = tmf.getTrustManagers();

    ssl.init(keyManagers, trustManagers, new SecureRandom());
    getLog().debug ( SHORT_NAME + ".main() - Java SSL Truststore..........................[" + System.getProperty ( "javax.net.ssl.trustStore" ) + "]" );
    getLog().debug ( SHORT_NAME + ".main() - Java SSL Keystore............................[" + System.getProperty ( "javax.net.ssl.keyStore" ) + "]" );

    //Init a configuration with our SSL context
    HttpsConfigurator configurator = new HttpsConfigurator(ssl);
    System.setProperty("javax.net.debug", "ssl");

    //Create a server on localhost, port 443 (https port)
    HttpsServer httpsServer = HttpsServer.create(new InetSocketAddress("localhost", 443), 443);
    httpsServer.setHttpsConfigurator(configurator);


    //Create a context so our service will be available under this context
    HttpContext context = httpsServer.createContext("/rapidCommandService");
    httpsServer.start();

    //Finally, use the created context to publish the service
    endpoint.publish(context);

}
4

1 に答える 1

0

試す

SSLContext ssl =  SSLContext.getInstance("TLSv1.2");

現在、SSLv3 は脆弱であることが知られており、お使いのブラウザーはおそらくこのように構成されたサーバーを受け入れないでしょう。

別のオプションは、サーバーに接続するオプションを試しcurlてください。-k

于 2015-06-07T08:54:41.653 に答える