如何在ActiveMQ中配置使用非自签名的正式SSL证书
ActiveMQ 正式SSL证书配置方案
- 你现有的
.cer证书和.key私钥无法直接被ActiveMQ的Jetty组件识别,需要先转换为JKS或PKCS12格式的密钥库,转换证书格式的思路是正确的。 - 不需要使用官方默认的双向握手方案,通过简单配置即可实现仅服务端认证的单向SSL,无需修改第三方客户端的任何设置。
操作步骤
步骤1:转换证书格式(两种可选方案)
方案A:转换为JKS格式(兼容所有ActiveMQ版本)
- 先将证书和私钥合并为PKCS12格式文件,执行openssl命令:
openssl pkcs12 -export -in 你的域名证书.cer -inkey 你的域名私钥.key -out broker.p12 -name activemq -CAfile 证书链根证书.cer -caname root
执行过程中按提示设置PKCS12文件的导出密码,请牢记该密码。
2. 再将PKCS12文件转换为JKS格式密钥库,执行keytool命令(keytool为JDK自带工具,需配置好JDK环境变量):
keytool -importkeystore -deststorepass 自定义JKS存储密码 -destkeypass 自定义密钥访问密码 -destkeystore broker.ks -srckeystore broker.p12 -srcstoretype PKCS12 -srcstorepass 上一步设置的PKCS12导出密码 -alias activemq
建议将JKS存储密码和密钥访问密码设置为相同,避免Jetty读取密钥库出错。
方案B:直接使用PKCS12格式(适用于ActiveMQ 5.14+以上版本)
如果你的ActiveMQ版本较新,可省略转换JKS的步骤,直接使用上一步生成的broker.p12作为密钥库文件。
步骤2:修改Jetty配置实现单向SSL认证
打开ActiveMQ安装目录下conf/jetty.xml文件,找到SecureConnector对应的bean配置,修改为以下内容:
<bean id="SecureConnector" class="org.eclipse.jetty.server.ssl.SslSelectChannelConnector"> <property name="port" value="8162" /> <!-- 如果你用方案A的JKS格式,保留以下三行配置 --> <property name="keystore" value="file:${activemq.conf}/broker.ks" /> <property name="password" value="你设置的JKS存储密码" /> <property name="keyPassword" value="你设置的密钥访问密码" /> <!-- 如果你用方案B的PKCS12格式,注释上面三行,取消注释以下三行 <property name="keystore" value="file:${activemq.conf}/broker.p12" /> <property name="keystoreType" value="PKCS12" /> <property name="password" value="你设置的PKCS12导出密码" /> --> <!-- 关闭双向认证,仅启用服务端单向认证 --> <property name="wantClientAuth" value="false" /> <property name="needClientAuth" value="false" /> </bean>
步骤3:验证配置
- 将生成的
broker.ks(或broker.p12)文件放到ActiveMQ安装目录的conf文件夹下 - 重启ActiveMQ服务
- 用浏览器访问
https://你的域名:8162,查看证书信息是否为你购买的正式证书,且无需客户端证书即可正常访问页面即为配置成功。
注意事项
- 密钥库文件的权限建议设置为仅ActiveMQ运行用户可读,避免密钥泄露
- 不要使用默认的
password作为密钥库密码,建议设置复杂度较高的自定义密码
内容的提问来源于stack exchange,提问作者Umair Khalid
相关产品推荐
相关产品推荐

