1、 SSL 协议分析2906303015 马德元摘要:SSL 是一种在客户端和服务器端之间建立安全通道的协议。SSL 一经提出,就在 Internet 上得到广泛的应用。SSL 最常用来保护 Web 的安全。为了保护存有敏感信息 Web 的服务器的安全,消除用户在 Internet 上数据传输的安全顾虑。Open SSL 是一个支持 SSL 认证的服务器它是一个源码开放的自由软件,支持多种操作系统。Open SSL 软件的目的是实现一个完整的、健壮的、商业级的开放源码工具,通过强大的加密算法来实现建立在传输层之上的安全性。Open SSL 包含一套 SSL 协议的完整接口,应用程序应用它们可以很
2、方便的建立起安全套接层,进而能够通过网络进行安全的数据传输。SSL is a client and server is established between the security channel protocol. SSL is put forward, it has been widely used in Internet. SSL most commonly used to protect the security of Web. In order to protect sensitive information being Web server security, remove u
3、sers in Internet data transmission security concerns.Open SSL is a SSL authentication server. It is an open source free software, support for multiple operating system. Open SSL software is designed to achieve a complete, robust, commercial open source tools, through a strong encryption algorithm to
4、 achieve the established in the transport layer security. Open SSL contains a set of SSL protocol complete interface, applications and they can be very convenient to establish secure sockets layer, and then through the network secure data transmission .SSL 协议概述SSL 是 Secure socket Layer 英文缩写,它的中文意思是安
5、全套接层协议,指使用公钥和私钥技术组合的安全网络通讯协议。SSL 协议是网景公司(Netscape)推出的基于 WEB 应用的安全协议,SSL 协议指定了一种在应用程序协议(如 Http、Telenet、NMTP 和 FTP 等)和 TCP/IP 协议之间提供数据安全性分层的机制,它为 TCP/IP 连接提供数据加密、服务器认证、消息完整性以及可选的客户机认证,主要用于提高应用程序之间数据的安全性,对传送的数据进行加密和隐藏,确保数据在传送中不被改变,即确保数据的完整性。SSL 以对称密码技术和公开密码技术相结合,可以实现如下三个通信目标:(1)秘密性: SSL 客户机和服务器之间传送的数据都
6、经过了加密处理,网络中的非法窃听者所获取的信息都将是无意义的密文信息。(2)完整性: SSL 利用密码算法和散列(HASH)函数,通过对传输信息特征值的提取来保证信息的完整性,确保要传输的信息全部到达目的地,可以避免服务器和客户机之间的信息受到破坏。(3)认证性:利用证书技术和可信的第三方认证,可以让客户机和服务器相互识别对方的身份。为了验证证书持有者是其合法用户(而不是冒名用户), SSL 要求证书持有者在握手时相互交换数字证书,通过验证来保证对方身份的合法性。SSL 协议的体系结构SSL 协议位于 TCP/IP 协议模型的网络层和应用层之间,使用 TCP 来提供一种可靠的端到端的安全服务,
7、它是客户/服务器应用之间的通信不被攻击窃听,并且始终对服务器进行认证,还可以选择对客户进行认证。SSL 协议在应用层通信之前就已经完成加密算法、通信密钥的协商以及服务器认证工作,在此之后,应用层协议所传送的数据都被加密。SSL 实际上是共同工作的两层协议组成,如图 1 所示。从体系结构图可以看出 SSL 安全协议实际是 SSL握手协议、SSL 修改密文协议、SSL 警告协议和 SSL 记录协议组成的一个协议族。握手协议修改密文协议 报警协议SSL 记录协议TCPIP图 1 SSL 体系结构SSL 记录协议为 SSL 连接提供了两种服务:一是机密性,二是消息完整性。为了实现这两种服务, SSL
8、记录协议对接收的数据和被接收的数据工作过程是如何实现的呢? SSL 记录协议接收传输的应用报文,将数据分片成可管理的块,进行数据压缩(可选),应用 MAC,接着利用IDEA、DES、3DES 或其他加密算法进行数据加密,最后增加由内容类型、主要版本、次要版本和压缩长度组成的首部。被接收的数据刚好与接收数据工作过程相反,依次被解密、验证、解压缩和重新装配,然后交给更高级用户。SSL 修改密文协议是使用 SSL 记录协议服务的 SSL 高层协议的 3 个特定协议之一,也是其中最简单的一个。协议由单个消息组成,该消息只包含一个值为 1 的单个字节。该消息的唯一作用就是使未决状态拷贝为当前状态,更新用
9、于当前连接的密码组。为了保障 SSL 传输过程的安全性,双方应该每隔一段时间改变加密规范。SSL 告警协议是用来为对等实体传递 SSL 的相关警告。如果在通信过程中某一方发现任何异常,就需要给对方发送一条警示消息通告。警示消息有两种:一种是 Fatal 错误,如传递数据过程中,发现错误的 MAC,双方就需要立即中断会话,同时消除自己缓冲区相应的会话记录;第二种是 Warning 消息,这种情况,通信双方通常都只是记录日志,而对通信过程不造成任何影响。SSL 握手协议可以使得服务器和客户能够相互鉴别对方,协商具体的加密算法和 MAC 算法以及保密密钥,用来保护在 SSL 记录中发送的数据。SSL
10、 握手协议允许通信实体在交换应用数据之前协商密钥的算法、加密密钥和对客户端进行认证(可选)的协议,为下一步记录协议要使用的密钥信息进行协商,使客户端和服务器建立并保持安全通信的状态信息。SSL 握手协议是在任何应用程序数据传输之前使用的。SSL 握手协议包含四个阶段:第一个阶段建立安全能力;第二个阶段服务器鉴别和密钥交换;第三个阶段客户鉴别和密钥交换;第四个阶段完成握手协议。SSL 协议的实现基于 OpenSSL 的程序可以被分为两个部分:客户机和服务器,使用 SSL 协议使通信双方可以相互验证对方身份的真实性,并且能够保证数据的完整性和机密性。建立 SSL 通信的过程如图 2 所示。图 2
11、SSL 通信过程SSL 通信模型采用标准的 C/S 结构,除了在 TCP 层上进行传输之外,与普通的网络通信协议没有太大的区别,基于 OpenSSL 的程序都要遵循以下几个步骤:(1) OpenSSL 初始化在使用 OpenSSL 之前,必须进行相应的协议初始化工作,这可以通过下面的函数实现:int SSL_library_int(void);(2) 选择会话协议在利用 OpenSSL 开始 SSL 会话之前,需要为客户端和服务器制定本次会话采用的协议,目前能够使用的协议包括 TLSv1.0、SSLv2、SSLv3、SSLv2/v3。需要注意的是,客户端和服务器必须使用相互兼容的协议,否则 S
12、SL 会话将无法正常进行。(3) 创建会话环境在 OpenSSL 中创建的 SSL 会话环境称为 CTX,使用不同的协议会话,其环境也不一样的。申请 SSL 会话环境的 OpenSSL 函数是:SSL_CTX *SSL_CTX_new(SSL_METHOD * method);当 SSL 会话环境申请成功后,还要根据实际的需要设置 CTX 的属性,通常的设置是指定SSL 握手阶段证书的验证方式和加载自己的证书。制定证书验证方式的函数是:int SSL_CTX_set_verify(SSL_CTX *ctx,int mode,int(*verify_callback),int(X509_STOR
13、E_CTX *);为 SSL 会话环境加载 CA 证书的函数是:SSL_CTX_load_verify_location(SSL_CTX *ctx,const char *Cafile,const char *Capath);为 SSL 会话加载用户证书的函数是:SSL_CTX_use_certificate_file(SSL_CTX *ctx, const char *file,int type);为 SSL 会话加载用户私钥的函数是:SSL_CTX_use_PrivateKey_file(SSL_CTX *ctx,const char* file,int type);在将证书和私钥加载到
14、SSL 会话环境之后,就可以调用下面的函数来验证私钥和证书是否相符:int SSL_CTX_check_private_key(SSL_CTX *ctx);(4) 建立 SSL 套接字SSL 套接字是建立在普通的 TCP 套接字基础之上,在建立 SSL 套接字时可以使用下面的一些函数:SSL *SSl_new(SSL_CTX *ctx); /申请一个 SSL 套接字int SSL_set_fd(SSL *ssl,int fd);) /绑定读写套接字int SSL_set_rfd(SSL *ssl,int fd); /绑定只读套接字int SSL_set_wfd(SSL *ssl,int fd)
15、;/绑定只写套接字(5) 完成 SSL 握手在成功创建 SSL 套接字后,客户端应使用函数 SSL_connect( )替代传统的函数 connect( )来完成握手过程:int SSL_connect(SSL *ssl);而对服务器来讲,则应使用函数 SSL_ accept ( )替代传统的函数 accept ( )来完成握手过程:int SSL_accept(SSL *ssl);握手过程完成之后,通常需要询问通信双方的证书信息,以便进行相应的验证,这可以借助于 下面的函数来实现:X509 *SSL_get_peer_certificate(SSL *ssl);该函数可以从 SSL 套接字中
16、提取对方的证书信息,这些信息已经被 SSL 验证过了。X509_NAME *X509_get_subject_name(X509 *a);该函数得到证书所用者的名字。(6) 进行数据传输当 SSL 握手完成之后,就可以进行安全的数据传输了,在数据传输阶段,需要使用SSL_read( ) 和 SSL_write( )来替代传统的 read( )和 write( )函数,来完成对套接字的读写操作:int SSL_read(SSL *ssl,void *buf,int num);int SSL_write(SSL *ssl,const void *buf,int num);(7) 结束 SSL 通信
17、当客户端和服务器之间的数据通信完成之后,调用下面的函数来释放已经申请的 SSL 资源:int SSL_shutdown(SSL *ssl); /关闭 SSL 套接字void SSl_free(SSL *ssl);/释放 SSL 套接字void SSL_CTX_free(SSL_CTX *ctx); /释放 SSL 会话环境SSL 协议功能:SSL 协议提供的服务主要有:1)认证用户和服务器,确保数据发送到正确的客户机和服务器;2)加密数据以防止数据中途被窃取;3)维护数据的完整性,确保数据在传输过程中不被改变。SSL 协议优缺点:由 于 安 全 套 接 字 协 议 ( SLL) 的 成 本 低
18、 、 速 度 快 、 使 用 简 单 , 对 现 在 网 络 系 统 不 需要 进 行 大 的 修 改 , 因 而 目 前 取 得 了 广 泛 的 应 用 。 但 是 SSL 协 议 也 有 缺 点 : 首 先 , 客 户的 信 息 可 能 先 到 商 家 , 被 商 家 阅 读 , 这 样 , 客 户 资 料 的 安 全 性 就 得 不 到 保 证 ; 其 次 ,SSL 只 能 保 证 资 料 信 息 传 递 的 安 全 , 而 传 递 过 程 是 否 有 人 截 取 就 无 法 保 证 了 。 所 以 ,SSL 并 没 有 实 现 电 子 支 付 所 要 求 的 保 密 性 、 完 整 性
19、 , 而 且 多 方 互 相 认 证 也 是 很 困 难 的 。SSL 协 议 范 围 :通过原理的介绍,我们可以知道,利用 SSL 协议可以有效加强我们的信息传输保密性。利用这一点,我们就可以将其应用到 WEB 服务器的安全访问上,邮件的安全传输上等。 识别一个网站是否启用了 SSL 安全协议最简单最直接的办法就是看它的网址信息,通常的我们看到的都是以 http:/开头的网址,而采用了该安全协议后,网址的开头是:https:/,多了一个 S。 对于网站经营者来说,提升网站知名度,增加网站访问量意味着更多的商机。但不时出现的欺诈钓鱼网站总给人以防不胜防的感觉。如何更好的发挥 SSL 证书的作用
20、,提升网站的可信度,降低欺诈钓鱼的风险?网站可以采用以下几种方法。 在敏感交易界面,高端 SSL 证书对于网站来说,并不是说所有的页面均需部署 SSL 证书。网站只需在一些需要提交关键数据的交易页面提供 SSL 证书安全保护。但关键页面的 SSL 证书,一定要选择经过身份验证、拥有良好品牌信誉的 SSL 证书,否则客户将无法对网站身份进行有效判断。 网站提供识别欺诈钓鱼网站的方法鉴于国内客户网站安全知识匮乏的现状,网站在部署 SSL 证书后,最佳的方式是在交易页面同时以文字或图片的方式告知客户 SSL 证书功能及识别欺诈钓鱼网站的简单方法,从而提升网民继续完成交易的信心。 放置 VeriSig
21、n 信任签章为了让更多的客户了解网站采用了 SSL 证书安全技术,网站安全值得信赖。拥有VeriSign SSL 证书的网站可以各页面或交易页面的显著位置放置 VeriSign 信任签章(VeriSign Trust Seal) 。作为世界范围内最被认可的安全标记,其应对欺诈钓鱼方面的作用显著。VeriSign SSL 证书客户,不需要支付任何额外费用。 升级绿色地址栏绿色地址栏技术是 VeriSign 扩展验证(EV)SSL 证书特有功能,是目前反击钓鱼网站最为先进的武器,没有客户不会对地址栏颜色的变化无动于衷。对于拥有强烈安全需求、客户群庞大、品牌知名度极高的网站,绿色地址栏一定是最好的选
22、择。SSL 的安全漏洞:虽然一个网站可能使用了 SSL 安全技术,但这并不是说在该网站中正在输入和以后输入的数据也是安全的。所有人都应该意识到 SSL 提供的仅仅是电子商务整体安全中的一小部份解决方案。SSL 在网站上的使用可能会造成管理员对其站点安全性的某些错觉。使用了 SSL 的网站所可能受到的攻击和其它服务器并无任何区别,同样应该留意各方面的安全性。简言之,加密和数字证书,SSL 的主要组成,从来都无法保护服务器?它们仅仅可以保护该服务器所收发的数据。 SSL 常见安全问题下面三种:1 、攻击证书类似 Verisign 之类的公共 CA 机构并不总是可靠的,系统管理员经常犯的错误是过于信
23、任 Verisign 等的公共 CA 机构。例如,如果 Verisign 发放一个证书说我是“ 某某某”,系统管理员很可能就会相信“ 我是某某某”。但是,对于用户的证书,公共 CA 机构可能不象对网站数字证书那样重视和关心其准确性。例如,Verisign 发放了一个“keyman“ 组织的证书,而我是其中一员”JACK“ 。当一个网站要求认证用户身份时,我们提交了”JACK“ 的证书。你可能会对其返回的结果大吃一惊的。更为严重的是,由于微软公司的 IIS 服务器提供了” 客户端证书映射 “(Client Certificate BBS.bitsCN.com 网管论坛Mapping )功能,用于
24、将客户端提交证书中的名字映射到 NT 系统的用户帐号,在这种情况下我们就能够获得该主机的系统管理员特权!如果黑客不能利用上面的非法的证书突破服务器,他们可以尝试暴力攻击(brute-force attack)。虽然暴力攻击证书比暴力攻击口令更为困难,但仍然是一种攻击方法。要暴力攻击客户端认证,黑客编辑一个可能的用户名字列表,然后为每一个名字向CA 机构申请证书。每一个证书都用于尝试获取访问权限。用户名的选择越好,其中一个证书被认可的可能性就越高。暴力攻击证书的方便之处在于它仅需要猜测一个有效的用户名,而不是猜测用户名和口令。2 、窃取证书除上面的方法外,黑客还可能窃取有效的证书及相应的私有密钥
25、。最简单的方法是利用特洛伊木马。这种攻击几乎可使客户端证书形同虚设。它攻击的是证书的一个根本性弱点:私有密钥?整个安全系统的核心?经常保存在不安全的地方。对付这些攻击的唯一有效方法或许是将证书保存到智能卡或令牌之类的设备中。3 、安全盲点系统管理员没办法使用现有的安全漏洞扫描(vulnerability scanners)或网络入侵侦测系统(intrusion detection systems ,IDS ),来审查或监控网络上的 SSL 交易。网络入侵侦测系统是通过监测网络传输来找寻没有经过认证的活动。任何符合已知的攻击模式或者并未经过政策上授权的网络活动都被标起来以供系统管理者检视。而要让
26、 IDS 能够发生作用, IDS 必须能够检视所有的网络流量信息,但是 SSL 的加密技术却使得通过 http 传输的信息无法让 IDS 辨认。再者,虽然我们可以用最新的安全扫描软件审查一般的网页服务器来寻找已知的安全盲点,这种扫描软件并不会检查经过 SSL 保护的服务器。受到 SSL 保护的网页服务器的确拥有与一般服务器同样的安全盲点,可是也许是因为建立 SSL 连结所需要的时间以及困难 度,安全漏洞扫描软件并不会审查受到 SSL 保护的网页服务器。没有网络监测系统再加上没有安全漏洞审查,使得最重要的服务器反而成为受到最少防护的服务器。总的来说 SSL 仍然不失为一套全面完善的安全策略中有效
27、的组成元素。然而,与网络安全的其它工具软件一样,仅使用单一的防护软件都是无效的。对 SSL 的过高评价有可能带来安全风险。它仅是网络安全工具的一种,必须和其它网络安全工 具紧密结合,方能构造出全面、完善、安全可靠的网络。最后有两件重要的事情是你必须牢记在心的,首先,SSL 并不能够防护你的网站安全。它仅仅防护使用者的网页服务器以及目标网站之间的点对点数据链路,网页服务器跟后端的网页应用软件,仍旧会受到跟一般没有 SSL 防护的网站同样的攻击威胁;第二点,虽然 SSL 会使网络黑客很难用目前已知的攻击模式直接攻击 SSL 防护网站,不过,这些防卫仍旧是有可能用诸如 SSL proxy 等工具来加以突破,然而,相同的技术却也可以被用来监视以及审查系统的安全漏洞。结束语SSL 协议采用数字证书进行双端实体认证,用非对称加密算法进行密钥协商,用对称加密算法将数据加密后进行传输以保证数据的保密性,并且通过计算数字摘要来验证数据在传输过程中是否被篡改和伪造,从而为敏感数据在 Internet 上的传输提供了一种安全保障手段。OpenSSL 是一个开放源代码的 SSL 协议的产品实现,它采用 C 语言作为开发语言,具备了跨系统的性能。调用 OpenSSL 的函数就可以实现一个 SSL 加密的安全数据传输通道,从而保护客户端和服务器之间数据的安全。