当前位置: 首页>后端>正文

restful api 摘要认证 https摘要

 

在众多大型网站中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证书

服务器证书

restful api 摘要认证 https摘要,restful api 摘要认证 https摘要_HTTP,第1张

restful api 摘要认证 https摘要,restful api 摘要认证 https摘要_HTTPS_02,第2张

浏览证书完成安装

 

restful api 摘要认证 https摘要,restful api 摘要认证 https摘要_HTTP_03,第3张

        (2)然后在网站属性中, SSL设置为443,开启SSL服务支持

restful api 摘要认证 https摘要,restful api 摘要认证 https摘要_HTTP_04,第4张

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判断。


[csharp]  view plain copy print ?


1. /// <summary>  
2. /// 是否HTTPS访问  
3. /// </summary>          
4. public static bool IsHTTPs  
5. {  
6. get  
7.     {  
8. string url = HttpContext.Current.Request.Url.ToString().ToLower();  
9. bool result = url.StartsWith("https://");  
10.   
11. string useSSL = PayConfig.GetString("UseSSL");  
12. if (!string.IsNullOrEmpty(useSSL) && useSSL == "0")  
13.         {  
14. return result;  
15.         }  
16. else  
17.         {  
18.             NameValueCollection nvc = HttpContext.Current.Request.Headers;  
19. string ssl = string.Empty;  
20. for (int i = 0; i < nvc.Keys.Count; i++)  
21.             {  
22. if (string.Compare(nvc.Keys[i], "ssl", true) == 0)  
23.                 {  
24.                     ssl = nvc[nvc.Keys[i]].Trim();  
25.                 }  
26.             }  
27. //WebLog.WriteAction("ssl == 1", (ssl == "1").ToString());  
28. return ssl == "1" ? true : result;  
29.         }  
30.     }  
31. }



[csharp]  view plain copy print ?


1. /// <summary>  
2. /// 获取HTTPS地址  
3. /// </summary>  
4. /// <param name="url"></param>  
5. /// <returns></returns>  
6. public static string GetHttpsUrl(string url)  
7. {  
8. if (IsHTTPs)  
9.     {  
10. "http://", Consts.UrlParameter.HTTPS, RegexOptions.IgnoreCase);  
11.     }  
12. return url;  
13. }


(2)      如需对整个站点做HTTPS强制切换,则可以:

             对部分无法强制转向的页面,可以FILTER方式搞定。


[csharp]  view plain copy print ?


1. /// <summary>  
2. /// 非HTTPS访问强制转向到HTTPS  
3. /// </summary>  
4. void HttpsRedirect()  
5. {  
6. string absolutePath = GlobalItem.AbsolutePath.ToLower();  
7. string url = HttpContext.Current.Request.Url.ToString();  
8. if (GlobalItem.IsHTTPs == false  
9. false  
10. ".") < 0 || absolutePath.Contains(".aspx"))) //过滤.asmx、.ashx、.axd等,//根目录等,不含文件名  
11.     {  
12. //获取不需要HTTPS跳转的页面配置, 不在列表内则跳转  
13. string httpsPages = "," + Configs.HttpsPages.ToLower() + ",";  
14. if (httpsPages.IndexOf("," + absolutePath + ",") < 0)  
15.         {  
16. "http://", "https", RegexOptions.IgnoreCase);  
17.             HttpContext.Current.Response.Redirect(url);  
18.             HttpContext.Current.Response.End();  
19.         }  
20.     }  
21. }

https://www.xamrdz.com/backend/3fg1944620.html

相关文章: