HTTPS实际是SSL over HTTP, 该协议通过SSL在发送方把原始数据进行加密,在接收方解
密,因此,所传送的数据不容易被网络黑客截获和破解。本文介绍HTTPS的三种实现方法

方法一 静态超链接
这是目前网站中使用得较多的方法,也最简单。在要求使用SSL进行传输的Web网页链接
中直接标明使用HTTPS协议,以下是指向需要使用SSL的网页的超链接:
<a href=“https://192.168.100.100/ok/securePage.jsp”>SSL例子</a>
需要说明的是,在网页里的超链接如果使用相对路径的话,其默认启用协议与引用该超
链接的网页或资源的传输协议相同,例如在某超链接“https://192.168.100.100/ok/l
ogin.jps”的网页中包含如下两个超链接:
<a href=“./bessl/exam.jsp”>SSL链接</a>
<a href=“http://192.168.100.100/notssl/index.jsp”>非SSL链接
那么,第一个链接使用与“https://192.168.100.100/ok/login.jsp”相同的传输协议
HTTPS,第二个链接使用本身所标识的协议HTTP。
使用静态超链接的好处是容易实现,不需要额外开发。然而,它却不容易维护管理; 因
为在一个完全使用HTTP协议访问的Web应用里,每个资源都存放在该应用特定根目录下的
各个子目录里,资源的链接路径都使用相对路径,这样做是为了方便应用的迁移并且易
于管理。但假如该应用的某些资源要用到HTTPS协议,引用的链接就必须使用完整的路径
,所以当应用迁移或需要更改URL中所涉及的任何部分如:域名、目录、文件名等,维护
者都需要对每个超链接修改,工作量之大可想而知。再者,如果客户在浏览器地址栏里
手工输入HTTPS协议的资源,那么所有敏感机密数据在传输中就得不到保护,很容易被黑
客截获和篡改!
方法二 资源访问限制
为了保护Web应用中的敏感数据,防止资源的非法访问和保证传输的安全性,Java Serv
let 2.2规范定义了安全约束(Security-Constraint)元件,它用于指定一个或多个We
b资源集的安全约束条件;用户数据约束(User-Data-Constraint)元件是安全约束元件
的子类,它用于指定在客户端和容器之间传输的数据是如何被保护的。用户数据约束元
件还包括了传输保证(Transport-Guarantee)元件,它规定了客户机和服务器之间的通
信必须是以下三种模式之一:None、Integral、Confidential。None表示被指定的Web资
源不需要任何传输保证;Integral表示客户机与服务器之间传送的数据在传送过程中不
会被篡改; Confidential表示数据在传送过程中被加密。大多数情况下,Integral或Co
nfidential是使用SSL实现。
这里以BEA的WebLogic Server 6.1为例介绍其实现方法,WebLogic是一个性能卓越的J2
EE服务器,它可以对所管理的Web资源,包括EJB、JSP、Servlet应用程序设置访问控制
条款。假设某个应用建立在Weblogic Server里的/mywebAPP目录下,其中一部分Servle
ts、JSPs要求使用SSL传输,那么可将它们都放在/mywebAPP/sslsource/目录里,然后编
辑/secureAPP/Web-INF/web.xml文件,通过对web.xml的设置可达到对Web用户实现访问
控制。
当Web用户试图通过HTTP访问/sslsource目录下的资源时,Weblogic Server就会查找we
b.xml里的访问约束定义,返回提示信息:Need SSL connection to access this reso
urce。资源访问限制与静态超链接结合使用,不仅继承了静态超链接方法的简单易用性
,而且有效保护了敏感资源数据。然而,这样就会存在一个问题: 假如Web客户使用HT
TP协议访问需要使用SSL的网络资源时看到弹出的提示信息: Need SSL connection to
access this resource,大部分人可能都不知道应该用HTTPS去访问该网页,造成的后果
是用户会放弃访问该网页,这是Web应用服务提供商不愿意看到的事情。
方法三 链接重定向
综观目前商业网站资源数据的交互访问,要求严格加密传输的数据只占其中一小部分,
也就是说在一个具体Web应用中需要使用SSL的服务程序只占整体的一小部分。那么,我
们可以从应用开发方面考虑解决方法,对需要使用HTTPS协议的那部分JSPs、Servlets或
EJBs进行处理,使程序本身在接收到访问请求时首先判断该请求使用的协议是否符合本
程序的要求,即来访请求是否使用HTTPS协议,如果不是就将其访问协议重定向为HTTPS
,这样就避免了客户使用HTTP协议访问要求使用HTTPS协议的Web资源时,看到错误提示
信息无所适从的情况,这些处理对Web客户来说是透明的。
实现思想是:首先创建一个类,该类方法可以实现自动引导Web客户的访问请求使用HTT
PS协议,每个要求使用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接口中的getS
cheme(),它用于获取访问请求使用的传输协议;HTTPUtils类中的getRequestUrl(),它
用于获取访问请求的URL,要注意的是该方法在Servlet 2.3中已被移到HTTPServletReq
uest接口。
以下是实现协议重定向的基本步骤:
1. 获取访问的请求所使用的协议;
2. 如果请求协议符合被访问的Servlet所要求的协议,就说明已经使用HTTPS协议了,不
需做任何处理;
3. 如果不符合,使用Servlet所要求的协议(HTTPS)重定向到相同的URL。
例如,某Web用户使用HTTP协议访问要求使用HTTPS协议的资源BeSslServlet,敲入“UR
L:http://192.168.100.100/BeSslServlet”,在执行BeSslServlet时首先使用Proces
sSslServlet.processSsl()重定向到https://192.168.100.100/BeSslServlet,然后
BeSslServlet与客户浏览器之间就通过HTTPS协议进行数据传输。
以上介绍的仅是最简单的例子,是为了对这种重定向的方法有个初步的认识。假如想真
正在Web应用中实现,还必须考虑如下几个问题:
● 在Web应用中常常会用到GET或Post方法,访问请求的URL中就会带上一些查询字串,
这些字串是使用getRequesUrl()时获取不到的,而且在重定向之后会丢失,所以必须在
重定向之前将它们加入到新的URL里。我们可以使用request.getQueryString()来获取G
ET的查询字串,对于Post的Request参数,可以把它们转换成查询串再进行处理。
● 某些Web应用请求中会使用对象作为其属性,必须在重定向之前将这些属性保存在该
Session中,以便重定向后使用。
● 大多数浏览器会把对同一个主机的不同端口的访问当作对不同的主机进行访问,分用
不同的Session,为了使重定向后保留使用原来的Session,必须对应用服务器的Cookie
域名进行相应的设置。
以上问题均可在程序设计中解决。
通过程序自身实现协议重定向,就可以把要求严格保护的那部分资源与其他普通数据从
逻辑上分开处理,使得要求使用SSL的资源和不需要使用SSL的资源各取所需,避免浪费
网站的系统资源。
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

(HTTPS)web 项目如何实现https的更多相关文章

  1. Java web项目 本地配置https调试

    一.创建密匙 网上有很多教程,就不在此赘述了. 假设最后生成的密匙为tomcat.keystore 密码为123456. 二.配置tomcat 首先,将密匙移到tomcat下根目录下. 进入conf文 ...

  2. ASP.NET WebAPI数据传输安全HTTPS实战项目演练

    一.课程介绍 HTTPS是互联网 Web 大势所趋,各大网站都已陆续部署了 HTTPS .  全站HTTPS时代,加密用户与网站间的交互访问,在客户端浏览器和Web服务器之间建立安全加密通道,一般情况 ...

  3. 使用Spring Boot开发Web项目(二)之添加HTTPS支持

    上篇博客使用Spring Boot开发Web项目我们简单介绍了使用如何使用Spring Boot创建一个使用了Thymeleaf模板引擎的Web项目,当然这还远远不够.今天我们再来看看如何给我们的We ...

  4. java web项目由http转换成https遇到的各种坑

    java web项目由http转换成https遇到的各种坑 这篇文章写给自己在经历项目由http转换成https遇到的各种坑所做的一份笔记,留给以后自己看,或者和开发的朋友也刚好遇到和我一样的问题的朋 ...

  5. Web项目配置https

    在java安装目录下bin目录下keytool工具 keytool -genkey -storetype PKCS12 -keysize 2048 -alias tomcat -keyalg RSA ...

  6. HTTPS Web配置举例

    http://www.h3c.com.cn/Products___Technology/Technology/Security_Encrypt/Other_technology/Representat ...

  7. Web API应用支持HTTPS的经验总结

    在我前面介绍的WebAPI文章里面,介绍了WebAPI的架构设计方面的内容,其中提出了现在流行的WebAPI优先的路线,这种也是我们开发多应用(APP.微信.微网站.商城.以及Winform等方面的整 ...

  8. 后台web请求代码(含https,json提交)

    后台web请求 namespace XXXX.Utilites { using System; using System.Collections.Generic; using System.IO; u ...

  9. https web service in Tibco & PC

    Error: 1.Certificate signature validation failed , Signature does not matchuse wrong public certific ...

随机推荐

  1. js正则表达式匹配字符串与优化过程

    前言 有时候需要实现对js源文件中的url字符串做拦截预处理,或者前端js语法高亮,或者需要对动态加载的关键源码做混淆保护,在某些步骤实现之前,有一个步骤是需要提炼出所有的合法字符串. 目标:检测源文 ...

  2. Android 接入 OpenCV库的三种方式

           OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux.Windows.Android和Mac OS操作系统上.它轻量级而且高效——由一系列 C 函数和少 ...

  3. ajax第三步

    ajaxSend()函数用于设置当AJAX请求即将被发送时执行的回调函数. 这是一个全局AJAX事件函数,用于为任何AJAX请求的ajaxSend事件绑定事件处理函数.当AJAX请求即将被发送时,将触 ...

  4. 处理json数据的空数据为任意字符

    处理json数据的空数据为任意字符 有时候从后台返回来的数据需要处理一下,根据实际开发需求,不能在页面上直接显示空字符,需要显示为"无内容"或者其他字段,而有些json数据结构比较 ...

  5. Java转型(向上转型和向下转型)

    在Java编程中经常碰到类型转换,对象类型转换主要包括向上转型和向下转型. 5.13.1 向上转型 我们在现实中常常这样说:这个人会唱歌.在这里,我们并不关心这个人是黑人还是白人,是成人还是小孩,也就 ...

  6. android中全局异常捕捉

    android中全局异常捕捉 只要写代码就会有bug,但是我们要想办法收集到客户的bug.有第三方bugly或者友盟等可以收集.但是,android原生就提供了有关收集异常的api,所以我们来学习一下 ...

  7. C++模板--实现容器适配器

    STL源码初接触 STL = Standard Template Library,直译过来是:标准模板库,是惠普实验室开发的一系列软件的统称.从根本上说,STL是一些"容器"的集合 ...

  8. (一)一起学 Java Collections Framework 源码之 概述

    . . . . . 目录 (一)一起学 Java Collections Framework 源码之 概述 JDK 中很多类 LZ 已经使用了无数次,但认认真真从源码级研究过其原理的还只占少数,虽然从 ...

  9. 解决CentOS虚拟机克隆后无法上网(网卡信息不一致)的问题

    一.问题描述 虚拟机克隆后,由于网卡信息不一致的问题,导致不能上网或者执行"sercice network restart"命令失败 [root@lyy 桌面]# ifconfig ...

  10. 容器 What, Why, How - 每天5分钟玩转容器技术(6)

    学习任何东西都可以按照3W的框架进行,容器技术也是一样,先回答 What.Why 和 How 这三个问题. What - 什么是容器? 容器是一种轻量级.可移植.自包含的软件打包技术,使应用程序可以在 ...