SSL原理及应用(3).NET开发中处理HTTPS

简介:

SSL原理及应用(3.NET开发中处理HTTPS

ASP.NETSQL ServerWCF等通信领域,微软都提供了基于SSL的安全保护机制。遗憾的是,.NET并没有对SSL协议本身提供像TCPUDP这样的基础网络协议的编程性支持。如果想从协议的角度处理SSL通信或者想构建完整的SSL框架,那么.NET帮不上你,但是还有选择,许多第三方安全通信的项目提供了支持,比如OpenSSL。这不意味着我们在此领域将无所作为,第6介绍了.NET中操作数字证书的两个类:

q  System.Security.Cryptography.X509Certificates.X509Certificate2

q  System.Security.Cryptography.X509Certificates.X509Store

Web开发中,SSL通信由浏览器和Web服务器来实现通信细节。封装了HTTP协议的WebRequestWebResponse等类提供了处理HTTPS请求的能力。当我们在程序中向HTTPS链接发送请求的时候,可以获取服务器返回的证书。

请求HTTPS链接

当使用WebRequest类请求HTTPS链接的时候,在操作上和请求普通的HTTP链接没什么不同。代码清单8-1演示了如何获取一个HTTPS链接的方法。

代码清单 8-1获取HTTPS链接

try

{

Uri uri = new Uri("https://www.sample.com/https.aspx");

 

WebRequest http = HttpWebRequest.Create(uri);

HttpWebResponse response = (HttpWebResponse)http.GetResponse();

Stream stream = response.GetResponseStream();

}

catch(UriFormatException e)

{

Console.WriteLine("无效的URL");

}

catch(IOException e)

{

Console.WriteLine("连接失败");

}

代码清单8-1中,通过HttpWebRequest对象的Create方法创建一个简单的HTTPS请求,并反回一个HttpWebResponse对象。

说明 HttpWebRequest类对WebRequest中定义的属性和方法提供支持,在使用HttpWebRequest对象向HTTP服务器发起请求时请不要使用HttpWebRequest对象的构造函数,而应该使用WebRequest.Create()方法来初始化新的HttpWebRequest对象。如果统一资源标识符方案是"http://"或"https://"时,Create()则返回HttpWebResponse对象。

证书信息的获取与证书加载

在代码清单8-1的基础上,只需略加修改就可以让程序适应需要提交客户端证书的情况。如代码清单8-2所示。

码清单8-2  证书信息的获取与证书加载

   public void Test()

        {

            Uri uri = new Uri("https://www.sample.com/https.aspx");

 

            HttpWebRequest httpRequest = (HttpWebRequest)HttpWebRequest.Create(uri);

            

            X509Certificate cer = X509Certificate.CreateFromCertFile("证书文件地址");

            httpRequest.ClientCertificates.Add(cer);

            HttpWebResponse response = (HttpWebResponse)httpRequest.GetResponse();

            Stream stream = response.GetResponseStream();

        }

在代码清单8-2中,首先创建一个X509Certificate对象,把它添加到WebRequestClientCertificates集合中。我们的证书一定要保护密钥信息。

在服务器端,可以从客户端请求的上下文中获取客户端提交的证书。

Asp.NET中,可以通过下面的代码来获取证书信息:

Request.ClientCertificate(key[SubField])

在上面的代码中,Key指定要获取证书字段的名称,不同的Key值具有不同的含义,SubField为可选字段。Key具体信息如表8-2所示。

8-2  Request.ClientCertificateKey值信息

意义

Certificate

ASN.1 格式的二进制流字符串,即完整的证书内容

Flags

一组标志,提供其他客户端证书信息。可以设置:ceCertPresent(当前的客户端证书)和ceUnrecognizedIssuer(该链接上来自未知的发行者的最后一个证书)

Issuer

包含子字段值的列表的字符串,此列表包含证书颁发者的信息。若该值在无SubField项的情况下指定,则ClientCertificate集合返回一个以逗号分隔的子字段列表。例如:C=US, O=Verisign

SerialNumber

包含证书的序列号的字符串,序列号以连字符(-)分隔的16进制ASCII码表示,如04-67-F3-02

Subject

包含子字段值的列表的字符串,此列表包含有关证书的主题信息。若该值在无SubField项的情况下指定,则 ClientCertificate 集合返回一个以逗号分隔的子字段列表。例如,C=US, O=Verisign

ValidFrom

指定证书何时有效。此日期遵循VBScript格式并随国家(地区)设置而变化。例如,在美国可表示为9/26/96 11:59:59 PM

ValidUntil

指定证书何时到期

SubField用于按SubjectIssuer关键字检索单独的字段。此参数作为一个后缀添加到Key参数中,如IssuerOSubjectCN。表8-3列出了一些通用的SubField值。

8-3  SubField支持的参数和意义

意义

C

指定原国家(地区)名

CN

指定公用用户名(此子字段仅同 Subject 关键字一起使用)

GN

指定给定的名称

L

指定所在地

O

指定公司或组织名称

OU

指定机构的名称

S

指定州或省

T

指定此人或组织的头衔

根据表8-2和表8-3的说明,可以获取关于客户端证书的完整信息,这里不再演示。

 ----------------------注:本文部分内容改编自《.NET 安全揭秘》



本文转自玄魂博客园博客,原文链接:http://www.cnblogs.com/xuanhun/archive/2012/06/23/2559634.html,如需转载请自行联系原作者
目录
相关文章
|
4天前
|
开发框架 前端开发 JavaScript
采用C#.Net +JavaScript 开发的云LIS系统源码 二级医院应用案例有演示
技术架构:Asp.NET CORE 3.1 MVC + SQLserver + Redis等 开发语言:C# 6.0、JavaScript 前端框架:JQuery、EasyUI、Bootstrap 后端框架:MVC、SQLSugar等 数 据 库:SQLserver 2012
|
7天前
|
安全 网络协议 网络安全
网络原理(5)--HTTPS是如何进行加密的
网络原理(5)--HTTPS是如何进行加密的
5 0
|
22天前
|
前端开发 应用服务中间件 网络安全
http转为https,ssl证书安装及nginx配置
http转为https,ssl证书安装及nginx配置
36 1
|
1月前
|
运维 安全 Linux
CA认证与HTTPs原理介绍
CA认证与HTTPs原理介绍
28 2
|
1月前
|
存储 缓存 安全
https跳过SSL认证时是不是就是不加密的,相当于http?
https跳过SSL认证时是不是就是不加密的,相当于http?
118 0
|
1月前
|
Web App开发 前端开发 网络安全
前端分析工具之 Charles 录制 Android/IOS 手机的 https 应用
【2月更文挑战第21天】前端分析工具之 Charles 录制 Android/IOS 手机的 https 应用
47 1
前端分析工具之 Charles 录制 Android/IOS 手机的 https 应用
|
1月前
|
安全 网络协议 算法
是时候理解下HTTPS的原理及流程了
是时候理解下HTTPS的原理及流程了
23 0
|
1月前
|
安全 搜索推荐 数据安全/隐私保护
深入探讨HTTPS协议的原理和工作流程
【2月更文挑战第10天】
34 4
深入探讨HTTPS协议的原理和工作流程
|
1月前
|
安全 算法 数据安全/隐私保护
网络原理 - HTTP/HTTPS(5)
网络原理 - HTTP/HTTPS(5)
|
1月前
|
Web App开发 应用服务中间件 nginx
网络原理 - HTTP/HTTPS(4)
网络原理 - HTTP/HTTPS(4)