ActiveMQ相互SSL身份验证

ActiveMQ相互SSL身份验证,ssl,activemq,mutual-authentication,Ssl,Activemq,Mutual Authentication,我正在尝试设置ActiveMQ以进行相互身份验证,客户端需要一个证书才能将消息传递给代理。我在代理上创建了密钥库和信任库,并导出了一个复制到客户端的证书。在客户端,我也做了同样的操作,尽管我使用的是NMS,所以我只使用导出的证书,该证书是我添加到代理的信任库中的。我还将证书添加到另一方的本地计算机受信任根证书中。 代理的配置包含以下内容: <transportConnectors> <transportConnector name="ssl" uri="ssl://0.

我正在尝试设置ActiveMQ以进行相互身份验证,客户端需要一个证书才能将消息传递给代理。我在代理上创建了密钥库和信任库,并导出了一个复制到客户端的证书。在客户端,我也做了同样的操作,尽管我使用的是NMS,所以我只使用导出的证书,该证书是我添加到代理的信任库中的。我还将证书添加到另一方的本地计算机受信任根证书中。
代理的配置包含以下内容:

<transportConnectors>  
  <transportConnector name="ssl" uri="ssl://0.0.0.0:61616"/>  
</transportConnectors>  
<sslContext>  
  <sslContext keyStore="file:${activemq.base}/conf/keystore.jks"  
    keyStorePassword="ksPass"  
    trustStore="file:${activemq.base}/conf/shared.ks"  
    trustStorePassword="ksPass"/>  
</sslContext>  
<plugins>  
 <jaasCertificateAuthenticationPlugin configuration="CertLogin" />  
</plugins>  
${activemq.base}/conf/users.properties已被删除

user=CN=nms.client.170,\ OU=IT,\ O=MyOrg,\ L=Oslo,\ S=Oslo,\ C=NO  
admins=system  
users=system,user    
${activemq.base}/conf/groups.properties已被删除

user=CN=nms.client.170,\ OU=IT,\ O=MyOrg,\ L=Oslo,\ S=Oslo,\ C=NO  
admins=system  
users=system,user    
在NMS客户端的应用程序设置中,我使用此选项连接:

< add key="jms.uri" value="ssl://brokeraddress.in.hosts:61616?needClientAuth=true&amp;wantClientAuth=true&amp;transport.clientCertSubject=nms.client.170&amp;transport.clientCertPassword=ksClientPw&amp;transport.clientCertFilename=C:\TestClient\client170.crt" />    
在经纪人中,它说:

INFO | jvm 1 | 10:18:20 | WARN | Failed to add Connection ID:EJPB-56409-635193299565662525-1:0, reason: java.lang.SecurityException: Unable to authenticate transport without SSL certificate. INFO | jvm 1 | 10:18:22 | INFO | Stopping tcp://192.168.5.170:56408 because Failed with SecurityException: Unable to authenticate transport without SSL certificate. 在经纪人那里我得到了空证书链

INFO | jvm 1 | 15:28:13 | ERROR | Could not accept connection from tcp://192.168.50.170:61978: javax.net.ssl.SSLHandshakeException: null cert chain

我在彼此的信任库和本地计算机信任根目录中都有证书。。。还需要什么?如果没有自签名证书,它应该在哪里找到证书链?

好的,我现在似乎已经找到了。重新阅读后,我将客户端证书和密钥导出到PKCS文件,并将其导入Windows中的当前用户证书存储。
C:\>keytool-v-importkeystore-srckeystore-client-keystore.jks-srcalas-destkeystore-client.p12-deststoretype PKCS12

然后我使用了这个url编码的连接:

我也有
${activemq.base}/conf/users.properties:
user=CN=nms.client.170\OU=IT\O=MyOrg\L=Oslo\S=Oslo\C=NO
,试图转义空格,我删除了这些空格并将其更正为ST,就像keytool报告所有者行一样。我检查过了,否则会出错

已更正${activemq.base}/conf/users.properties:

user=CN=nms.client.170,OU=IT,O=MyOrg,L=Oslo,ST=Oslo,C=NO

Hi EJBB,Me也面临相同的
空证书链
执行选项。请告诉我在哪里添加以下行
,这是NMS项目中使用“jms.uri”键的app.config。我发现文件版本更容易,因为在存储中查找证书有时会有问题。clientCertSubject似乎不适用于用户本地系统帐户的默认安装服务,它找不到任何证书。以其他用户身份运行,或改用clientCertFilename。“)”是NMS查询处理中的分隔符,因此不要将证书放在“C:\Program Files(x86)/文件夹”等中。“C:\My Files/client.p12”起作用(空格、正斜杠和反斜杠)
<transportConnector name="ssl" uri="ssl://0.0.0.0:61616?needClientAuth=true"/>  
15:28:14,044 ERROR Test_DataCom.MyTrace - Exception: A call to SSPI failed, see inner exception.
15:28:14,045 ERROR Test_DataCom.MyTrace - Inner exception: An unknown error occurred while processing the certificate
15:28:14,045 ERROR Test_DataCom.MyTrace - Authentication failed - closing the connection.  
INFO | jvm 1 | 15:28:13 | ERROR | Could not accept connection from tcp://192.168.50.170:61978: javax.net.ssl.SSLHandshakeException: null cert chain