Tomcat servlet安全性

时间:2012-02-07 20:42:29

标签: java security tomcat

我正在使用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来保护容器级别的这些东西吗?

1 个答案:

答案 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}