加密密码

特性 > 安全 > 加密密码

从 ActiveMQ Classic 5.4.1 开始,您可以加密密码并将其安全地存储在配置文件中。要加密密码,您可以使用新添加的 encrypt 命令,例如

$ bin/activemq encrypt --password activemq --input mypassword
...
Encrypted text: eeWjNyX6FY8Fjp3E+F6qTytV11bZItDp

其中,您要加密的密码通过 input 参数传递,而 password 参数是加密器使用的密钥。以类似的方式,您可以测试您的密码,例如

$ bin/activemq decrypt  --password activemq --input eeWjNyX6FY8Fjp3E+F6qTytV11bZItDp
...
Decrypted text: mypassword

注意:建议您只对密码使用字母数字字符。不支持特殊字符,例如 $/^&

从 5.16.0 版本开始,已添加对“encrypt”和“decrypt”命令指定算法参数的支持。默认情况下,使用的算法是“PBEWithMD5AndDES”。要使用更现代的加密算法,您可以指定

$ bin/activemq encrypt --password activemq --input mypassword --algorithm PBEWITHHMACSHA256ANDAES_256
...
Encrypted text: h/cWj/ZZelMt3Y7NSzUG2vHYSnfWK561qjNg9Ywyr9yT72ru7pR4IEUnHLIdLSOb

下一步是将密码添加到相应的配置文件中,默认情况下为 $ACTIVEMQ_HOME/conf/credentials-enc.properties

activemq.username=system
activemq.password=ENC(mYRkg+4Q4hua1kvpCCI2hg==)
guest.password=ENC(Cf3Jf3tM+UrSOoaKU50od5CuBa8rxjoL)
...
jdbc.password=ENC(eeWjNyX6FY8Fjp3E+F6qTytV11bZItDp)

注意,我们使用 ENC() 来包装加密的密码。您可以在属性文件中混合使用明文和加密的密码,因此加密的密码必须以这种方式包装。

最后,您需要指示属性加载器在将属性加载到内存时解密变量。为此,我们将使用特殊的属性加载器(参见 \$ACTIVEMQ_HOME/conf/activemq-security.xml),而不是标准的属性加载器。

<bean id="environmentVariablesConfiguration" class="org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig">
  <property name="algorithm" value="PBEWithMD5AndDES" />
  <property name="passwordEnvName" value="ACTIVEMQ\_ENCRYPTION\_PASSWORD" />
</bean>
                                                                     
<bean id="configurationEncryptor" class="org.jasypt.encryption.pbe.StandardPBEStringEncryptor">
  <property name="config" ref="environmentVariablesConfiguration" />
</bean> 
    
<bean id="propertyConfigurer" class="org.jasypt.spring31.properties.EncryptablePropertyPlaceholderConfigurer"> 
  <constructor-arg ref="configurationEncryptor" /> 
  <property name="location" value="file:${activemq.base}/conf/credentials-enc.properties"/> 
</bean>

通过这种配置,ActiveMQ Classic 将尝试从 ACTIVEMQ_ENCRYPTION_PASSWORD 环境变量加载加密器密码,然后使用它从 credential-enc.properties 文件中解密密码。

另一种方法是使用简单的变体,并将加密器密码存储在 xml 文件中,如下所示

<bean id="configurationEncryptor" class="org.jasypt.encryption.pbe.StandardPBEStringEncryptor">
  <property name="algorithm" value="PBEWithMD5AndDES"/>
  <property name="password" value="activemq"/>
</bean>

但是,这样会失去加密器密钥的保密性。您也可以参考 http://www.jasypt.org/advancedCommunity/FAQ/configuration.md,了解更多关于如何配置 Jasypt 的信息。

最后,我们可以像平常一样使用属性

<simpleAuthenticationPlugin>
  <users>
    <authenticationUser username="system" password="${activemq.password}"
      groups="users,admins"/>
    <authenticationUser username="user" password="${guest.password}"
      groups="users"/>
    <authenticationUser username="guest" password="${guest.password}" groups="guests"/>
  </users>
</simpleAuthenticationPlugin>

<bean id="mysql-ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
  <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
  <property name="url" value="jdbc:mysql://127.0.0.1/activemq?relaxAutoCommit=true"/>
  <property name="username" value="activemq"/>
  <property name="password" value="${jdbc.password}"/>
  <property name="maxActive" value="200"/>
  <property name="poolPreparedStatements" value="true"/>
</bean>

如果您想使用此配置运行代理,您需要执行以下操作

  • 设置环境变量
    $ export ACTIVEMQ\_ENCRYPTION\_PASSWORD=activemq
    
  • 启动代理
    $ bin/activemq start xbean:conf/activemq-security.xml
    
  • 取消设置环境变量
    $ unset ACTIVEMQ\_ENCRYPTION\_PASSWORD
    

这样,您的加密器密钥将永远不会保存在您的系统上,并且您的加密密码将安全地存储在配置文件中。

Apache, ActiveMQ, Apache ActiveMQ、Apache 羽毛标志和 Apache ActiveMQ 项目标志是 Apache 软件基金会的商标。版权所有 © 2024,Apache 软件基金会。根据 Apache 许可证 2.0 许可。