客户环境突然强制要求所有的文件不能包含明文密码,我们的项目部署在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。找到 UserDatabaseRealm
或 MemoryRealm
,并添加 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
中使用加密密码,同时仍然能够通过明文密码进行访问。