如何测试URL是否受SSL保护

时间:2014-10-18 07:59:32

标签: java maven tomcat ssl web-applications

我是IT行业的新手。测试场景就像我需要测试我的应用程序的登录页面是否受SSL保护?

一般情况下,我们曾经访问某些网站,其中显示了SSL安全性的弹出窗口。所以我需要在我的应用程序中测试相同的场景。

我有一个小型网络应用程序,我有login.html页面。基本上,我能够使用Maven启动我的Web应用程序,使用的服务器是Tomcat。我使用mvn tomcat7:run启动的命令是http://localhost:8080/login.html和使用http的网址。它运作得很好。

但是我想将我的网址从https更改为https://localhost:8080/login.html,当我访问我的网址时,即<!DOCTYPE html> <html> <head> </head> <body> <h1>Login App</h1> <div id="emptyDiv"></div> <div id="description"></div> <!--container start--> <div id="container"> <div id="container_body" style="background-color:#BBD700;float:center;"> <!--Form start--> <div id="form_name"> <div class="firstnameorlastname"> <form > &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <div id="errorBox"></div> First Name : <input id="firstName" type="text" name="Name" value="" > &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Last name : <input id="lastName" type="text" name="LastName" value="" > </div> &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <div id="email_form"> Email Id: <input style="position:right" type="text" name="Email" value="" > </div> <input id="sub_form" type="submit" value="Submit"> </form> </div> <!--form ends--> </div> </div> <!--container ends--> </body> </html> ,那么它应该弹出SSL安全警报,我应该接受它。

如果我的问题仍然不明确,请随时发表评论。

在网上搜索后,我做了一些解决方法,但它没有成功。我尝试过:

我的HTML页面

<pre><code><!DOCTYPE web-app PUBLIC <span style="color: red;">"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"</span> <span style="color: red;">"http://java.sun.com/dtd/web-app_2_3.dtd"</span>>
<web-app>
           <!--   <security-constraint>
             <web-resource-collection>
                 <web-resource-name>MyEducationApp</web-resource-name>
                 <url-pattern>/login.html</url-pattern>
              </web-resource-collection>
              <user-data-constraint>
                 <transport-guarantee>CONFIDENTIAL</transport-guarantee>
              </user-data-constraint>
             </security-constraint>

               <security-constraint>
                  <web-resource-collection>
                     <web-resource-name>Non-SecureResource</web-resource-name>
                     <url-pattern>/login.html</url-pattern>
                  </web-resource-collection>
                  <user-data-constraint>
                     <transport-guarantee>NONE</transport-guarantee>
                  </user-data-constraint>
               </security-constraint> -->

  <display-name>Login WebApp</display-name>
</web-app>
</span></code></pre>

的web.xml

    <!-- Maven Tomcat Plugin -->
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <url>https://localhost:8080/manager/text</url>
                    <server>localhost</server>
                    <path>/</path>
                    <username>admin</username>
                    <password>aRfalah</password>

                </configuration>
                <executions>
                    <execution>
                        <id>tomcat7-run</id>
                        <goals>
                            <goal>run-war-only</goal>
                        </goals>
                        <phase>pre-integration-test</phase>
                        <configuration>
                            <fork>true</fork>

                        </configuration>
                    </execution>

                    <execution>
                        <id>tomcat7-shutdown</id>
                        <goals>
                            <goal>shutdown</goal>
                        </goals>
                        <phase>post-integration-test</phase>
                    </execution>
                </executions>
            </plugin>

使用Maven插件

{{1}}

5 个答案:

答案 0 :(得分:5)

您的网站的SSL / TLS加密在您的网络应用程序中无能为力。它是通过您的Web服务器配置完成的。

请参阅Apache Tomcat 7, SSL Configuration HOW-TO


补充信息(从我对OQ的评论重复,因为评论不那么突出):

您无需从certification authorities(CA)之一购买证书即可获得证书。

  1. StartSSL免费提供1年SSL / TLS + S / MIME。 On a different domain他们现在提供:
      
        
    • 免费提供2年免费扩展验证SSL证书 - 最多99个域
    •   
    • 免费提供无限期2年组织验证SSL证书 - 多域名和通配符
    •   
    • 免费提供无限期2年组织客户证书
    •   
  2. 您可以使用OpenSSL(因此是您自己的CA)轻松创建自己的证书,并将此证书与您的https://网站相关联。如果访问者在其浏览器中弹出的对话框中接受您的证书,则会将其存储在浏览器的证书存储区中,并且在达到证书的到期日期之前,该对话框不会再次出现。

答案 1 :(得分:4)

这是你需要做的:

  1. 生成自签名证书并在Tomcat中安装(Gerold Broser的帖子有链接)
  2. 默认情况下,在Tomcat中禁用SSL端口,启用它(与bove相同的链接)
  3. 将您的网址更改为https://local_host:8443/login.html(Tomcat的默认SSL端口)
  4. 通过浏览器发出请求,您应该看到一个页面/消息,具体取决于浏览器,告诉您证书不正常
  5. 如果您希望仅通过SSL访问此页面,请查看Tim Funk的帖子并编辑应用程序的web.xml

答案 2 :(得分:3)

通常的做法是通过request.isSecure()检查请求是否通过https进入。如果没有,则将重定向发送到浏览器到相同的URL,但前缀为https协议。

这是一个用于执行此操作的示例servlet过滤器:

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class SecurityFilter implements Filter {

  @Override
  public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
    throws IOException, ServletException {
    HttpServletResponse servletResponse = (HttpServletResponse) response;
    if (!request.isSecure()) {
      HttpServletRequest servletRequest = (HttpServletRequest) request;
      String target = "https://" + request.getLocalName() + servletRequest.getRequestURI();
      servletResponse.sendRedirect(target);
      return;
    }
    // tell the browser to use only https for accessing this domain for the next 30 days
    servletResponse.addHeader("Strict-Transport-Security", "max-age=" + (30 * 24 * 60 * 60));
    chain.doFilter(request, response);
  }

  @Override
  public void init(FilterConfig filterConfig) throws ServletException {
    // not needed
  }

  @Override
  public void destroy() {
    // not needed
  }

}

要全局启用过滤器,请将以下内容添加到web.xml:

<filter>
      <filter-name>securityFilter</filter-name>
      <filter-class>SecurityFilter</filter-class>
</filter>
<filter-mapping>
      <filter-name>securityFilter</filter-name>
      <url-pattern>/*</url-pattern>
</filter-mapping>

servletResponse.addHeader("Strict-Transport-Security", ...行是可选的。如果您将其放入代码中,您的浏览器将永远不会尝试在接下来的30天内再次连接到http,但会使用https本身。如果您的浏览器支持HSTS standard RFC6797,则会发生这种情况。如果您的应用程序只能通过https访问,这是有道理的。但是,我认为只有使用标准的https端口443才能实现。参见下一步。

您当前的tomcat配置中存在一个小小的缺陷。无法在同一端口上运行http和https。您需要有两个单独的连接器,一个用于http,另一个用于https。

为了实现这一点,请添加到maven tomcat插件配置:

<!-- Maven Tomcat Plugin -->
<plugin>
   <groupId>org.apache.tomcat.maven</groupId>
   <artifactId>tomcat7-maven-plugin</artifactId>
   <version>2.2</version>
   <configuration>
      <httpsPort>8443</httpsPort>
 . . .

您还需要在SecurityFilter代码中为重定向目标添加正确的协议(或使其成为参数):

      String target = "https://" + request.getLocalName() + ":8443" + servletRequest.getRequestURI();

端口8080和8443仅用于实验性本地Web服务器,实际应用程序应位于端口80和443上。

就是这样。玩得开心,祝你好运!

答案 3 :(得分:2)

要求HTTPS并让您的servlet引擎自动重定向到https,您就可以使用transport-guarantee

所以你可能想要

<security-constraint>
    <web-resource-collection>
        <web-resource-name>Protected Context</web-resource-name>
        <url-pattern>/login.html</url-pattern>
    </web-resource-collection>
    <user-data-constraint>
        <transport-guarantee>CONFIDENTIAL</transport-guarantee>
    </user-data-constraint>
 </security-constraint>

以上内容只会将您的webapp的/login.html重定向到https。根据需要添加更多url-pattern。

更多细节: http://wiki.apache.org/tomcat/FAQ/Security#Q4http://marc.info/?l=tomcat-user&m=104951559722619&w=2

答案 4 :(得分:2)

从上面的原始问题:

  

使用开始的命令mvn tomcat7:run和URL使用   http://localhost:8080/login.html。它完美地运作。但是我要   将我的网址从http更改为https,当我访问我的网址时,即   https://localhost:8080/login.html

您确定'http://localhost:8080''https://localhost:8080'吗?

这基本上意味着您从同一端口请求SSL和非SSL流量。通常,Tomcat从8080执行HTTP,从8443执行HTTPS。

此处的大多数答案都适合您,但首先请务必查看您是否在server.xml中启用了SSL连接器。