`
dananhai
  • 浏览: 91539 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
阅读更多
   HTTPS实际是SSL over HTTP, 该协议通过SSL在发送方把原始数据进行加密,在接收方解密,因此,所传送的数据不容易被网络黑客截获和破解。本文介绍HTTPS的三种实现方法。 

    方法一 静态超链接 


    这是目前网站中使用得较多的方法,也最简单。在要求使用SSL进行传输的Web网页链接中直接标明使用HTTPS协议,以下是指向需要使用SSL的网页的超链接: 


SSL例子 


需要说明的是,在网页里的超链接如果使用相对路径的话,其默认启用协议与引用该超链接的网页或资源的传输协议相同,例如在某超链接“HTTPS://192.168.100.100/ok/login.jps”的网页中包含如下两个超链接: 


SSL链接 


非SSL链接 


    那么,第一个链接使用与“HTTPS://192.168.100.100/ok/login.jsp”相同的传输协议HTTPS,第二个链接使用本身所标识的协议HTTP。 


    使用静态超链接的好处是容易实现,不需要额外开发。然而,它却不容易维护管理; 因为在一个完全使用HTTP协议访问的Web应用里,每个资源都存放在该应用特定根目录下的各个子目录里,资源的链接路径都使用相对路径,这样做是为了方便应用的迁移并且易于管理。但假如该应用的某些资源要用到HTTPS协议,引用的链接就必须使用完整的路径,所以当应用迁移或需要更改URL中所涉及的任何部分如:域名、目录、文件名等,维护者都需要对每个超链接修改,工作量之大可想而知。再者,如果客户在浏览器地址栏里手工输入HTTPS协议的资源,那么所有敏感机密数据在传输中就得不到保护,很容易被黑客截获和篡改! 


    方法二 资源访问限制 


    为了保护Web应用中的敏感数据,防止资源的非法访问和保证传输的安全性,Java Servlet 2.2规范定义了安全约束(Security-Constraint)元件,它用于指定一个或多个Web资源集的安全约束条件;用户数据约束(User-Data-Constraint)元件是安全约束元件的子类,它用于指定在客户端和容器之间传输的数据是如何被保护的。用户数据约束元件还包括了传输保证(Transport-Guarantee)元件,它规定了客户机和服务器之间的通信必须是以下三种模式之一:None、Integral、Confidential。None表示被指定的Web资源不需要任何传输保证;Integral表示客户机与服务器之间传送的数据在传送过程中不会被篡改; Confidential表示数据在传送过程中被加密。大多数情况下,Integral或Confidential是使用SSL实现。 


    这里以BEA的WebLogic Server 6.1为例介绍其实现方法,WebLogic是一个性能卓越的J2EE服务器,它可以对所管理的Web资源,包括EJB、JSP、Servlet应用程序设置访问控制条款。假设某个应用建立在Weblogic Server里的/mywebAPP目录下,其中一部分Servlets、JSPs要求使用SSL传输,那么可将它们都放在/mywebAPP/sslsource/目录里,然后编辑/secureAPP/Web-INF/web.xml文件,通过对web.xml的设置可达到对Web用户实现访问控制。 


    当Web用户试图通过HTTP访问/sslsource目录下的资源时,Weblogic Server就会查找web.xml里的访问约束定义,返回提示信息:Need SSL connection to access this resource。资源访问限制与静态超链接结合使用,不仅继承了静态超链接方法的简单易用性,而且有效保护了敏感资源数据。然而,这样就会存在一个问题: 假如Web客户使用HTTP协议访问需要使用SSL的网络资源时看到弹出的提示信息: Need SSL connection to access this resource,大部分人可能都不知道应该用HTTPS去访问该网页,造成的后果是用户会放弃访问该网页,这是Web应用服务提供商不愿意看到的事情。 


    方法三 链接重定向 


    综观目前商业网站资源数据的交互访问,要求严格加密传输的数据只占其中一小部分,也就是说在一个具体Web应用中需要使用SSL的服务程序只占整体的一小部分。那么,我们可以从应用开发方面考虑解决方法,对需要使用HTTPS协议的那部分JSPs、Servlets或EJBs进行处理,使程序本身在接收到访问请求时首先判断该请求使用的协议是否符合本程序的要求,即来访请求是否使用HTTPS协议,如果不是就将其访问协议重定向为HTTPS,这样就避免了客户使用HTTP协议访问要求使用HTTPS协议的Web资源时,看到错误提示信息无所适从的情况,这些处理对Web客户来说是透明的。 


    实现思想是:首先创建一个类,该类方法可以实现自动引导Web客户的访问请求使用HTTPS协议,每个要求使用SSL进行传输的Servlets或JSPs在程序开始时调用它进行协议重定向,最后才进行数据应用处理。 


    J2EE提供了两种链接重定向机制。第一种机制是RequestDispatcher接口里的forward()方法。使用MVC(Model-View-Controller)机制的Web应用通常都使用这个方法从Servlet转移请求到JSP。但这种转向只能是同种协议间的转向,并不能重定向到不同的协议。第二种机制是使用HTTPServletReponse接口里的sendRedirect()方法,它能使用任何协议重定向到任何URL,例如: 


BeSslResponse.sendRedirect(“HTTPS://192.168.100.100/order”); 


    此外,我们还需使用到Java Servlet API中的两个方法:ServletRequest接口中的getScheme(),它用于获取访问请求使用的传输协议;HTTPUtils类中的getRequestUrl(),它用于获取访问请求的URL,要注意的是该方法在Servlet 2.3中已被移到HTTPServletRequest接口。 


    以下是实现协议重定向的基本步骤: 


    1. 获取访问的请求所使用的协议; 


    2. 如果请求协议符合被访问的Servlet所要求的协议,就说明已经使用HTTPS协议了,不需做任何处理; 


    3. 如果不符合,使用Servlet所要求的协议(HTTPS)重定向到相同的URL。 


    例如,某Web用户使用HTTP协议访问要求使用HTTPS协议的资源BeSslServlet,敲入“URL:HTTP://192.168.100.100/BeSslServlet”,在执行BeSslServlet时首先使用ProcessSslServlet.processSsl()重定向到HTTPS://192.168.100.100/BeSslServlet,然后 BeSslServlet与客户浏览器之间就通过HTTPS协议进行数据传输。 


    以上介绍的仅是最简单的例子,是为了对这种重定向的方法有个初步的认识。假如想真正在Web应用中实现,还必须考虑如下几个问题: 


    ● 在Web应用中常常会用到GET或Post方法,访问请求的URL中就会带上一些查询字串,这些字串是使用getRequesUrl()时获取不到的,而且在重定向之后会丢失,所以必须在重定向之前将它们加入到新的URL里。我们可以使用request.getQueryString()来获取GET的查询字串,对于Post的Request参数,可以把它们转换成查询串再进行处理。 


    ● 某些Web应用请求中会使用对象作为其属性,必须在重定向之前将这些属性保存在该Session中,以便重定向后使用。 


    ● 大多数浏览器会把对同一个主机的不同端口的访问当作对不同的主机进行访问,分用不同的Session,为了使重定向后保留使用原来的Session,必须对应用服务器的Cookie 域名进行相应的设置。 


    以上问题均可在程序设计中解决。 


    通过程序自身实现协议重定向,就可以把要求严格保护的那部分资源与其他普通数据从逻辑上分开处理,使得要求使用SSL的资源和不需要使用SSL的资源各取所需,避免浪费网站的系统资源。


读后感:
   如果我要在程序中对密码和用户名的传输进行加密,则应该使用第一种方法,处理完成后再使用sendRedirect()转换到http连接。就算在浏览器中直接输入http://同样的网址,但不可能获得request的相关变量,应该不会有什么危害。
    如果是要与servlet建立连接后,再传输敏感数据,则应使用第三种方法。
    第二种方法比较简单,程序不需要什么修改,应该测试一下是否会出现提示窗口。
    可以考虑是否与spring和struts的结合
分享到:
评论
1 楼 bevis.cn 2010-01-19  
我有遇到问题,我用response.sendRedirect(“HTTPS://192.168.100.100/order”);这种方式会有提示。能不能给个提示 

相关推荐

    MySQL 使用 SSL 连接配置详解

    MySQL 使用SSL连接配置详解 在现代数据库管理中,安全性是至关重要的,SSL(Secure Sockets Layer)连接为MySQL提供了一种加密数据传输的方式,确保了客户端和服务器之间的通信不被窃听或篡改。本文将详细介绍如何...

    在Rails中使用SSL

    标题“在Rails中使用SSL”涉及的是如何在Ruby on Rails框架下配置并使用安全套接层(SSL)来实现网站的加密通信。Rails是用Ruby编程语言开发的一个流行的Web应用程序框架,它支持HTTPS协议,通过SSL/TLS证书来提供...

    WebServer使用SSL验证

    WebServer 使用 SSL 验证的实现与配置 在本文中,我们将讨论如何使用 Java 自带的 keytool 工具为 Web 服务实现 HTTPS 验证。 HTTPS 验证是保障 Web 服务安全的一种重要手段,通过使用数字证书来验证服务器的身份和...

    ApacheFtpServer之ssl配置

    - `false`: 显式安全模式,客户端可以选择是否使用SSL加密。 - `true`: 隐式安全模式,客户端必须使用SSL加密。 ##### 3. 测试配置 完成上述配置后,需要重启Apache FtpServer服务,并使用客户端软件(如...

    ActiveMQ使用SSL加密文件Demo

    **ActiveMQ 使用 SSL 加密文件 Demo** ActiveMQ 是一个开源的消息代理服务器,它遵循 Java Message Service(JMS)规范,提供了可靠的消息传递功能。在实际的生产环境中,为了确保消息传输的安全性,我们通常会使用...

    activemq ssl双向认证连接

    4. **连接ActiveMQ**:使用ActiveMQ的Java API或客户端库(如MQTT-Demo中的MQTT协议)建立SSL连接时,你需要指定使用SSL协议并提供必要的认证信息。例如,使用Paho MQTT Java客户端库,你可以这样设置连接参数: ```...

    Nginx使用SSL模块配置https支持.rar_nginx_ssl

    HTTPS通过使用SSL(Secure Socket Layer)或其更新版本TLS(Transport Layer Security)来加密数据传输,保护用户隐私和网站数据的安全性。Nginx作为一款高性能的HTTP和反向代理服务器,支持SSL/TLS协议,可以轻松地...

    ssl证书生成工具(sha256算法)

    远程服务使用SSL证书链,该证书链已使用加密弱哈希算法(例如MD2、MD4、MD5或SHA1)签名。这些签名算法很容易受到碰撞攻击。攻击者可以利用这一点生成另一个具有相同数字签名的证书,从而允许攻击者伪装成受影响的服务...

    解决QT5.12.6使用32位MinGW编译器无法使用SSL协议问题.zip

    然而,有时开发者会遇到在32位环境中使用MinGW编译器时,QT应用程序无法使用SSL(Secure Socket Layer)或其更新的版本TLS(Transport Layer Security)协议,导致无法正常访问HTTPS链接。这个问题通常源于缺少必要...

    使用ssl的tcp_ip连接oracle数据库

    使用ssl的tcp_ip连接oracle数据库

    Tomcat下使用ssl实现双向认证[网络安全]

    Tomcat作为一款广泛应用的开源Java Servlet容器,它支持SSL(Secure Sockets Layer)协议,用于实现数据传输的安全性。本篇文章将深入探讨如何在Tomcat环境下配置SSL,实现双向认证,确保服务器与客户端之间的通信...

    网络服务器配置与管理课件项目10使用SSLTLS安全连接网站.pptx

    本课件主要围绕网络服务器配置与管理,重点讲解如何使用SSL/TLS建立安全连接网站。 首先,SSL/TLS服务的核心目标是确保在网络传输中,数据的保密性、完整性以及双方的身份认证。在传输层,SSL/TLS协议位于应用层和...

    mqtt_ssl_aws_of3mg_Cmqtt_mqttsslaws_MQTTC_ssl+MQTT_

    7. **文件名称“mqtt_ssl_aws”**:这可能是一个包含源代码、配置文件或示例程序的压缩包,用于演示如何在C语言环境中使用SSL/TLS连接到AWS MQTT服务。 通过以上步骤,开发者能够使用Cmqtt库构建一个安全的、基于...

    如何通过代理和使用 SSL 配置 JIRA 系统

    如何通过代理和使用 SSL 配置 JIRA 系统 ossez.com

    TMQTTClient-delphi.rar_MQTT delphi_TMQTTClient-delphi_delphi ssl

    Delphi SSL指的是在Delphi程序中使用SSL协议进行安全的数据传输。 描述中提到"delphi mqtt通讯。没有用到第三方的控件。可以在delphi7编译通过。"意味着这个库是原生的Delphi代码实现,不依赖任何外部组件,且兼容...

    ssl证书生成工具解决弱哈希算法签名的SSL证书(CVE-2004-2761)

    远程服务使用SSL证书链,该证书链已使用加密弱哈希算法(例如MD2、MD4、MD5或SHA1)签名。这些签名算法很容易受到碰撞攻击。攻击者可以利用这一点生成另一个具有相同数字签名的证书,从而允许攻击者伪装成受影响的服务...

    解决QT5.12.6编译X64和X86程序无法使用SSL协议问题.zip

    解决QT5.12.6编译X64和X86程序无法使用SSL协议问题.zip

Global site tag (gtag.js) - Google Analytics