3

私はsslを利用したブローカーに接続するためにjava activemqクライアントソフトウェアに取り組んでいますが、プログラムでトラストストアを設定しています:

// Configure the secure connection factory.
ActiveMQSslConnectionFactory connectionFactory = new ActiveMQSslConnectionFactory(url);
connectionFactory.setTrustStore("/conf/client.ts"); // truststore which includes the certificate of the broaker
connectionFactory.setTrustStorePassword("password");

ここに示されているように。ただし、それは

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX パスの構築に失敗しました エラー

QA Resolving javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed Error?の応答に従います。ブローカ証明書を Java インストールの信頼できる証明書に追加することで、クライアントをブローカに正常に接続できました。

ただし、この場合、アプリケーションを使用する各ユーザーが各自の Java ディストリビューションに証明書をインポートするのではなく、クライアント アプリケーションが既にブローカー証明書を持っていることを望んでいます。できれば ActiveMQSslConnectionFactory クラスを使用してそれを行うにはどうすればよいですか?

4

2 に答える 2

1

私が理解していることから、受信するすべての自己署名証明書を信頼する必要があります。

この方法を試すことができます(検証しない信頼マネージャーを作成してから登録します:

TrustManager[] trustAllCerts = new TrustManager[] { 
    new X509TrustManager() {     
        public java.security.cert.X509Certificate[] getAcceptedIssuers() { 
            return null;
        } 
        public void checkClientTrusted( 
            java.security.cert.X509Certificate[] certificates, String authType) {
            } 
        public void checkServerTrusted( 
            java.security.cert.X509Certificate[] certificates, String authType) {
        }
    } 
}; 

try {
    SSLContext sslContext = SSLContext.getInstance("SSL"); 
    sslContext.init(null, trustAllCerts, new java.security.SecureRandom()); 
    HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());
} catch (GeneralSecurityException e) {
} 

//then do the ssl conversation.
于 2013-05-25T08:58:30.620 に答える