我试图在ActiveMQ和C ++客户端之间进行SSL通信。我已使用以下命令成功生成了服务器证书:
keytool -genkeypair -alias ActiveMQ -keyalg RSA -keysize 2048 -sigalg SHA256withRSA
-validity 4383 -keystore ActiveMQ.ks -storepass <PASSWORD> -keypass <PASSWORD>
-dname "CN=ActiveMQ,O=My Company,OU=My OU,L=My City,ST=My State,C=US"
-ext SAN=DNS:localhost,IP:127.0.0.1
然后将其导出为PEM格式:
keytool -exportcert -alias ActiveMQ -keystore ActiveMQ.ks -storepass <PASSWORD>
-rfc -file ActiveMQ.pem
最后,在调用activemq::library::ActiveMQCPP::initializeLibrary()
后立即包含以下行:
decaf::lang::System::setProperty("decaf.net.ssl.trustStore", "ActiveMQ.pem");
当我尝试连接到主机ssl://localhost:61617
时,一切都按预期工作。但是,当我尝试连接到ssl://LOCALHOST:61617
或ssl://127.0.0.1:61617
时,我收到错误消息:
服务器证书名称与URI主机名值不匹配。
有谁知道如何修改OpenSSL证书验证器的行为?检查DNS条目时应该与案例无关,我也希望它检查IP地址。我希望两个失败的连接字符串(见上文)都能正常工作。
如果重要,我的环境设置如下:
OS : Windows 7 Enterprise SP1 x64
Compiler : Visual Studio 2008 Professional
ActiveMQ : 5.13.1
ActiveMQ-CPP: 3.8.4
OpenSSL : 1.0.2j
APR : 1.5.2/1.5.4/1.2.1
JRE : 8u112
感谢。