Servlet安全传输保证“CONFIDENTIAL”在重定向后不显示请求的页面

时间:2014-01-16 13:08:20

标签: tomcat servlets web.xml

我只是在试用Servlet安全机制。我在我的web.xml中使用了<transport-guarantee>CONFIDENTIAL</transport-guarantee>并使用了“BASIC”身份验证。访问约束资源时,重定向后不显示页面。以下是我的代码片段

Tomcat的users.xml中

<role rolename="Admin"/>
<role rolename="Member"/>
<role rolename="Guest"/>
<user username="Annie" password="admin" roles="Admin, Member, Guest"/>
<user username="Diane" password="coder" roles="Member, Guest"/>
<user username="Ted" password="newbie" roles="Guest"/>

的web.xml

<web-app version="3.0">
  <display-name>SecurityApp</display-name>
    <servlet>
    <servlet-name>BeerAppServlet</servlet-name>
    <servlet-class>com.examples.servlets.BeerAppServlet</servlet-class>
   </servlet>
  <servlet-mapping>
    <servlet-name>BeerAppServlet</servlet-name>
    <url-pattern>/Beer/AddRecipe</url-pattern>
  </servlet-mapping>

    <security-role>
    <role-name>Admin</role-name>
  </security-role>
  <security-role>
    <role-name>Member</role-name>
  </security-role>
  <security-role>
    <role-name>Guest</role-name>
  </security-role>

  <security-constraint>
      <web-resource-collection>
      <web-resource-name>Update</web-resource-name>
      <url-pattern>/Beer/AddRecipe/*</url-pattern>
      <http-method>GET</http-method>
    </web-resource-collection>

    <auth-constraint>
      <role-name>Admin</role-name>
      <role-name>Member</role-name>
    </auth-constraint>

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

  <login-config>
    <auth-method>BASIC</auth-method>
  </login-config>

</web-app> 

我的Servlet类如下

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        PrintWriter writer = response.getWriter();

        writer.println("<h3> Welcome to Beer Application Site</h3>");

    }

当我按如下方式访问我的应用程序时

http://localhost:8083/SecurityApp/Beer/AddRecipe

完成重定向,上面提到的网址变为

https://localhost:8553/SecurityApp/Beer/AddRecipe 

并且不显示任何页面,而是浏览器显示如下

连接已重置 页面加载时重置了与服务器的连接。 该网站可能暂时不可用或太忙。片刻之后再试一次。 如果您无法加载任何页面,请检查计算机的网络连接。 如果您的计算机或网络受防火墙或代理保护,请确保允许Firefox访问Web。

我希望该页面应与欢迎使用啤酒应用程序站点一起显示。 我正在使用tomcat apache-tomcat-7.0.47 我在server.xml中的重定向端口是

<Connector connectionTimeout="20000" port="8083" protocol="HTTP/1.1" redirectPort="8553"/>

任何人都可以告诉我这里有什么问题,或者我是否缺少任何需要完成的配置。

1 个答案:

答案 0 :(得分:1)

在浏览Tomcat文档后,我发现需要在tomcat的server.xml中启用SSL

根据首先启用SSL配置的文档,我们需要生成.keystore文件。

这些是tomcat文档中提供的步骤

要在Tomcat上安装和配置SSL支持,您需要遵循以下简单步骤。

通过执行以下命令,创建一个密钥库文件来存储服务器的私钥和自签名证书:

视窗:

%JAVA_HOME%\bin\keytool -genkey -alias tomcat -keyalg RSA

由于我有一个Windows系统,以下是我为生成.keystore文件所做的步骤

C:\Program Files\Java\jdk1.7.0_45\bin>keytool -genkey -alias tomcat -keyalg RSA
Enter keystore password:
Re-enter new password:
What is your first and last name?
  [Unknown]:  AvinashReddy
What is the name of your organizational unit?
  [Unknown]:  Organization Name
What is the name of your organization?
  [Unknown]:  Organization Name
What is the name of your City or Locality?
  [Unknown]:  Hyderabad
What is the name of your State or Province?
  [Unknown]:  AndhraPradesh
What is the two-letter country code for this unit?
  [Unknown]:  AP
Is CN=AvinashReddy, OU=Organization Name, O=Organization Name, L=Hyderabad, ST=AndhraPradesh, C=AP correct?
  [no]: yes

  Enter key password for <tomcat>
        (RETURN if same as keystore password):

根据文档,我使用了密码“changeit”(全部小写),在最后一步中我只按了“Enter”键,所以当使用与以下问题“输入密钥库密码时键入的密码相同的密码时“在生成.keytstore文件的时候被问到了

我已经更改了tomcat中的server.xml,如下所示

<Connector connectionTimeout="20000" port="8083" protocol="HTTP/1.1" redirectPort="8553"/

  <Connector port="8553" protocol="HTTP/1.1" SSLEnabled="true"
               maxThreads="150" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS"
               keystoreFile="${user.home}/.keystore" keystorePass="changeit" />

<Connector port="8010" protocol="AJP/1.3" redirectPort="8553"/>

tomcat中重定向的默认端口是8443,因为我的系统上运行了2个tomcat实例,我将重定向端口从8443更改为8553。

更改后,我重新启动了我的tomcat,可以访问受约束的资源。

我输入了

http://localhost:8083/SecurityApp/Beer/AddRecipe

然后将其重定向到

https://localhost:8553/SecurityApp/Beer/AddRecipe

由于我使用了“BASIC”身份验证机制,因此系统提示我输入用户名和密码。提供凭证后,我能够看到我的页面如下

“欢迎来到啤酒应用网站”

以下是配置tomcat提供的SSL的链接

http://tomcat.apache.org/tomcat-7.0-doc/ssl-howto.html#Configuration