Bootstrap

tomcat tomcat-users.xml 文件密码加密

客户环境突然强制要求所有的文件不能包含明文密码,我们的项目部署在tomcat中,需要修改配置文件,但不能把接口请求的密码改掉,所以使用本地加密就可以忽悠交付客户。

tomcat-users.xml 文件中,密码默认以明文形式存储。如果想将密码改为密文存储,并确保访问 Tomcat 时仍然能够正常认证,需要进行以下步骤:

1. 使用 Tomcat 提供的密码加密工具

Tomcat 提供了 digest 工具来生成加密的密码。可以使用以下命令生成一个加密的密码:

$CATALINA_HOME/bin/digest.sh -a SHA-256 your_password

或者如果在 Windows 上:

%CATALINA_HOME%\bin\digest.bat -a SHA-256 your_password

这将生成一个类似于 SHA-256:hash_value 的字符串。
例如:对123456加密后会生成 123456:{加密后字符串},只需要使用冒号后面的就行

在这里插入图片描述

2. 修改 tomcat-users.xml

将生成的加密密码替换到 tomcat-users.xml 文件中。例如:

<user username="admin" password="SHA-256:hash_value" roles="manager-gui,admin-gui"/>

3. 配置 Realm

为了让 Tomcat 能够识别加密的密码,需要在 server.xml 中配置相应的 Realm。找到 UserDatabaseRealmMemoryRealm,并添加 digest 属性:

<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
       resourceName="UserDatabase"
       digest="SHA-256"/>

注意Tomcat8.5版本后需要使用下面的方式

<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
	resourceName="UserDatabase">
	<!-- 添加 CredentialHandler 指定加密算法 -->
	<CredentialHandler className="org.apache.catalina.realm.MessageDigestCredentialHandler"
		algorithm="SHA-256"/>
</Realm>

4. 重启 Tomcat

完成上述修改后,重启 Tomcat 以使更改生效。

5. 访问 Tomcat

当访问 Tomcat Manager 或其他受保护的资源时,Tomcat 会自动处理密码的加密和解密过程。仍然可以通过明文密码进行认证,因为 Tomcat 会在后台进行密码的加密和验证。

注意事项

  • 安全性:虽然密码在存储时是加密的,但在传输过程中仍然是明文的。为了确保传输安全,建议启用 HTTPS。
  • 兼容性:确保使用的 Tomcat 版本支持选择的加密算法(如 SHA-256)。

通过以上步骤,可以在 tomcat-users.xml 中使用加密密码,同时仍然能够通过明文密码进行访问。

;