1
    KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
    keyStore.load(this.getClass().getResourceAsStream("keystore.jks"), "haslo1".toCharArray());
    TrustManagerFactory trustManagerFactory =
    TrustManagerFactory.getInstance("PKIX", "SunJSSE");
    trustManagerFactory.init(keyStore);
    X509TrustManager x509TrustManager = null;
    for (TrustManager trustManager : trustManagerFactory.getTrustManagers()) {
    if (trustManager instanceof X509TrustManager) {
    x509TrustManager = (X509TrustManager) trustManager;
    break;
    }
    }
        if (x509TrustManager == null) {
            throw new NullPointerException();
        }
        SSLContext sslContext = SSLContext.getInstance("TLS");

      sslContext.init( KeyManagerFactory.getInstance( "RSA" ).getKeyManagers(),
       new TrustManager[]{x509TrustManager}, null);

このコードを取得しましたが、sslContext.init の行で次の例外が発生します: java.security.NoSuchAlgorithmException: RSA KeyManagerFactory not available

何か案は?

4

2 に答える 2

5

交換

KeyManagerFactory.getInstance("RSA")

KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm())
于 2013-01-23T12:26:03.530 に答える
5

KeyManagerFactoryアルゴリズムは とは何の関係もありませんRSA。使用できるものは、Sun JSSE プロバイダーのドキュメント (別のプロバイダーを使用している場合は、そのプロバイダーのドキュメント) に記載されています。

ここで使用できるオプションはSunX509とだけですPKIX。一般的に言えば、を使用する方が良いKeyManagerFactory.getDefaultAlgorithm()です。TrustManagerFactoryハードコーディングの代わりに、これを行うこともできますPKIX。(Sun JRE のデフォルト値は、ここにリストされています。)

于 2013-01-23T14:12:26.780 に答える