您的位置:首页 > 运维架构 > Tomcat

摘要算法加密tomcat登录密码(加盐,随机盐值)

2017-10-26 16:36 507 查看
tomcat 默认使用的安全域是从 conf/tomcat-users.xml 文件中读取用户名、密码和角色信息的,在默认的情况下密码是明文显示的,安全性不够,tomcat支持使用 md5 sha 等算法对密码进行加密。

1.设置安全域加密算法

        在server.xml文件中,找到 Realm 的配置,在最里层的 Realm (一般默认是UserDatabaseRealm)添加标签:

<CredentialHandler algorithm="MD5" className="org.apache.catalina.realm.MessageDigestCredentialHandler"/>


上面的标签表示,使用的凭证处理器为 MessageDigestCredentialHandler,tomcat还支持其它的凭证处理器如SecretKeyCredentialHandler,

上面的标签配置了使用摘要算法 MD5 来加密密码,它的作用是会对用户输入的密码进行 MD5 摘要以后再和tomcat-users.xml中存储的用户密码进行比对。

2.加密tomcat-users.xml文件中的密码

        由于上面第一步设置了使用 MD5 加密算法,所以存储的密码必需是 MD5 摘要后的,tomcat提供了加密脚本,可以方本地将自己的密码按照指定的算法加密,

该加密脚本是 bin/digest.bat (windows)和 bin/digest.bat (Linux),示例如下:

conquer@l:~/Desktop/temp/tomcat-7.0.30/bin$ sh digest.sh -a md5 tomcat
tomcat:1b359d8753858b55befa0441067aaed3


上述示例将 tomcat 按照 md5 加密后的产生了密文的密码,将其填写到tomcat-users.xml里,如下所示:

<user username="tomcat" password="1b359d8753858b55befa0441067aaed3" roles="tomcat"/>


好了,这样别人再打开你的tomcat-users.xml也看不到你的密码了,通过浏览器照常输入 tomcat 密码,后台验证一样通过。

后记:当然,这样的密码只是简单的一次 MD5 摘要,很容易暴力破解,例如通过 http://www.cmd5.com/ 这个网站,输入1b359d8753858b55befa0441067aaed3很轻松得到“tomcat”明文密码,Tomcat 也考虑到这个问题,也提供了
加盐摘要的方式。

tomcat 的 org.apache.catalina.realm.RealmBase 类的 main 方法,可以使我们方便地计算加盐摘要,可以指定加盐的字节长度,可以指定循环加密次数,示例代码:

public static void main(String[] args) throws Exception {
String[] arr = {"-a","md5","-s","32","-i","3","tomcat"};
org.apache.catalina.realm.RealmBase.main(arr);
}

上述示例 -s 参数 指定加盐的字节长度为32, -i 参数指定了循环加密的次数为3,打印出结果:
tomcat:0cc63656bcc70900b645242bcc84119a8766eed1c1d8b85fd1c44d6dd39dd330$3$982cff910b4d918a1450fb3e8810dc86

可以看到,tomcat字符串本次加密使用的32位随机盐值字节转换为16进制字符串为:0cc63656bcc70900b645242bcc84119a8766eed1c1d8b85fd1c44d6dd39dd330
循环加密次数为:3

加密后的结果为:982cff910b4d918a1450fb3e8810dc86

好了,这样的结果就不会那么轻易地被暴力破解了!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: