Tomcat 8.5消化身份验证

时间:2017-08-03 09:06:51

标签: tomcat authentication

我正在尝试在CentOS 7上的Tomcat 8.5上设置消化身份验证。我查看/关注了各种文章,包括 - How to use digest authentication in Tomcat 8.5? - 但是在执行了所有必需的步骤后,它无法正常工作。我已经为管理器和主机管理器应用程序设置了这个,但密码永远不会被排除,而localhost_access日志会报告401错误。使用基本身份验证可以访问这些应用程序。

我的server.xml配置如下:

    <!-- Use the LockOutRealm to prevent attempts to guess user     passwords
           via a brute-force attack -->
      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <!-- This Realm uses the UserDatabase configured in the global JNDI
             resources under the key "UserDatabase".  Any edits
             that are performed against this UserDatabase are immediately
             available for use by the Realm.  -->
         <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase">
           <CredentialHandler className="org.apache.catalina.realm.MessageDigestCredentialHandler" algorithm="SHA-256" />
         </Realm>
   </Realm>

每个应用程序的web.xml都已编辑为:

     <!-- Define the Login Configuration for this Application -->
  <login-config>
    <auth-method>DIGEST</auth-method>
    <realm-name>UserDatabase</realm-name>
  </login-config>

密码由:

创建
    /opt/tomcat/bin/digest.sh -s 0 -a sha-256 -h org.apache.catalina.realm.MessageDigestCredentialHandler "username":UserDatabase:"password"

tomcat-user.xml中的密码已被替换为。

我还在server.xml中检查过以下部分中的“name”是否与server.xml和web.xml的lockoutrealm部分中定义的匹配

     <Resource
auth="Container"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
name="UserDatabase"  #<--------------NOTE
pathname="conf/tomcat-users.xml"
type="org.apache.catalina.UserDatabase"/>

在这些更改之后我也重新启动了tomcat服务,我重新启动了服务器 - 抓着稻草......

当我尝试登录浏览器时,我会不断重新提示如下,如果我取消,我会得到标准的401错误屏幕

Browser login box

我知道我一定错过了一些东西,但是我已经在这里待了一段时间而且看不出它是什么。

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,在MacOS High Sierra上运行。 (我最终将部署到CentOS 7.)短版本,使用MD5而不是SHA。我可以通过MD5进行消化工作,如https://tomcat.apache.org/tomcat-8.5-doc/realm-howto.html#Digested_Passwords中含糊不清地描述如下:

1)首先,&lt;领域名称&gt;在web.xml文件中定义是任意的;它是server.xml文件中定义的独立构造。但是,您需要了解它。

2)显然,设置&#34;算法= md5&#34; &lt; CredentialHandler&gt;中的属性&lt; Realm&gt;

中server.xml中的元素

3)为MD5运行digest.sh时,必须指定&#34; -a md5 -s 0 -i 1&#34;。

4)&#34;密码&#34;通过digest命令获取哈希值必须是userid:realm-name:password的串联。这使用&lt;域名&gt;来自web.xml的值。

我用SHA-256尝试了上述步骤,没有运气。我最好的猜测是&#34;提供商默认&#34;命令行使用的内容与内部使用的不同,并且没有记录。这是MD5哈希的情况,其中Tomcat文档显式使用&#34; -s 0&#34; flag,这不是默认值。