当前位置: 首页 > 知识库问答 >
问题:

如何配置HermesJMS以在通过SSL连接时使用特定的客户端证书?

巩光誉
2023-03-14

我创建了一个Spring Boot应用程序,它实例化了ActiveMQSSLBroker的一个实例。我试图使用HermesJMS作为客户端连接到此代理。

我在Hermes中配置了连接工厂,如下所示:

    null

代理在spring-boot应用程序中的配置如下:

  • SSL连接器:
    • brokerurl:ssl://localhost:61616
    • 键管理器:
      • 从keymanagerfactory.getkeymanagers()返回
        • keystore://path/to/key-store-intainting-broker-cert.ks
        • 从TrustManagerFactory.getTrustManagers()返回
          • truststore://path/to/trust-store-intainting-client-cert.ks
          javax.net.ssl.SSLHandshakeException: Received fatal alert: certificate_unknown
          

共有1个答案

汝跃
2023-03-14

原来是用户错误。我配置了几个不同的会话,在IDE和Hermes之间来回切换时,不知何故,我最终测试了一个使用错误连接工厂的会话。

切换到正确的会话后,事情开始奏效了。

为了完整起见,这里是我如何工作的:

@Bean
public BrokerService broker(
    @Value("${spring.activemq.broker-url}") String brokerUrl,
    @Qualifier("brokerTrustManagerFactory") TrustManagerFactory trustManagerFactory,
    @Qualifier("brokerKeyManagerFactory") KeyManagerFactory keyManagerFactory,
    @Qualifier("secureRandom") SecureRandom secureRandom
){
    SslBrokerService brokerService = new SslBrokerService();
    brokerService.addSslConnector(
        brokerUrl,
        keyManagerFactory.getKeyManagers(),
        trustManagerFactory.getTrustManagers(),
        secureRandom
    );
    return brokerService;
}
@Bean
ConnectionFactory connectionFactory(
    @Value("${spring.activemq.broker-url}") String brokerUrl,
    @Value("${spring.activemq.trustStorePath}") String trustStorePath,
    @Value("${spring.activemq.trustStorePass}") String trustStorePass,
    @Value("${spring.activemq.keyStorePath}") String keyStorePath,
    @Value("${spring.activemq.keyStorePass}") String keyStorePass,
    @Value("${client.key.pass}") String clientKeyPass
) {
    ActiveMQSslConnectionFactory connectionFactory = 
        new ActiveMQSslConnectionFactory(brokerUrl);
    connectionFactory.setTrustStore(trustStorePath);
    connectionFactory.setTrustStorePassword(trustStorePass);
    connectionFactory.setTrustStoreType("PKCS12");
    connectionFactory.setKeyStore(keyStorePath);
    connectionFactory.setKeyStorePassword(keyStorePass);
    connectionFactory.setKeyStoreKeyPassword(clientKeyPass);
    connectionFactory.setKeyStoreType("PKCS12");
    return connectionFactory;
}

谢谢,戴夫

 类似资料:
  • 问题内容: 我正在使用Java 6,并尝试使用客户端证书针对远程服务器创建一个。 服务器正在使用自签名的根证书,并且要求提供受密码保护的客户端证书。我已将服务器根证书和客户端证书添加到在中找到的默认Java密钥库中。密钥库文件的名称似乎表明不应将客户端证书放入其中? 无论如何,将根证书添加到此存储解决了臭名昭著的问题 但是,我现在停留在如何使用客户端证书上。我尝试了两种方法,但都无济于事。 首先,

  • 我创建了一个具有双向SSL认证的Spring Boot 2应用程序。 简而言之,它归结为以下配置: 该应用程序具有密钥库/信任库,可以与导入的客户端证书一起正常工作。 出乎意料的是,如果我尝试与未知客户端证书连接,由于SSL握手失败,连接无法建立 然而,我希望即使证书不被接受,也能到达应用层,并用应用程序的HTTP响应进行响应。 有没有办法做到这一点?

  • 我试图通过Psycopg2连接到AWS postgresql RDS。当我将安全组的入站规则设置为通过端口5432上的postgresql接受所有通信量时,我就可以连接了。 但是,当我将此端口上的postgresql入站规则限制为只接受来自客户端IP的通信量时,我无法连接并超时。我得到了错误: psycopg2.operationalerror:无法连接到服务器:连接超时服务器是否运行在主机“[h

  • 问题内容: 我正在尝试建立与trackobot.com的连接以接收一些JSON数据。服务器仅允许通过HTTPS / SSL进行连接。这是代码: openSteam抛出javax.net.ssl.SSLHandshakeException:收到致命警报:handshake_failure 我通读了与类似问题有关的几篇文章,但没有任何建议可以帮助您。适当的证书在我的信任库中。例如,当我尝试连接到goo

  • 我想向Hybris的不同客户群展示产品的不同价格。如何通过弹劾来实现这一点?