HTTPS应用摘要
来源:互联网 发布:pos及数据拦截器 编辑:程序博客网 时间:2024/06/11 04:12
http://blog.csdn.net/webwalker/article/details/5658155
在众多大型网站中HTTPS的应用越来越多,尤其是对安全有严格要求的网站,近乎普及。虽说应用HTTPS之后,站点性能稍有影响,但综合评估下来并无大碍、近可忽略,以下本文通过摘要方式汇总HTTPS在项目中的实践应用(服务端、Windows + IIS)。
HTTPS:HypertextTransfer Protocol over Secure Socket Layer,以安全为目标的HTTP通道,安全基础在于SSL,用以安全的HTTP数据传输。有关详细介绍以及HTTP的区别等不再赘述。实现HTTPS的应用大致分为以下几个步骤:
1、 申请购买HTTPS安全证书
当然你也可以自己搭建CA服务器,然后将证书发布给自己,如需客户端证书验证,则需要做一个发放证书的程序。当然市场上也有些免费的CA证书,但还是建议购买CA证书,毕竟是钱买来的嘛,经得起考验,即便出问题也有利。
2、搭建HTTPS服务环境
(1)在服务器端,通过以下图示,安装完成CA证书
服务器证书
浏览证书完成安装
(2)然后在网站属性中, SSL设置为443,开启SSL服务支持
3、HTTPS站点测试
以上步骤完成后,即可进入HTTPS测试阶段。https://...
一般来说,如果HTTPS站点内含有内嵌页面,则要求内嵌页面与HTTPS页面满足以下情形:
(1) URL协议一致
(2) URL端口一致
(3) 根域名一致
反之存在非安全、跨域问题。当然此类问题,也可以通过在内嵌页面增加HTTPS自身的代理页面来完成跨域控制。
一般在开发测试阶段,没有正式购买的正式,我们可以自己生成证书来完成测试。请参阅其他资料创建测试证书。
4、 相关问题
运行后的HTTPS站点一般会有以下问题:安全警告、证书问题,证书类问题比较好办,主要体现在证书名称、证书状态上。但安全警告问题一般为HTTPS运行后主要解决问题。以下针对不同问题给出处理方案。
(1) 引用外站资源(JS、CSS、IMAGE、SWF……)提示非安全连接
资源的引用路径不能为空,如果为外站资源,则需要外站资源同样支持HTTPS,如有必要可以将外站资源拿回本地引用。
(2) 内嵌IFRAME
对页面初始时没有SRC的IFRAME,可以通过“src="images/blank.gif”的方式来解决。
src=""
src="#"
src="about:blank"
src="javascript:void"
src="javascript:false"均不可以完全兼容
(3) 页面跳转
在系统交互过程中,也需确保转向的目标URL为HTTPS。
(4) 对于HTTP://...,去掉HTTP的方法,个人尝试后并未完全兼容安全警告问题。
Eg:
去掉后在服务器上才可以,本机起webserver也行
'codebase','//download.macromedia.com/...'
'pluginspage','//www.macromedia.com/go/getflashplayer',
codebase="//download...."
pluginspage=":// www...."
5、 其他应用
(1) 如果在应用程序判断当前请求是否为HTTPS,则直接通过URL来判断是不准确的,这时需要在NetScaler中增加标识用以APP判断。
- /// <summary>
- /// 是否HTTPS访问
- /// </summary>
- public static bool IsHTTPs
- {
- get
- {
- string url = HttpContext.Current.Request.Url.ToString().ToLower();
- bool result = url.StartsWith("https://");
- string useSSL = PayConfig.GetString("UseSSL");
- if (!string.IsNullOrEmpty(useSSL) && useSSL == "0")
- {
- return result;
- }
- else
- {
- NameValueCollection nvc = HttpContext.Current.Request.Headers;
- string ssl = string.Empty;
- for (int i = 0; i < nvc.Keys.Count; i++)
- {
- if (string.Compare(nvc.Keys[i], "ssl", true) == 0)
- {
- ssl = nvc[nvc.Keys[i]].Trim();
- }
- }
- //WebLog.WriteAction("ssl == 1", (ssl == "1").ToString());
- return ssl == "1" ? true : result;
- }
- }
- }
- /// <summary>
- /// 获取HTTPS地址
- /// </summary>
- /// <param name="url"></param>
- /// <returns></returns>
- public static string GetHttpsUrl(string url)
- {
- if (IsHTTPs)
- {
- url = Regex.Replace(url, @"http://", Consts.UrlParameter.HTTPS, RegexOptions.IgnoreCase);
- }
- return url;
- }
(2) 如需对整个站点做HTTPS强制切换,则可以:
对部分无法强制转向的页面,可以FILTER方式搞定。
- /// <summary>
- /// 非HTTPS访问强制转向到HTTPS
- /// </summary>
- void HttpsRedirect()
- {
- string absolutePath = GlobalItem.AbsolutePath.ToLower();
- string url = HttpContext.Current.Request.Url.ToString();
- if (GlobalItem.IsHTTPs == false
- && GlobalItem.IsHttpsUrl == false
- && (absolutePath.IndexOf(".") < 0 || absolutePath.Contains(".aspx"))) //过滤.asmx、.ashx、.axd等,//根目录等,不含文件名
- {
- //获取不需要HTTPS跳转的页面配置, 不在列表内则跳转
- string httpsPages = "," + Configs.HttpsPages.ToLower() + ",";
- if (httpsPages.IndexOf("," + absolutePath + ",") < 0)
- {
- url = Regex.Replace(url, @"http://", "https", RegexOptions.IgnoreCase);
- HttpContext.Current.Response.Redirect(url);
- HttpContext.Current.Response.End();
- }
- }
- }
- HTTPS应用摘要
- HTTPS应用摘要
- Web应用安全漏洞摘要
- Tomcat集群apache摘要认证https加密
- WEB应用服务器选型摘要
- apache tomcat https应用
- apache tomcat https应用
- apache tomcat https应用
- apacha tomcat https应用
- httpclient 访问https应用
- tomcat Https应用
- https协议应用
- tomcat应用配置https
- Android应用使用https
- HTTPS原理与应用
- Java安全(加密、摘要、签名、证书、SSL、HTTPS)
- Java安全(加密、摘要、签名、证书、SSL、HTTPS)
- Java安全(加密、摘要、签名、证书、SSL、HTTPS)
- T-SQL系列之性能统计信息/数据库IO(MSSQL)
- 浅谈 qmake 之 pro、pri、prf、prl文件 (转)
- Django使用request和response对象
- cocos2d-x-3.2图片灰化效果
- java中的内部类与匿名类的基本使用方法
- HTTPS应用摘要
- MAC安装Ruby Rails brew gem
- Android的Looper,Handler以及线程间的通信
- socket单向通信 服务器
- Android的Looper类
- 【cocos2d-x官方文档】Text Labels
- 欺骗世界的其实是媒体
- socket单向通信 客户端
- 当你真正感觉到痛,你才知道痛是什么——ACM退役贴