现在的位置: 首页 > 综合 > 正文

.NET安全系列之七:通信相关内容

2012年12月10日 ⁄ 综合 ⁄ 共 2298字 ⁄ 字号 评论关闭

安全连接 - SSL

SSL(Secure Sockets Layer, 安全套接字层)协议保证两个在Internet上通信的应用程序之间的保密性和可靠性。SLL建立在TCP层的基础上。其提供了面向连接的安全性,有如下四个属性:

l  链接是私有的,加密仅对这个会话有效。

l  对称密钥加密算法(例如:DES)用于加密。会话密钥使用非对称密钥加密算法来交换。

l  数字证书用于验证通信实体的标识。

l  安全散列函数,如SHAMD5,用作消息验证代码(MAC)

SSL协议的目标有:

l  加密的安全性 - 对会话使用对称密钥,对验证使用公共密钥。

l  通用性 - 在不同的OS编程语言间使用。

l  可扩展性 - 添加允许在SSL框架中使用的数据加密协议。

l  相对的高效 - 使用高速缓存技术减少计算和网络操作。

 

SSL算法的具体过程

         两个使用SSL协议通信的实体必须各有一个公共 - 私有密钥对,并可以用数字证书验证它们各自的公共密钥。

         在会话的开始,客户端和服务器交换信息,验证彼此的身份。这个验证过程称为握手协议。在这个过程中,将协商使用什么会话ID、压缩方法和加密包。如果存在证书,它们也要交换。尽管证书是可选的,但如果没有证书,客户端和服务器可能拒绝新链接,停止会话。

         在接收到彼此的公共密钥后,就交换建立在随机生成的数字基础上的一组密钥,用彼此的公共密钥加密它们。之后就可以开始交换应用程序数据了。应用程序数据使用一个对称密钥进行加密,并发用一个数据的标记散列,以验证数据的完整性。

 

.NET Framework中有类实现了SSL客户端。通过IIS Web服务器部署服务时,可以使用服务器端的SSL。这样可以在Windows平台下获得一个完整的保护B/S系统数据安全的方案。

 

示例1:下面程序演示了在.NET平台上访问SSL保护的Web服务器。

WebRequest req = WebRequest.Create("http://www.cnblogs.com");

WebResponse result = req.GetResponse();

但是用含有httpsURL创建WebRequest(System.Net命名空间)时,WebRequest会自动使用SSL协议。

 

示例2:下面示例了访问一个安全的URL,其考虑了像编码这样的细节。

using System;

using System.IO;

using System.Net;

using System.Text;

 

class Program

{

    static void Main()

    {

        Console.WriteLine("请输入一个httpsurl");

        string url = Console.ReadLine();

 

        string ms = "";

 

        try

        {

            ms = Create(url, "utf-8");

        }

        catch(Exception ex)

        {

            Console.WriteLine(ex.StackTrace);

        }

        Console.WriteLine(ms);

    }

 

    //创建一个HTTP安全请求对象,并获得它的相应流

    public static string Create(string url, string encod)

    {

        WebRequest req = WebRequest.Create(url);

        WebResponse result = req.GetResponse();

        Stream ReceiveStream = result.GetResponseStream();

 

        //Encoding对象创建一个编码实例

        Encoding enc = Encoding.GetEncoding(encod);

        //创建流读取器

        StreamReader sr = new StreamReader(ReceiveStream, enc);

 

        //读取整个流 - 把整个Web页面对象串行化入字符串

        string response = sr.ReadLine();

        return response;

    }

}

说完了客户端,接着我们来讨论下如何在IIS上配置SSL,由前面介绍我们知道SSL基于公钥私钥对来实现,而安全证书正是作为这样一组密钥提供加密认证服务。我们可以通过域控制器上配置的证书中心得到证书,但这种证书没法被浏览器校验,会出现安全警告,不适合在互联网生产环境中使用(在域内部使用没有这个问题)。更好的方法的是由VeriSign等安全公司申请证书,IE等浏览器中内置这些机构的根证书,可以验证由这些组织得到的证书数字签名,从而确保证书的可靠性,且没有安全警告等影响易用性的问题。

VeriSign获取SSL证书的步骤:

通过IIS MMC管理窗口中服务器证书内创建证书申请生成一个证书签名请求(CSR),将生成的CSR中的内容复制到VeriSign申请系统中。这样就可由VeriSign得到一个证书,把其安装到IIS中即可。

         IIS中安装完证书后,就可以使用SSL连接(https)访问服务器上的所有Web页面(服务器防火墙注意开放443端口),只需将http://换成https://即可。在网站设计中我们应该只对登陆,交易等页面使用SSL,对所有页面使用SSL

抱歉!评论已关闭.