java - Tomcat Servlet 安全性

标签 java security tomcat

我正在考虑 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/

相关文章:

security - 为什么base64对API授权 key 进行编码?

php - 如何防止 PHP 中的 SQL 注入(inject)?

java - 在 Tomcat 上安装两个 grails 应用程序导致异常

java - 无法打开网址。请检查此网址是否正确

Java版本验证

java - 尝试通知线程已使用 Exchanger 创建对象会导致两个线程都被锁定

java - JAX-WS::从独立的 Java 7 SE 客户端调用 Web 服务的方法

java - Java 中的日历...我对两个不同的值得到相同的结果

java - Java Web Start 的过期证书

java - 通过java运行批处理文件(.bat)所需的解决方案