为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

《OpenSSL与网络信息安全——基础、结构和指令》

2011-06-26 27页 pdf 423KB 273阅读

用户头像

is_462183

暂无简介

举报
《OpenSSL与网络信息安全——基础、结构和指令》 《OpenSSL 与网络信息安全——基础、结构和指令》 中国 OpenSSL 专业论坛 王志海 版权所有 网络发布前言 《OpenSSL与网络信息安全——基础、结构和指令》一书,本来规划是一系列的OpenSSL 书籍中的一本(共规划四本),但既便《OpenSSL 与网络信息安全——基础、结构和指令》 一书,历经两年多,依然不能完成手稿。究其原因,一则由于事情繁忙,实在难有闲暇,另 则由于人的惰性。 如果说本书有一点点借鉴意义,那么其越早呈现给大家,对国内密码学的发展或者越能 够起到一点点微薄...
《OpenSSL与网络信息安全——基础、结构和指令》
《OpenSSL 与网络信息安全——基础、结构和指令》 中国 OpenSSL 专业论坛 王志海 版权所有 网络发布前言 《OpenSSL与网络信息安全——基础、结构和指令》一书,本来规划是一系列的OpenSSL 书籍中的一本(共规划四本),但既便《OpenSSL 与网络信息安全——基础、结构和指令》 一书,历经两年多,依然不能完成手稿。究其原因,一则由于事情繁忙,实在难有闲暇,另 则由于人的惰性。 如果说本书有一点点借鉴意义,那么其越早呈现给大家,对国内密码学的发展或者越能 够起到一点点微薄之力。但是由于没有完稿,想通过正规的渠道交给大家,例如出版社,恐 怕是难以实现,但幸好我们有了网络,这个畅通的渠道,我可以把这些零落的篇章,交给大 家审阅。如果有后来者希望继续完成本书未完的篇幅,则是我最希望看到的。 本身完成之所以缓慢,是由于其中很多细节之处,都需要试验和编程来进行仔细的考究, 因为技术文章,本是异常严谨的事情,不像写些无关痛痒的散文诗歌,可以即兴发挥。在写 著本书过程中,虽然我努力做到仔细无误,但是错误肯定还是难以避免,希望同行们在阅读 的过程中发现后能够及时在 www.OpenSSL.cn 网站上更正,假若能告知我,那就更不胜感谢! 王志海 2004.12.9 《OpenSSL 与网络信息安全——基础、结构和指令》 中国 OpenSSL 专业论坛 王志海 版权所有 第1章 概述 王志海 1.1 信息安全 信息安全是本书要解决的主要问题,本节将介绍信息安全的基本概念和本书将要涉及的 信息安全的内容。 1.1.1 信息安全概念 信息安全是自古以来就存在的概念,比如以前为了保证传递书信的保密性,使用腊封或 其它方式将书信封装在信封内;还有使用暗号口令确认接受信息的人的身份等等方法。需要 注意的是,信息安全技术是跟信息的载体形式和传送媒介密切相关的,信息载体的变化和信 息传送媒介的变化必然会导致信息安全技术的变化发展。 在过去的二十多年中,信息技术取得令人惊异的发展,越来越多的有价值的信息和资料 以数字信息存放在计算机等数字信息存储设备中。与此同时,信息共享技术也获得了巨大的 突破,以 Internet 的发展为代表,短短的时间内,从美国军方的一个专用网络发展到联系着 全世界千千万万人的膨大信息网络。这些客观的变化导致对信息安全的要求发生了重大的变 化。 随着信息数字化以及计算机应用的发展,对存储在计算机中的文件和其它数字信息的保 护需求成为了一种必然,尤其对一个能够通过公共网络进入的共享系统来说,这种需求显得 尤为迫切。针对这种需求目前发展起来的技术有防病毒技术和防火墙技术等等。有些文献将 这些保护数据、阻挡非法数据访问的技术统称为计算机安全或系统安全技术。 信息安全技术的另外一个重要变化是由于网络和通信设施的产生和应用引起的。这些网 络和通信设施用来在用户各种终端以及计算机之间传输数据信息,这个传输过程很容易受到 非法窃听等攻击,这就需要对在网络中传输的数据采取安全的保护措施。针对这种需求发展 起来的技术有 VPN、SSL 等。有些文献将这种类型的技术统称为网络安全技术。 事实上,因为现在的绝大部分数据终端设备(包括计算机)基本上都是跟网络想联的, 所以无论是计算机安全、系统安全还是网络安全,都不是完全相互独立的,而且,这些名词 由于其笼统性,反而有概念不清和误导的可能。所以,我更愿意用具体一点的技术名词来说 明不同的信息安全技术。 本书关注的是使用基于密码学原理来进行数据信息保护的技术,尤其偏向于利用该技术 保护在网络中传输的数据。对于防火墙、防病毒以及入侵检测(IDS)等技术涉及的安全问 题和解决,本书不作介绍。在本书的后续的章节,如果没有特别指明,信息安全的范围 仅仅狭隘的包括使用基于密码学原理来进行数据信息保护的安全技术。 1.1.2 信息安全内容 正如 Bruce Schneier 所说,安全问题就如一条链子一样,必须保证每一个环节的安全才 能达到使整个链子具有安全性。所以,在解决任何一个实际的或抽象 的系统的安全之前, —1— 《OpenSSL 与网络信息安全——基础、结构和指令》 中国 OpenSSL 专业论坛 王志海 版权所有 都应该首先其存在的可能的安全缺陷,进而采取相应的安全措施。为了使读者了解本书 涉及的领域和需要解决的问题,下面介绍一下与本书内容相关的安全问题,并举一些相关的 安全漏洞的例子,加深读者的理解。 机密性 机密性用于保护信息免受主动的非法窃取、阅读等攻击。在信息数字化之前,信息的机 密性是依靠严格的和强大的物理手段来实现的,如戒备森严的房子和难以破坏的保 险箱。对于独立的设备中(没有联网的计算机)的数字化信息,当然也可以依赖传统的保密 手段,但是对于一般的共享系统或联网的系统来说,传统的方法就显得难以适应,必须采用 新的针对数字信息的手段。 机密性涉及的范围是多方面的,主要包括内容的机密性和信息量的机密性。 内容的机密性是很容易理解的,就是确保数字信息的内容不被没有授权的人访问。内容 的机密性既可以针对计算机中的一个重要文件,也可以是网络中传输的一些数据。对于计算 机中的一个文件内容的保护情况显得可能简单一点,最简单的处理方法是我们只需要采用足 够强大的加密算法将文件的内容加密即可。对于保护网络传输的信息,需要考虑的情况就会 多一点,其中之一就是我们可能需要考虑对数据做不同层次的保护。比如,对一般的计算机 之间的通信,我们可能只是选择其中重要的数据信息进行保护;而对于机密性要求非常高的 办公室之间的两台计算机,我们可能会对它们之间传输的所有数据都进行保护。 信息量的机密性源于网络传输中通信量分析技术的产生,但我认为不仅仅限于网络通信 量的分析,在本地的计算机系统中,一样存在类似的安全危险,我将它们统称为信息量的机 密性。采用通信量分析进行攻击要求攻击者能够在通信设施上监听到通信的源和目的地址、 通信频度、通信的数据长度、通信的时长等特征。对于本地计算机系统中的普通加密保护的 文件,一样可以通过获取文件的长度信息、修改时间来获得有用的信息,更进一步,对一些 结构化的文件,可以通过分析其各个结构的长度信息等来获得更多有用的信息,比如对加密 数据库中各个字段长度的分析就可能得到大量的有用信息。信息量的分析还可以针对计算机 系统中运行的程序,比如对加密程序的攻击就已经成功破解了 RSA 似钥。信息量的机密性 在以前远远没有得到重视,但在今后的时间里,随着其相关攻击手段和事件的增加,必然会 得到更大的发展。 完整性 完整性用来确保信息没有被修改,也可以防止假冒的信息。对于一个计算机中存储的信 息来说,完整性的概念就是确保信息在存储的过程中没有被非法进行修改或替换。 对于网络信息来说,情况就复杂多了,主要分成面向连接和无连接两种情况。对于面向 连接的情况来说,完整性是针对信息流的服务,它需要确保接受到的信息和发送的信息是一 样的,没有篡改、插入、重排序、重复或者延迟,同时也要确保通信结束后数据在网络上的 销毁。所以,面向连接的完整性服务不仅仅可以确保消息没有被非法篡改,还可以一定程度 上防止拒绝服务攻击(DOS)。对于无连接的网络信息传输来说,完整性的内容跟计算机系 统中文件对象是一样的,保护信息没有被篡改或替换。 鉴别 鉴别用来确认访问者的身份或消息的来源,防止冒充他人的行为发生。对于计算机中存 储的信息来说,鉴别的功能就是确保访问者的身份,如最简单的是使用口令和密码来确保访 问者的身份,安全一点的解决方案是通过 USB Key、IC 卡或其它信息的令牌进行身份鉴别。 对于网络传输中的信息来说,鉴别所需要确认的对象就有多种,可能是消息传输操作的 用户,也可能是特定的应用程序,也可能是特定的 IP 地址,有时候可能是这些特征的综合, 我们统称这些为实体。也就是说,在网络传输信息的过程中,鉴别的功能首先是确保通信双 方的两个实体都是可信的,都是它们所宣称的实体;其次,鉴别还要确保在信息传输的过程 —2— 《OpenSSL 与网络信息安全——基础、结构和指令》 中国 OpenSSL 专业论坛 王志海 版权所有 中不被第三方假冒两个合格方的任何一方来达到未授权接受信息或发送信息。 抗抵赖 抗抵赖的功能是保证消息制造或发出者不能在事后否认他制作或发出的消息。对于计算 机中存储的信息,抗抵赖的功能就是确保文件在被合法授权用户修改后该用户否认自己做过 这样的修改或创建这个文件的行为。这在传统的书面文件中,可以使用手写签名来解决这个 问题,相应的,对于数字信息,可以使用数字签名来达到相同的目的。 对于网络信息传输的过程而言,抗抵赖的功能要求接受方能够验证消息的发送方,同时 要求发送方能够验证消息的接受方,并能够在发生争议后向第三方(比如法庭)证明消息的 发送方或接受方。 攻击举例 为了进一步说明上述四种信息安全措施的必要性,下面举一些针对性的攻击的例子,加 深读者的理解。 Susn 使用 Mail 通过 Internet 向 Tom 传送一个带有机密信息的文件,但是由于没有使用 安全措施保护该传送的信息,与 Susn 在同一公司局域网内工作的怀有不良目的 Jim 通过使 用 Sniffiner 监听了 Susn 发送 Mail 的整个过程,因为 Internet 的信息是明文传送的,所以 Jim 成功获取了这个带有机密信息的文件。这是一个针对机密性攻击的例子。 Susn 是公司的总裁,他想给表现不错的 Eric 加 2000 元工资,起草了一份电子文件,叫 秘书 Anna 发给财务部。Anna 是 Jim 的女朋友,而 Jim 正好跟 Eric 在同一个部门,于是 Anna 就将电子文件的名字 Eric 改成了 Jim,然后发给财务部,后果可想而知。这是针对完整性攻 击的例子。 计算机 Server 上存有公司重要的客户资料,只有公司的客户部部门经理 Tom 有权限访 问这些重要资料。Jim 是该公司一个员工,他准备跳槽,为了获得更多的客户资料,他一直 想访问 Server 上的客户资料。有一天 Jim 无意中获得了 Tom 的帐号和密码(偷看的),然后 就连接上 Server,告诉 Server 是 Tom 要访问客户资料,并按 Server 的要求输入了密码,顺 利取得了想要的客户资料。这是针对鉴别攻击的例子。 Jim 在一个电子商务网站购买了一个笔记本电脑,并通过网络告诉银行从自己的帐户给 电子商务网站转帐。Jim 在取得笔记本电脑后,发现自己其实并不需要笔记本电脑,但是退 货已经不可能,于是就打算抵赖,他跟银行说自己其实并没有购买笔记本,是别人冒充了他, 银行要负责任。如果银行没有一套针对这种情况的措施和方法,情况就会很麻烦。这是针对 抗抵赖攻击的一个例子。 上述只是举了一些攻击的简单例子,事实上,实际的情况可能复杂的多,涉及的攻击可 能也是多方面的。本书针对这些攻击采取的措施都是基于密码学原理的基础上的,下面我们 就来了解一下密码学的基本背景。 密码学是本系列丛书基础中的基础,本节将概要地介绍密码学的功能、内容和应用,使 读者对密码学有一个初步的了解。 1.2 密码学 密码学是本系列丛书基础中的基础,本节将概要地介绍密码学的功能、内容和应用,使 读者对密码学有一个初步的了解。 —3— 《OpenSSL 与网络信息安全——基础、结构和指令》 中国 OpenSSL 专业论坛 王志海 版权所有 1.2.1 密码学功能 最原始的密码学的作用是进行信息保密,即解决前面叙述的机密性问题。但现代发展起 来的密码学功能已经远远超出了这个范围,它可以用来解决包括机密性、完整性、鉴别以及 抗抵赖相关的各种难题,囊括了本书前面介绍的各种安全问题。 机密性问题是密码学最早关心的问题,也是核心的问题。目前针对机密性问题,密码学 提出了各种算法,主要分为对称加密算法和公开密钥算法。不管是什么算法,都是为了在各 种复杂和苛刻的条件下实现信息保密的功能,对称加密算法主要适应于通信双方已经共享了 秘密的密钥的情况,而公开密钥算法则适用与通信双方没有共享的密钥的情况。目前常用的 对称加密算法有 DES、3DES、AES 等等,常用的公开密钥算法有 RSA、DH 算法等等。 完整性问题在现代密码学中也得到了较好的解决,主要是采用了散列函数和数字签名相 结合的算法。散列函数是一种单向映射函数,是密码学中确保数据完整性的核心算法,目前 常用的有 MD5、SHA 和 SHA1 算法等等。 鉴别问题和抗抵赖问题在密码学中的解决不仅仅依赖密码算法本身,还依赖一套严格执 行的密码协议或网络协议。这些协议以密码算法为基础,达到了鉴别和抗抵赖的功能。虽然 设计一个好的密码协议并非如想象的那么容易,目前密码协议还是种类繁多,我们熟悉的有 Kerberos、SKID 等,网络协议有 SSL、SET 等。这些协议基本上都具备了鉴别和抗抵赖的 功能。 1.2.2 密码学内容 现代密码学目前可以基本分为两大部分,密码算法和密码协议。密码协议是建立在密码 算法的基础上实现的,但其完成的功能比单一的密码算法所能完成的功能丰富的多。 密码算法根据其完成的功能可以分为对称加密算法、公开密钥算法、数字签名算法以及 信息摘要(散列函数)算法。对称加密算法主要完成了明文数据到密文数据的转换功能,其 加密密钥和解密密钥是相同的。公开密钥算法完成的功能跟对称加密算法是相同的,但是其 加密密钥和解密密钥不相同。数字签名算法的功能是实现鉴别和抗抵赖的功能,其具体的实 现有时候可以采用对称加密算法或公开密钥算法实现,也有专门设计用于数字签名的算法。 信息摘要算法主要是实现将大量的信息不可逆映射成一段定长或较短的信息而基本保持其 独特性,所谓独特性,也就是说不同的信息经过相同的信息摘要算法映射后得到的结果应该 也是不同的。 密码协议是使用密码学的协议,它包含了某种密码算法,但通常不仅仅是为了加密,而 是为了更加复杂的特定目的设计的。参与协议的各方可能是各种各样的人,可能是相互信任 的朋友,也可能是敌人,他们的目的可能是为了共享秘密、确定相互身份或者共同签署。 在密码协议中使用密码算法一般来说是为了防止和发现窃听、攻击和欺骗等。 1.2.3 密码学应用 随着网络尤其是 Internet 的发展,密码学的应用已经越来越广泛。目前主要的应用领域 有电子商务、电子政务、私人邮件、Web 安全访问以及虚拟专用网(VPN)等等网络应用。 电子商务是密码学迄今为止应用最成功的领域之一,主要涉及到了网络交易中的保密 性、身份鉴别、完整性以及抗抵赖等功能。例如用户在某电子商务网站使用一个信用卡进行 —4— 《OpenSSL 与网络信息安全——基础、结构和指令》 中国 OpenSSL 专业论坛 王志海 版权所有 购物时,必须保证整个过程时保密的而且时安全的,对于电子商务网站和银行来说,也必须 确保用户的身份是可信的,并且能够向第三方证明用户确实执行了相关的操作。目前电子商 务成功的协议之一是 SET 协议。 电子政务以及办公自动化系统的使用也越来越广泛,与之密切相关的安全性也出现了需 求。比如公文的签发,需要数字签名,用户权限的控制需要进行身份确认等等。 电子邮件是普通网络用户使用最为广泛的 Internet 工具,因为邮件涉及到个人隐私等机 密信息,所以保护电子邮件的安全早就成为了一个热点话题。目前,安全邮件系统 PGP 取 得很大的成功,PGP 不仅仅实现了邮件信息在网络传输中的机密性,而且能够建立用户之 间的信任关系,确认用户的身份,并保证邮件信息的完整性。 Web 已经成了信息发布的一个重要途径,一些企业可能希望一些重要的资料文件不被 未经授权的用户访问,另一方面,用户为了安全的可能也需要验证服务器的身份。SSL 协议 是解决这种需要的一个成功协议之一。 虚拟专用网技术(VPN)是解决大型的地理位置分布分散的公司或机构的低成本联网方 案,该技术使用密码算法和密码协议通过 Internet 网建立起分支机构之间的虚拟专用网络。 使得各分支机构之间能够安全的进行信息通信。 1.3 公钥基础设施 公钥基础设施(PKI)是近年来受到非常多关注的一项技术,本节介绍了公钥基础设施 的基本概念以及其组件,并介绍了数字证书的基本作用。 1.3.1 公钥基础设施的必要性 公钥基础设施(PKI)是一种基于公开密钥算法的安全基础,它提供了一个框架, 在这个框架内建立起了可以创建鉴定和认证过程需要的身份和相关信任关系,建立了可以管 理的公开密钥加密系统。 虽然公钥基础设施是建立在密码学的公开密钥算法的基础上,但其解决了仅仅依靠密码 学算法所无法解决的问题。公开密钥算法的密钥对能够实现对特定密钥对的鉴别和验证,但 是无法建立将特定密钥对跟具体的个人身份联系起来的可信任关系。让我们来看一个公钥算 法进行数字签名的例子。 创建一个数字签名,首先需要为文件的内容使用散列函数生成一个散列值以确保信息不 被修改。然后就使用签名者的私钥对得到的散列值或摘要进行加密。数字签名的验证过程要 求重新生成文档的散列值,再使用签名者的公钥对用签名者私钥加密的散列值进行解密,得 到最初的散列值,然后比较这两个散列值。如果两个散列值一致,那么就认为签名通过。但 是关键的问题是怎么确认那对先用于加密散列值,然后又用于解密散列值的那对密钥是确实 属于所声称的签名者。对于一个聪明的入侵者来说,因为公钥是公开的,他可以通过某种方 法用自己的公钥替换那个用于标识某个特定签名者的公钥,公钥被发布后,他就可以用自己 的私钥生成一个能够通过上述验证过程的数字签名。所以,虽然拥有了公开密钥算法,但是 算法本身并不足以确定一个可信人的身份。 公钥基础设施正是为了建立这种信任关系而产生的,它的主要目的就是建立可信任的数 字身份,将特定密钥对和特定的人或实体联系起来,建立这种联系的主要形式就是颁发可信 任的数字证书(或者叫电子证书)。 —5— 《OpenSSL 与网络信息安全——基础、结构和指令》 中国 OpenSSL 专业论坛 王志海 版权所有 1.3.2 数字证书 对于初学者来说,数字证书的功能可能是难以理解的,事实上,你完全可以将数字证书 跟你常用的身份证作对比。不过数字证书是你(或一个实体)在数字世界标识自己身份的证 书罢了。下表显示了数字证书跟居民身份证书项目的一些对应关系,虽然这些对应不一定非 常贴切,但显示了数字证书的真实作用。 表 1.1 数字证书跟居民身份证书项目的一些对应关系 身份证项目 数字证书项目 颁发机构是公安局 颁发机构是认证中心 公安局印章 认证中心电子签名 唯一的居民身份证号码 唯一的证书序列号 持有人姓名 证书拥有实体名称 事实上,在使用上,数字证书跟现实的证书也有很多相类似的地方,比如在银行开户时, 银行需要你出示身份证并验证身份证的真假和是否确实是你自己的身份证;在数字世界也一 样,当你在电子商务网站购物时,出示你的数字证书,电子商务网站会验证你的证书是否可 信并确定是否确实是你自己的证书。 身份证的颁发需要公安局等权威机构执行一些列的材料核对和认证工作,并需要居委会 和派出所等机构参与身份证的认证和管理工作。数字证书的颁发也一样,首先就需要一个权 威的大家都信任的机构,此外,还需要其它一些设施或机构参与管理数字证书,这些数字世 界设施的集合就是我们所说的公钥基础设施(PKI)。 1.3.3 公钥基础设施的组件 公钥基础设施并不是一个单一的设施,它由一系列的组件组成以完成其特定的功能。在 一个 PKI 的作用域中,并非下面介绍的所有设施都是必须的,有些设施如 RA 可能并不需要。 认证机构(CA) CA 可以说是 PKI 系统中的核心机构,负责确认身份和创建数字证书,建立一个身份和 一对密钥之间的联系。作为一个程序员或技术人员,通常可能将 CA 跟证书签发服务器(或 说证书签发应用程序)等同起来,事实上远远不是如此。CA 是一个软硬件和服务的集合, 包括了人、操作流程、操作规程和认证策略、支持软硬件以及环境。一个成功的 CA 必须制 定一些规则,使申请者和证书用户确信该 CA 所确认的身份适用于自己的目的并且是可信任 的。一个 CA 是否能够获得成功,可能更重要的是在于其管理因素而不是技术因素。 注册机构(RA) RA 负责证书申请人的资料登记和初始的身份鉴别,还可能需要接受证书用户提出的证 书撤销等其它服务。事实上,RA 是一个可选的组件,在很多时候,它所负责的功能并不需 要独立出来,而是可以成为证书服务器的一部分。一般来说,RA 最主要的职责就是接受申 请人的申请请求,确认申请人的身份,然后将确认了身份的申请请求递交给 CA。 证书服务器 证书服务器是负责根据注册过程中提供的信息生成证书的计算机或服务程序。证书服务 器将用户的公钥和其它一些信息形成证书结构并用 CA 的私钥进行签名,从而生成正式的数 字证书。事实上,证书服务器还可能要完成其它一些功能,比如证书的存放、发布以及吊销 等操作。技术人员在谈到 CA 时,通常就是指证书服务器。 证书库 —6— John Meng 高亮 《OpenSSL 与网络信息安全——基础、结构和指令》 中国 OpenSSL 专业论坛 王志海 版权所有 任何证书在使用之前,必须将证书以及其相应的公钥公布出去。证书库就是存储可以公 开发布的证书的设施。通常以目录的形式组成 PKI 的证书库,如 X.500 目录或者 LDAP 目 录。目前最为常见的是 LDAP 目录,它事实上是由一组对目录中定位信息的方法和协议描 述组成。 证书验证 当证书用户收到一个证书的时候,需要对这个证书进行验证。证书验证的项目通常包括: z 验证证书的签名者以确认是否信任该证书 z 检测证书有效期,确认证书是否有效 z 确认证书没有被签发它的 CA 撤销 z 检测证书预期用途跟 CA 在该证书中指定的策略是否相符合 证书的验证过程通常是对证书链的验证,这通常要执行多个上述项目的循环验证已得出 最终验证结果。证书的验证可以由客户端的验证程序执行,也可以提供专门的验证服务,客 户端可以通过使用这种服务来完成验证。 密钥恢复服务 密钥对是确保证书能够顺利签发和正常使用的基本前提,密钥对的产生形式是多样的, 既可以是客户端的软件如 OpenSSL 的应用程序或 IE 浏览器的密钥存储器中产生,也可以是 在 USB Key 或 Smart Card 这样的物理设备中产生,有时候也可能是在一个集中的密钥产生 服务器中生成。无论那种情况,都需要密钥恢复服务,使得加密密钥可以存档,并且在它们 丢失后能够恢复。设想如果 Susn 是公司的一个高层主管,她使用自己的密钥加密了众多的 重要文件,如果有一天她在出差时不小心飞机失事,从而丢失了密钥,这时候如果不能恢复 密钥,后果是可怕的。有时候,执法部门也会要求提供加密密钥。所以必须提供密钥恢复机 制。 时间服务器 因为每个计算机的时间都是可以设置并且不尽相同的,但是证书的验证和签发名等都需 要一个统一、可信和单调增加的时间。这就使得时间服务器的存在有了价值。时间服务器可 以为 PKI 作用域中的各个应用程序和 PKI 组件提供数字式时间戳,从而确保 PKI 域能够可 信正确地运行。 签名服务器 许多 PKI 的应用程序和服务需要执行数字签名的操作,比如对文件的签名和对交易信 息的签名等等。可能很多应用程序本身不具备签名的功能,那么这时候可以使用签名服务器 提供的服务,集中为各个应用程序生成签名。通常,签名服务器还提供验证签名的服务。 1.4 安全协议 安全协议是密码学在计算机网络应用中的具体形式,几乎绝大部分密码算法最后都要以 安全协议的形式得到应用。本节介绍通用的网络模型以及建立于其上的各种安全协议,重点 介绍了 SSL 协议。 1.4.1 网络模型和安全协议类型 虽然 ISO 网络模型是最为标准化的网络模型,但是,目前得到普遍应用的是 TCP/IP 网 络,在本书我们讨论采用的是从 TCP/IP 网络模型抽象出来的 5 层网络模型,其结构和对应 —7— 《OpenSSL 与网络信息安全——基础、结构和指令》 中国 OpenSSL 专业论坛 王志海 版权所有 的协议层如图 1-1 所示。 目前比较成功的安全协议,基本上是在上面三层即应用层、传输层和网络层实现。下面 我们介绍几个具有代表性的协议。 应用层安全协议 PGP PGP(Pretty Good Privacy)协议是由 Philip Zimmerann 设计的免费保密电子邮件程序。 严格来说,PGP 程序不能说是一个网络协议,但它确实是主要用于在网络上安全传递电子 邮件。该程序能够实现对电子邮件网上传输的安全性,具备了邮件加密、对邮件发送人的身 份鉴别、对邮件的数字签名和完整性等强大的功能。最新版本的 PGP 采用了多种加密算法 以供用户选择,比如对称加密算法采用 IDEA 和 3DES 等,公开密钥算法采用了 RSA 和 DH 等,信息摘要算法采用了 MD5 和 SHA1 等。 WWW、FTP、TELNET TCP、UDP IP 链路层协议 物理层 物理层协议 链路层 网络层 传输层 应用层 图 1-1 网络模型 在使用 PGP 的时候,用户之间首先要建立信任关系,这种信任关系的建立主要由用户 自己确定。用户可以通过对相互公开密钥的签名建立一个 PGP 用户的互联组。比如 Tom 认 识 Jim,Tom 将自己的公钥传给 Jim 之后,Jim 对 Tom 的公钥上签名并传回给 Tom,Tom 保 存这份签名的公钥。当 Tom 想和 Eric 通信时,就将有 Tom 签名的自己的公钥拷贝给 Eric, Eric 可能以前已经有 Jim 的公钥拷贝并信任 Jim 签名的其它用户的公钥,所以当它用 Jim 验 证该签名有效时,就接受 Tom,这样 Jim 就将 Tom 介绍给了 Eric。 传输层安全协议 SSL SSL(Security Socket Layer)是由 Netscape 公司提出的一种安全协议,目前其版本已经发 展到SSL v3,标准化版本为TLS(Transport Layer Security)。SSL协议目前广泛地使用在WWW 协议中,主流的 Web 服务器和浏览器都支持 SSL 协议,但是 SSL 协议绝不仅仅针对于 WWW 协议,它可以应用于传输层之上的所有服务,在下面一节我们会更加详细的介绍一下 SSL 协议。 网络层安全协议 VPN 虚拟专用网(VPN)技术确切的说不能说是一个协议,目前实现 VPN 的技术有多种多 样,这里仅仅指使用 IPSec 隧道方式建立起来的 VPN。PGP 保护的是特定 Mail 应用的数据, SSL 协议如果有必要,可以建立两个特定主机之间的部分应用程序的安全通信信道,而 VPN 做的工作是保护任何两个子网或主机之间传输的数据的安全。VPN 能够加密和鉴别在网络 层的所有通信量,VPN 提供了在公用网和 Internet 上建立安全通信信道的能力。 VPN 使用的典型例子是加入一个机构有多个地理上分散的局域网,这些局域网内部是 运行着各种不安全的协议。为了管理上的需要,机构希望将所有这些局域网连接起来,显然, 如果采用租用专业的方式花费将会非常昂贵,但是普通的 Internet 连接显然是不安全的。这 时候 VPN 就是一个很好的解决方案,实施 VPN 方案的各个局域网物理上通过 Internet 相互 连接在一起,但是所有从局域网进入 Internet 的信息包都要经过 VPN 设备的鉴别和加密, 所有从 Internet 就如局域网的数据也都有 VPN 设备进行鉴别和解密。这样,对于 Internet 上 局域网外的其它用户来说,这些局域网就是难以进入的。对于局域网的用户和应用程序来说, —8— 《OpenSSL 与网络信息安全——基础、结构和指令》 中国 OpenSSL 专业论坛 王志海 版权所有 VPN 的这些操作是透明的,跟另一个局域网的用户建立连接跟与本地局域网某个用户建立 连接是一样方便的。 1.4.2 SSL 协议 SSL 协议是本书以及本系列丛书重点介绍的协议,所以有必要在进入本书的正题之前对 该 SSL 协议做更多的一些了解。SSL 协议最初是由 Netscape 公司提出的,并且已经在其第 三版的基础上形成了 Internet 标准化版本 TLS。SSL 的提出最初是为了 Web 的安全性,但是 SSL 协议不仅仅能够 Web 的安全性问题,这对一般的技术人员和程序员来说是一个好消息, 因为 Web 的安全性很大程度上掌握在象 Microsoft 这些巨型公司中。 SSL 协议被设计成使用 TCP 协议提供端到端的安全服务,实际上,SSL 有一组协议组 成,而不是单个协议。SSL 的协议栈如图 1-2 所示。 SSL 记录协议为不同的高层协议提供安全服务,HTTP、FTP 等高层应用协议都可以在 SSL 协议上运行。SSL 握手协议、SSL 修改密文协议和 SSL 告警协议也是 SSL 协议的一部 分,它们的作用是用来管理与 SSL 有关的交换。 SSL 协议中有两个重要的概念,即连接和会话。连接是指两台主机之间提供特定类型服 务的传输,是点对点的关系。一般来说,连接是短暂的,每一个连接都与一个会话想关联。 会话是客户和服务器之间的关联,会话是通过握手协议进行创建的。会话是加密安全参数的 一个集合,包含了比如加密算法、临时加密密钥和初始向量等。会话可以被多个连接所共享, 这样可以避免为每个连接重新进行安全参数的协商而花费昂贵的时间代价。任何一对服务器 和客户之间可以存在多个安全 SSL 连接,这些连接可以共享一个会话,也可以共享不同的 会话。理论上说,一对服务器和客户之间也可以存在多个会话,但是由于这样付出相当高的 代价,所以一般来说不支持这种做法。 SSL 记录协议为 SSL 连接提供了机密性和报文完整性两种服务。机密性和报文完整性 所需要的密钥都是在握手协议中协商提供的。记录协议接受到传输的应用报文后,将数据分 片成可管理的块,可选地压缩数据,应用 MAC,加密和增加首部,然后使用 TCP 报文传输。 记录层接受到底层发来的数据后,进行解密、验证、解压和重新排序组合,然后交给上层的 应用协议。 SSL 修改密文协议是一个最简单的 SSL 相关协议,它只有一个报文,报文由值为 1 的 单个字节组成。这个协议的唯一作用就是将挂起状态被复制到当前状态,改变连接将要使用 的密文族。 SSL 告警协议是将 SSL 有关的告警信息传送给通信的对方实体。SSL 告警协议跟其它 使用 SSL 的应用协议(如 HTTP 协议)一样,报文安装当前状态的被压缩和加密。 SSL 握手协议是 SSL 协议中最复杂的协议。服务器和客户端使用这个协议相互鉴别对 IP TCP HTTP、FTP、TELNET 等应用协议 SSL 告警协议 SSL 修改 密文协议 SSL 握手协议 SSL 记录协议 图 1-2 SSL 协议栈模型 —9— 《OpenSSL 与网络信息安全——基础、结构和指令》 中国 OpenSSL 专业论坛 王志海 版权所有 方的身份、协商加密算法和 MAC 算法以及在 SSL 记录协议中加密数据的加密密钥和初始向 量。握手协议是建立 SSL 连接首先应该执行的协议,必须在传输任何数据之前完成。SSL 的握手协议由一系列报文组成,根据功能基本上可以分成四个阶段。 第一阶段是建立安全能力。所谓安全能力是指将要在通信中使用的加密算法、签名算法、 密钥交换算法、MAC 算法以及其它一些记录协议需要使用的必要参数如初始向量等等。这 个阶段由两个参数相同的报文组成,一个 Client_hello 报文,一个是 Server_hello 报文,协 议的发起由客户端执行。这个阶段完成后,就完成了安全能力的建立。 第二个阶段是服务器鉴别和密钥交换。如果服务器需要被鉴别,这个阶段将以服务器给 客户端发送自己的证书开始执行。这个阶段,服务器可能向客户端发送的信息包括证书或证 书链报文、密钥交换报文、客户证书请求报文以及证书完成报文。除了最后一个报文,并非 所有报文都是必须的,很多情况,可能只要发送其中的一个两个报文即可完成这个握手阶段。 第三个阶段是客户鉴别和密钥交换。受到服务器证书完成报文后,客户端首先验证服务 器是否提供合法的证书,检测服务器的参数是否可以接受,如果这些都满足条件,客户端就 向服务器发送客户证书报文(或者无证书告警信息)、客户密钥交换报文和证书验证报文中 的一个或多个。除了客户密钥交换报文,其它两个报文在某些情况下不是必需的。 第四阶段是完成握手阶段。这个阶段完成安全连接的建立。首先是客户通过修改密文协 议发送改变算法定义报文将挂起的算法族定义复制到当前的算法族定义。然后客户立刻接着 发送在新的算法、密钥和密码下的完成报文。服务器对这两个报文的响应是发送自己的改变 算法定义报文将挂起状态复制到当前状态,并发送完成报文。到此为止,握手协议完成,客 户端和服务器建立了安全连接,应用层协议可以使用 SSL 连接进行安全的数据通信了。 1.5 OpenSSL 介绍 OpenSSL 是本书的重要目的,本节将对 OpenSSL 做一个总的概述,介绍 OpenSSL 的简史和 OpenSSL 的组成,并讨论其优缺点。 1.5.1 OpenSSL 简史 上面我们简单介绍了 SSL 协议,与所有的协议一样,都只是一些规则而已,真正要应 用,必须将所有的协议规则转换成代码,对于任何个人和组织来说,这都是一个艰巨的任务, 尤其是 SSL 协议这样一种涉及到诸多专业知识的协议。目前,主流的 Web 服务器和浏览器 都支持 SSL 协议,但由于这些商业产品的源代码不是开放的,使得对这些商业产品的信任 和研究都大大落后。 OpenSSL 是一个开放源代码的 SSL 协议的产品实现,它采用 C 语言作为开发语言,具 备了跨系统的性能。OpenSSL 项目最早由加拿大人 Eric A. Yang 和 Tim J. Hudson 开发,现 在由 OpenSSL 项目小组负责改进和开发,这个小组是由全球的一些技术精湛的志愿技术人员 组成,它们的劳动都是无偿的,在此我们应该向他们表示崇高的敬意。 OpenSSL 最早的版本在 1995 年发布,1998 年后开始由 OpenSSL 项目组维护和开发。当 前最新的版本是 0.9.7b 版本,完全实现了对 SSLv1、SSLv2、SSLv3 和 TLS 的支持。OpenSSL 的源代码库可以从 OpenSSL 的官方网站 www.openssl.org 自由下载,并可以免费用于任何商 业或非商业的目的。由于采用 C 语言开发,OpenSSL 的源代码库具有良好的跨平台性能,支 持 Linux、Unix、Windows、Mac 和 VMS 等多种平台。目前,OpenSSL 已经得到了广泛的应用, —10— 《OpenSSL 与网络信息安全——基础、结构和指令》 中国 OpenSSL 专业论坛 王志海 版权所有 许多类型的软件中的安全部分都使用了 OpenSSL 的库,如 VOIP 的 OpenH323 协议、Apache 服务器、Linux 安全模块等等。我们有理由预期,OpenSSL 和其所倡导的开放源码的思想必 将被众多的支持者更加发扬光大。 1.5.2 OpenSSL 的组成 虽然OpenSSL使用SSL作为其名字的重要组成部分,但其实现的功能确远远超出了SSL 协议本身。OpenSSL 事实上包括了三部分:SSL 协议、密码算法库和应用程序。 SSL 协议部分完全实现和封装了 SSL 协议的三个版本和 TLS 协议,SSL 协议库的实现 是在密码算法库的基础上实现的。使用该库,你完全可以建立一个 SSL 服务器和 SSL 客户 端。该部分在 Linux 下编译会形成一个明文 libssl.a 的库,在 Windows 下则是名为 ssleay32.lib 的库。 密码算法库是一个强大完整的密码算法库,它是 OpenSSL 的基础部分,也是很值得一 般密码安全技术人员研究的部分,它实现了目前大部分主流的密码算法和标准。主要包括公 开密钥算法、对称加密算法、散列函数算法、X509 数字证书标准、PKCS12、PKCS7 等标 准。事实上,OpenSSL 的 SSL 协议部分和应用程序部分都是基于这个库开发的。目前,这 个库除了可以使用本身的缺省算法外,在 0.9.6 版本之后,还提供了 Engine 机制,用于将如 加密卡这样外部的加密算法实现集成到 OpenSSL 中。密码算法库在 Linux 编译后其库文件 名称为 libcrypto.a,在 Windows 下编译后其库文件为 libeay32.lib。 应用程序部分是 OpenSSL 最生动的部分,也是 OpenSSL 使用入门部分。该部分基于上述 的密码算法库和 SSL 协议库实现了很多实用和范例性的应用程序,覆盖了众多的密码学应 用。主要包括了各种算法的加密程序和各种类型密钥的产生程序(如 RSA、Md5、Enc 等等)、 证书签发和验证程序(如 Ca、X509、Crl 等)、SSL 连接测试程序(如 S_client 和 S_server 等)以及其它的标准应用程序(如 Pkcs12 和 Smime 等)。在某些时候,不需要做二次开发, 仅仅使用这些应用程序便能得到我们的应用要求,比如采用 Ca 程序就能基本上实现一个小 型的 CA 功能。这些应用程序同时也是很好的使用 OpenSSL 加密算法库和 SSL 协议库的优秀 例子,比如 Ca、Req 和 X509 程序就是使用 OpenSSL 的库开发一个 CA 中心服务器的优秀例子, 又如 S_client 和 S_server 程序就是利用 SSL 协议库建立 SSL 安全连接的优秀例子。对于初 学者来说,研读这些应用程序的源码通常是最好的入门途径。 1.5.3 OpenSSL 优缺点 除了 OpenSSL 之外,技术开发人员还有其它的一些密码算法库或 SSL 函数库可选。Wei Dai 写的 Crypto++就是著名的开放源代码算法库之一,该库使用 C++语言作为开发语言,由 于采用面向对象的 C++语言,对于初学者来说可能更容易理解和接受。但是该库仅仅实现了 一些常用的密码算法,而没有实现诸如 X509 标准和 SSL 协议,其功能仅仅是 OpenSSL 的 一个子集。此外,Microsoft 也提供了一个密码库 CryptoAPI,跟几乎大部分的 Microsoft 产 品一样,CryptoAPI 不是开放源代码的,并且,它只能在 Windows 平台使用,对于开发者来 说是一个黑匣子,很技术人员不喜欢这点,我也不喜欢。 与其它的一些同类型密码库相比,OpenSSL 具有以下优点: z 采用 C 语言开发,支持多种操作系统,可移植性好 —11— 《OpenSSL 与网络信息安全——基础、结构和指令》 中国 OpenSSL 专业论坛 王志海 版权所有 z 功能全面,支持大部分主流密码算法、相关标准协议和 SSL 协议 z 开放源代码,可信任,能够根据自己的需要进行修改,对技术人员有借鉴和研究 的价值 z 具备应用程序,既能直接使用,也可以方便进行二次开发 z 免费使用,能够用于商业和非商业目的 当然,OpenSSL 也有如下一些缺点: z 采用非面向对象的 C 语言开发,对于初学者来说有一定的困难,也不利于代码的 剥离 z 文档不全面,增加了使用的困难性 总的来说,OpenSSL 是一个非常优秀的软件包,很值得密码安全技术人员研究和使用, 这也是写本书的目的所在。 1.6 本书概要 本书是“OpenSSL 与网络信息安全”系列丛书的第一本,偏重于基础,是 OpenSSL 的 入门书籍,其章节安排基本是安照基本理论、应用理论到具体应用的顺序进行安排。 第一部分是密码学基础,包括第 2 章到第 6 章。该部分主要介绍了密码学的基本概念、 密码技术的基本实现、对称加密算法、公开密钥算法和单向散列函数算法等密码学知识。如 果读者对密码学已经有相当的了解,可以跳过这部分。 第二部分是公钥基础设施基础,包括第 7 章到第 9 章。该部分主要介绍公钥基础设施的 基本概念和内容、数字证书和 CA 以及 PKI 的应用等。同样,如果读者对公钥基础设施已经 了解,那么这部分也可以省略不看。 第三部分是 SSL 协议基础,包括第 10 章到第 12 章。该部分主要详细介绍了 SSL 协议。 对于 SSL 协议熟悉的读者,也可以跳过这一部分。 第四部分是 OpenSSL 结构,包括第 13 章到第 15 章。该部分介绍了 OpenSSL 的结构、 编译和安装方法以及其使用的基本概念。 第五部分是 OpenSSL 指令,包括第 16 到第 22 章。该部分详细介绍了 OpenSSL 的应用 程序指令的使用方法和各项参数的意义,是本书的主题之一。 1.7 推荐资料 由于 OpenSSL 是基于密码学和网络的基础上,所以需要比较多的基础知识,本书对这 些基础知识的介绍并不完备,所以向读者推荐一些参考资料,以便读者做更深入的学习和理 解。 1.7.1 推荐书籍 z 《计算机网络(第三版)》,清华大学出版社,Andrew S. Tanenbaum 著。该书是计 算机网络经典和集大成的教材,系统的阐述了计算机网络的原理、结构以及相关的 问题。 z 《应用密码学—协议、算法和 C 源程序》,机械工业出版社,Bruece Schneier 著。 该书是密码学的经典著作,对今年来密码学的研究成果做了全景式的概括。该书力 图从概念上解释密码学,抛开了繁琐的数学公式。 z 《密码编码学与网络安全:原理与实践(第二版)》,电子工业出版社,William Stallings 著。该书对密码学的基本理论做了系统的介绍,并详细介绍了密码学的应用。 z 《公钥基础设施(PKI)—实现和管理电子安全》,清华大学出版社,Andrew Nash 等 著。该书全面介绍了公钥基础设施的概念,并对其实现、应用和发展前景做了介绍。 1.7.2 推荐网络资源 z http://www.openssl.org,OpenSSL 官方网站,可以自由下载 OpenSSL 的最新版本和 —12— 《OpenSSL 与网络信息安全——基础、结构和指令》 中国 OpenSSL 专业论坛 王志海 版权所有 以前的各个版本,并有 FAQ 和其它 OpenSSL 相关网站的连接。 z http://www.openssl.cn,国内唯一的OpenSSL中文专业站点,也是本书的支持站点, 除了丰富的中文资料和例程下载之外,还有众多OpenSSL技术人员参与交流。 z http://www.google.com,强大的搜索引擎,你可以输入关键字如OpenSSL和PKI等查 找你需要的资料。 —13— 《OpenSSL 与网络信息安全——基础、结构和指令》 中国 OpenSSL 专业论坛 王志海 版权所有 第 13 章 OpenSSL 概述 王志海 13.1 OpenSSL背景 本节将对 OpenSSL 的背景作一个简要的介绍,并介绍一些其它类似的软件开发包,从 而让读者在对比中得出 OpenSSL 的特点。 13.1.1 OpenSSL 简介 前面我们介绍过众多的密码算法、公钥基础设施标准以及 SSL 协议,或许这些有趣的 功能会让你产生实现所有这些算法和标准的想法。果真如此,在对你表示敬佩的同时,我还 是忍不住提醒你:这是一个令人望而生畏的过程。这个工作不再是简单的读懂几本密码学专 著和协议文档那么简单,而是要理解所有这些算法、标准和协议文档的每一个细节,并用你 可能很熟悉的 C 语言字符一个一个去实现这些定义和过程。我不知道你将需要多少时间来 完成这项有趣而可怕的工作,但肯定不是一年两年的问题。我相信,上面的话肯定不会让你 绝望,事实上,自从你拿到本书开始,就不会对这样的话绝望,因为至少你知道有 OpenSSL 这个工具可以使你逃避这个可怕的工作。 我们首先应该感谢 Eric A. Young 和 Tim J. Hudson,他们自 1995 年开始编写后来具有巨 大影响的 OpenSSL 软件包,更令我们高兴的是,这是一个没有太多限制的开放源代码的软 件包,这使得我们可以利用这个软件包做很多事情。Eric A. Young 和 Tim J. Hudson 是加拿 大人,后来由于写 OpenSSL 功成名就之后就到大公司里赚大钱去了。1998 年,OpenSSL 项 目组接管了 OpenSSL 的开发工作,并推出了 OpenSSL 的 0.9.1 版,到目前为止,OpenSSL 的算法已经非常完善,对 SSL2.0、SSL3.0 以及 TLS1.0 都支持。OpenSSL 目前最新的版本 是 0.9.7b 版。 OpenSSL 采用 C 语言作为开发语言,这使得 OpenSSL 具有优秀的跨平台性能,这对于 广大技术人员来说是一件非常美妙的事情,可以在不同的平台使用同样熟悉的东西。 OpenSSL 支持 Linux、Windows、BSD、Mac、VMS 等平台,这使得 OpenSSL 具有广泛的 适用性。不过,对于目前新成长起来的 C++程序员,可能对于 C 语言的代码不是很习惯, 但习惯 C 语言总比使用 C++重新写一个跟 OpenSSL 相同功能的软件包轻松不少。 13.1.2 其它密码算法开发包 事实上,任何一个普通的密码学应用开发人员可能都不需要亲自写繁琐难懂的密码算法 和实现那些标准制定者们炮制出来的可怕标准,因为这个计算机世界里除了 OpenSSL,还 有很多可选择密码算法开发包。这些开发包有些是诸如 Microsoft 这种超级商家提供的,有 些则是由象 Eirc A. Young 这样的无私贡献者提供的。这些开发包功能和有缺点不尽相同, 下面我们对几个常见的做简单介绍。 我们首先应该想到的就是著名的 Microsoft 提供的密码算法库 CryptoAPI。CryptoAPI 当 ―1― 《OpenSSL 与网络信息安全——基础、结构和指令》 中国 OpenSSL 专业论坛 王志海 版权所有 前最新的版本是 CryptAPI2.0,包含了各种密码算法、密钥管理以及证书管理功能,功能相 当完善和强大。事实上,Windows 平台基于密码学的安全结构基本上是以 CryptoAPI 为基础 的,如支持 S
/
本文档为【《OpenSSL与网络信息安全——基础、结构和指令》】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索