Tomcat w/SSL,在站点的一部分上进行客户端/服务器身份验证

Tomcat w/SSL,在站点的一部分上进行客户端/服务器身份验证,tomcat,authentication,ssl,client-server,client-certificates,Tomcat,Authentication,Ssl,Client Server,Client Certificates,我正在尝试设置ApacheTomcat服务器,以便SSL在整个站点上工作,并且在站点的一部分上强制执行客户端/服务器身份验证。客户已将其根CA(以.crt格式)提供给我以供信任。他们将使用客户端证书尝试连接到https:///sso/login,在进行身份验证后,网站应允许他们与该部分进行RESTful交互 首先,我使用的是ApacheTomcat6。我有一个站点设置为在server.xml中使用SSL和以下连接器: <Connector port="443" SSLEnabled="tr

我正在尝试设置ApacheTomcat服务器,以便SSL在整个站点上工作,并且在站点的一部分上强制执行客户端/服务器身份验证。客户已将其根CA(以.crt格式)提供给我以供信任。他们将使用客户端证书尝试连接到
https:///sso/login
,在进行身份验证后,网站应允许他们与该部分进行RESTful交互

首先,我使用的是ApacheTomcat6。我有一个站点设置为在
server.xml
中使用SSL和以下连接器:

<Connector port="443" SSLEnabled="true" maxThreads="16" 
           protocol="org.apache.coyote.http11.Http11NioProtocol"
           scheme="https" secure="true"clientAuth="want"
           sslProtocol="TLS" keystoreFile="C:\ssl\keystore"
           keystorePass="***" truststoreFile="C:\ssl\keystore"
           truststorePass="***"
           />
<security-constraint>
    <web-resource-collection>
        <web-resource-name>SSO</web-resource-name>
        <url-pattern>/sso/login</url-pattern>
    </web-resource-collection>

    <auth-constraint>
        <role-name>sso</role-name>
    </auth-constraint>

    <user-data-constraint>
        <transport-guarantee>CONFIDENTIAL</transport-guarantee>
    </user-data-constraint>
</security-constraint>

<login-config>
    <auth-method>CLIENT-CERT</auth-method>
</login-config>

<security-role>
    <role-name>sso</role-name>
</security-role>
因此,在
tomcat users.xml
中,我可以使用:

<role rolename="sso"/>
<user username="CN=***, OU=***, C=**" password="null" roles="sso"/>
最后,我使用

"%JAVA_HOME%\bin\keytool" 
  -import 
  -alias customer_root 
  -keystore "C:\ssl\keystore" 
  -trustcacerts 
  -file "C:\ssl\customer_root.crt" 
  -storepass "***"
这是我的迪勒玛。。。当他们进入
https:///sso/login
,尝试了客户端身份验证,但收到HTTP 401错误。所以,我做错了什么

为了让事情变得更困难,客户不能向我提供更多关于其身份验证的信息,而只能提供“HTTP 401”

我已经通过很多很多来源来设置和创建具有授权客户端密钥的自签名CA密钥,我试图通过java客户端使用这些密钥,我编写了java客户端代码,用于连接到站点并发布到
~/sso/login
,但是每次我重新编码/重新打包/重新运行测试时,我也会得到一个HTTP401,而不是至少能够连接一次

因此,要么我设置的Tomcat不正确,要么我没有正确设置客户的CA,但我无法找出哪一个,即使是通过编写自己的客户机代码。我被难住了


上面有什么不正确的地方吗?我是否缺少一个配置?

为任何需要信息的人找到了答案

在配置文件tomcat users.xml中

<role rolename="sso"/>
<user username="CN=***, OU=***, C=**" password="null" roles="sso"/>

密码不应为“null”,而应为“”


为任何需要信息的人找到了答案

在配置文件tomcat users.xml中

<role rolename="sso"/>
<user username="CN=***, OU=***, C=**" password="null" roles="sso"/>

密码不应为“null”,而应为“”


<role rolename="sso"/>
<user username="CN=***, OU=***, C=**" password="" roles="sso"/>