我正在使用tomcat安全性来处理servlet。在我的server.xml中我有
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"
digest="SHA"/>
和我的tomcat-users.xml
<user username="zenon" password="qazxsw" roles="proby"/>
<user username="andrzej" password="1c29cf0ceb89afce131e27b76c18af1e9cf7f5e3" roles="admin-gui,manager-gui,proby,role1"/>
非常简单的应用程序的web.xml
<security-constraint>
<display-name>No Pasaran</display-name>
<web-resource-collection>
<web-resource-name>Tylko dla memberow</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>proby</role-name>
<role-name>role1</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>UserDatabase</realm-name>
</login-config>
所以当auth-method是BASIC我可以使用用户名登录:andrzej和密码:qazxsw(这个长密码的andrzej是qazxsw的SHA)所以现在看来,当我发送密码时,他已经在比较之前消化了它。 我是这么认为的,因为当我使用DIGEST作为auth方法我无法登录时,他是否在比较之前消化密码两次? 如果是,还有其他任何方式,那么https来保护容器级别的这些东西吗?
答案 0 :(得分:3)
首先,HTTP DIGEST不使用SHA,遗憾的是它使用MD5。您需要在server.xml
中定义的Realm和用于生成密码摘要的命令行中用MD5替换SHA。
然后,正如Tomcat documentation建议你的领域密码被消化时,为BASIC和DIGEST auth机制生成密码的方法是不同的。因此,您不可能使用相同的密码摘要来测试BASIC和DIGEST方法。
如果是BASIC,您可以使用以下命令生成密码摘要:
CATALINA_HOME/bin/digest.[bat|sh] -a {algorithm} {cleartext-password}
如果是DIGEST,则为:
CATALINA_HOME/bin/digest.[bat|sh] -a {algorithm} {username}:{realm}:{cleartext-password}