我正在考虑 servlet 的 tomcat 安全性。在我的 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 作为身份验证方法时,我无法登录,他在比较密码之前是否会消化密码两次? 如果是,还有其他方法可以通过 https 来在容器级别保护此类内容吗?
最佳答案
首先HTTP DIGEST不幸的是,它不使用 SHA,而是使用 MD5。您需要在 server.xml
中定义的领域以及用于生成密码摘要的命令行中将 SHA 替换为 MD5。
然后,如Tomcat documentation建议如果您的领域密码被摘要,则为 BASIC 和 DIGEST 身份验证机制生成密码的方式是不同的。因此您不可能使用相同的密码摘要来测试 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}
关于java - Tomcat Servlet 安全性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9183573/