加密密碼

功能 > 安全性 > 加密密碼

自 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 專案標誌是 The Apache Software Foundation 的商標。版權所有 © 2024,The Apache Software Foundation。根據 Apache 授權 2.0 授權。