我有一个与此示例非常相似的简单 C++ ActiveMQ 消息传递客户端。
任务是通过 SSL 连接客户端
收到的文件amq-client_cert.cer
(证书)、amq-client.ks
(keyStore)、amq-client.ts
(trustStore)
根据文档,密钥应采用以下格式.pem
我没有找到如何转换.ts
为.pem
(有必要吗?)
根据文档,代码应如下所示:
System::setProperty( "decaf.net.ssl.keyStore", "<path>/client.pem" );
System::setProperty( "decaf.net.ssl.keyStorePassword", "password" );
System::setProperty( "decaf.net.ssl.trustStore", "<path>/rootCA.pem" );
将 .ks 转换为 .pem 后,我的代码如下所示:
decaf::lang::System::setProperty("decaf.net.ssl.keyStore", "/home/xxx/Keys/sascomm/myapp.pem");
decaf::lang::System::setProperty("decaf.net.ssl.keyStorePassword", "xxx");
decaf::lang::System::setProperty("decaf.net.ssl.trustStore","/home/xxx/Keys/sascomm/amq-client.ts");
decaf::lang::System::setProperty("decaf.net.ssl.trustStorePassword","xxx");
它比我尝试为道具滑动decaf.net.ssl.keyStore
文件.ks
(消失PEM_read_bio:no start line
)但仍然无法连接时变得更好,我只看到一行Error occurred while accessing an OpenSSL library method:
然后是一个空行(我显示为CMSException::printStackTrace()
)
错误在哪里?怎么办amq-client.ts
?谁能给一步一步的指示?或者至少提示在哪里挖掘?
如果有人遇到这个问题,我会回答我自己的问题。假设您有两个密钥xxx-machine-client.ks和xxx-machine-client.ts,您需要分别将它们设为xxx-client.pem和xxx-server.pem。 这样做:
也就是我们通过一个中间环节来做
.p12
。而且我还需要将服务器IP与证书的CN(通用名)相匹配
/etc/hosts
。例如:并在连接时使用此主机。
您可以像这样查看证书数据:
就是这样,将pem放在任何地方,并在其中指明它们的路径和密码
decaf::lang::System::setProperty