【问题标题】:Tomcat servlet securityTomcat servlet 安全性
【发布时间】:2012-02-07 20:42:29
【问题描述】:

我正在玩弄 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 可以在容器级别保护这些东西吗?

【问题讨论】:

  • 请将您的第二个问题作为一个单独的问题发布 - 它们不相关
  • 还有一个提示 - 用 Ja​​va 标签标记你的 Java 相关问题 - 它将允许更多人查看它

标签: java security tomcat


【解决方案1】:

首先,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}

【讨论】:

  • 我为zenon:UserDatabase:qazxsw生成了新的digest,将它放在我的tomcat-users.xml中,当我将auth-method更改为digest时我仍然无法登录。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-26
  • 1970-01-01
  • 2013-02-14
  • 2021-01-26
  • 2020-01-26
相关资源
最近更新 更多