解决ssl java.security.cert.CertificateException: No name match

本文档详细介绍了在使用ActiveMQ时遇到的`java.security.cert.CertificateException: No name matching localhost found`问题的解决过程。内容包括SSL证书的制作、Broker SSL Connector配置、客户端代码关键部分及出现SSL问题时的排查思路,特别是如何通过修改URI参数来避免主机名匹配检查。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

activemq ssl  java.security.cert.CertificateException: No name matching localhost found

解决activemq ssl  java.security.cert.CertificateException: No name matching localhost found的问题

目录

问题描述:

SSL证书的制作(未做CA签名)

Broker SSL Connector以及SSL证书的配置

配置transportConnectors

配置SSL证书

客户端程序关键代码

出现SSL问题,排查思路

ActiveMQSslConnectionFactory

ActiveMQConnectionFactory

TransportFactory

SslTransportFactory​​​​​​

SslTransport


问题描述:

在AMQ Broker配置ssl+nio的connector,安装SSL证书,客户端通过ssl进行topic消息的发送与消费时出现java.security.cert.CertificateException: No name matching localhost found的问题,下文是具体的过程

SSL证书的制作(未做CA签名)

#创建broker的keystore
keytool -genkey -alias broker -keyalg RSA -keystore broker.ks
#从broker keystore中导出证书
keytool -export -alias broker -keystore broker.ks -file broker_cert
#创建客户端的keystore
keytool -genkey -alias client -keyalg RSA -keystore client.ks
#将服务器端的证书导入客户端的keystore
keytool -import -alias broker -keystore client.ts -file broker_cert

注意:这里仅做单项认证,也就是说客户端认证服务器是否合法,并未做双向认证,双向认证可以参考文档:https://activemq.apache.org/how-do-i-use-ssl.html

Broker SSL Connector以及SSL证书的配置

将制作的证书配置在AMQ的Broker中,并且配置Connector使其生效

配置transportConnectors

<transportConnectors>
...
<transportConnector name="auto+nio+ssl" uri="auto+nio+ssl://0.0.0.0:61616?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
			<transportConnector name="nio+ssl" uri="nio+ssl://0.0.0.0:61617?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
...
</transportConnectors>

配置SSL证书

<sslContext>
		    <sslContext keyStore="conf/broker.ks"
                keyStorePassword="******"
				 trustStore="conf/broker.ks" 
                 trustStorePassword="******" />
        </sslContext>

客户端程序关键代码

客户端代码比较简单(无论publish还是subscribe),所以我只贴出来关键部分的代码

//使用ActiveMQSslConnectionFactory,它是ActiveMQConnectionFactory的子类,做了一些关于SSLContext的声明
ActiveMQSslConnectionFactory factory = new ActiveMQSslConnectionFactory("ssl://192.168.88.3:61617");
    factory.setKeyAndTrustManagers(getKeyManagers("keystore路径", "keystore密码"),
            getTrustManagers(), new java.security.SecureRandom());
//...省略
  private static TrustManager[] getTrustManagers()
          throws NoSuchAlgorithmException, IOException,
          KeyStoreException, CertificateException {
    return new TrustManager[]{new X509TrustManager() {
      private X509Certificate[] certificates;

      @Override
      public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
        if (x509Certificates == null) {
          this.certificat
elasticsearch@elasticsearch-master-2:~$ elasticsearch-reset-password -u elastic -i 123qqWARNING: Owner of file [/usr/share/elasticsearch/config/users] used to be [root], but now is [elasticsearch] WARNING: Owner of file [/usr/share/elasticsearch/config/users_roles] used to be [root], but now is [elasticsearch] q05:59:51.395 [main] WARN org.elasticsearch.common.ssl.DiagnosticTrustManager - failed to establish trust with server at [172.16.58.200]; the server provided a certificate with subject name [CN=elasticsearch-master], fingerprint [663f0e2ea99d6c658d7418a5119e1d756abc2ef3], keyUsage [digitalSignature, keyEncipherment] and extendedKeyUsage [serverAuth, clientAuth]; the session uses cipher suite [TLS_AES_256_GCM_SHA384] and protocol [TLSv1.3]; the certificate has subject alternative names [DNS:elasticsearch-master,DNS:elasticsearch-master.logging,DNS:elasticsearch-master.logging.svc]; the certificate is issued by [CN=elasticsearch-ca] but the server did not provide a copy of the issuing certificate in the certificate chain; the issuing certificate with fingerprint [6aacfbb37169100f515734e0862890ea18cd03f1] is trusted in this ssl context ([xpack.security.http.ssl (with trust configuration: PEM-trust{/usr/share/elasticsearch/config/certs/ca.crt})]) java.security.cert.CertificateException: No subject alternative names matching IP address 172.16.58.200 found at sun.security.util.HostnameChecker.matchIP(HostnameChecker.java:164) ~[?:?] at sun.security.util.HostnameChecker.match(HostnameChecker.java:101) ~[?:?]
最新发布
04-02
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值