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

ActiveMQ Artemis“needclientauth=true”错误输出“空客户端证书链”。消息(AMQ222208)

淳于思淼
2023-03-14

我有ActiveMQ Artemis集群,共享存储的主动备份模式,版本2.17.0。SSL与此群集一起使用。

我从Kafka集群中获取了Keystore/Truststore文件,它完全可以使用双向TLS。我在Artemis中重用了这些文件,它也工作得很好。但是,当我在URL字符串中启用needclientauth=true时,问题就出现了。

尼德克利恩塔特

此属性仅适用于接受者。它告诉连接到此接受器的客户端需要双向SSL。有效值为truefalse。默认值为false

所以如果我想实现双向TLS,我必须使用这个选项。那么服务器和客户机都必须有自己的keystore/truststore对。在我的例子中,服务器和客户端都是相同的。

Connection failed::Failed to create session factory
WARN  [org.apache.activemq.artemis.core.server] AMQ222208: SSL handshake failed for client from /123.123.123.123:36788: javax.net.ssl.SSLHandshakeException: Empty client certificate chain.
# Generate private key and CSR
openssl req -new -newkey rsa:2048 -nodes -days 365 -subj '/CN=something.com/OU=XXX/O=Company/L=City/ST=City/C=XX' -keyout private.key -out mycsr.csr

# Upload CSR to magic website, get back CA and signed certificate.
# ...

# Since CA is chain, and you cannot import chain into keystore/truststore, split into multiple files: ca1.cer and ca2.cer.
# ...

# Create truststore.jks
keytool -importcert -noprompt -alias ca1 -file ca1.cer -keystore truststore.jks
keytool -importcert -noprompt -alias ca2 -file ca2.cer -keystore truststore.jks

# Because it's impossible to create JKS keystore out of private key, first generate PKCS12 keystore:
openssl pkcs12 -inkey private.key -in certificate.cer -export -out keystore.p12

# Now convert PKCS12 keystore to JKS keystore:
keytool -importkeystore -srckeystore keystore.p12 -srcstoretype pkcs12 -destkeystore keystore.jks -deststoretype jks

# Since above command added only a private key, we also need to add an issued certificate:
keytool -importcert -noprompt -alias certificate -file certificate.cer -keystore keystore.jks

# Some client's (in Kafka) does not work if CA is not added to keystore, so add it:
keytool -importcert -noprompt -alias ca1 -file ca1.cer -keystore keystore.jks
keytool -importcert -noprompt -alias ca2 -file ca2.cer -keystore keystore.jks

# End up with the following files:
keystore.jks
truststore.jks
---------
ca.cer
certificate.cer
private.key
tcp://server.com:1234?tcpSendBufferSize=1048576;tcpReceiveBufferSize=1048576;amqpMinLargeMessageSize=102400;protocols=CORE,AMQP,STOMP,HORNETQ,MQTT,OPENWIRE;useEpoll=true;amqpCredits=1000;amqpLowCredits=300;amqpDuplicateDetection=true;sslEnabled=true;needClientAuth=true;keyStorePath=/opt/ssl/keystore.jks;keyStorePassword=123;trustStorePath=/opt/ssl/truststore.jks;trustStorePassword=123

在使用ActiveMQ Artemis CLI进行连接时,我传递以下URL:

tcp://server.com:1234?sslEnabled=true;keyStorePath=/opt/ssl/truststore.jks;keyStorePassword=123;trustStorePath=/opt/ssl/truststore.jks;trustStorePassword=123

我错过了什么?

共有1个答案

施翰学
2023-03-14

代理和客户都需要有自己的证书。您似乎只创建了一个证书,并在代理和客户端上使用该证书。

例如,代理需要在其密钥存储中拥有自己的证书,它将该证书提交给客户机,客户机在其信任存储中拥有该证书。然后客户机需要在它的密钥存储中拥有它自己的证书,并将其提交给代理,代理拥有的是它的信任存储。

据我所知,你不是在这么做。请看ActiveMQ Artemis附带的SSL-enabled-dual-authentication示例。它包含使用自签名证书运行所需的所有keytool命令。一旦您启动并使用简单的自签名证书运行,您就可以转到由证书颁发机构签名的证书。

最后,您在ActiveMQ Artemis CLI中使用的URL看起来不正确,因为KeyStorePath引用的是truststore/opt/ssl/truststore.jks

 类似资料:
  • 我试图建立一个ssl连接。我有一个服务器和一个客户端。我让他们两个在同一台机器上运行。我试图在客户端和服务器之间建立SSL连接。我已经使用以下keytool命令为服务器和客户端生成了证书。 对于客户 keytool-import-keystore clientstore-file server.cer-alias server 完成此操作后,我将server.cer和client.cer都导入到c

  • null 有人能帮帮我吗?谢谢。 代码 斯塔克特莱斯

  • 我一直在尝试使用Laravel Passport,但我收到了错误{“error”:“invalid_client”,“message”:“client authentication failed”}。我已经在这个Android和Laravel项目中使用了它,但是当我在数据库中看到正确的数据时,我可以正确地注册用户。然后,当Android应用程序尝试获取访问令牌时,它会崩溃,因为服务器返回了以前的错

  • 客户端错误信息来自下述源文件: ·圆括号中的错误值和符号与include/errmsg.h MySQL源文件中的定义对应。 ·消息值与libmysql/errmsg.c文件中列出的错误消息对应。%d和%s分别代表数值和字符串,显示时,它们将被消息值取代。 由于更新很频繁,这些文件中可能包含这里未列出的额外错误消息。 ·错误:2000 (CR_UNKNOWN_ERROR) 消息:未知MySQL错误。

  • 我正在尝试在IIS 8上实现客户端证书身份验证。我已经在一台开发机器上部署了我的配置,并在那里验证了它是否按预期工作。然而,在服务器上设置之后,每当我导航到该站点并被提示输入客户端证书时,我选择它并立即得到403.16错误。失败的请求日志给出错误代码2148204809,并显示消息“已处理证书链,但在信任提供程序不信任的根证书中终止。” 我有一个有效的客户端证书和一个有效的CA证书。CA证书安装在

  • 我正在使用Paypal Payments Pro运行magento 1.8ce,我正在尝试找到一种方法来定制显示给客户的错误信息。当由于客户的卡而导致支付失败时,他们会看到这样的消息:“PayPal gateway已拒绝请求。此交易无法处理(#15005:处理器拒绝)。”客户并不清楚问题是什么。 有没有一种方法可以将错误信息更改为“对客户友好”的措辞?例如“对不起,您的卡已被谢绝,请尝试其他方法。