一 前言  

    最近几日有几个证书技术CA/SSL问题一直很困扰我,证书的OU机构有什么用,我一直以为都是以subject标题匹配get HTTPS  拿到包头,经过浏览器和客户端两次握手之后认定该证书有效,然后以私密TCP的数据双向传输,但是几个同事一口同声说在微软OU是有用途的,但是具体什么用途又说不上来,年纪大了也懒得去争论,跟着SOP走就ok了。以前考CISSP的时候明明有教过证书的,所以自己抽空温习了一下SSL的证书。
  
二 名词解释 (好像所有文科考试都要有这个)

1 SSL (Secure Socket Layer) 
为Netscape所研发,用以保障在Internet上数据传输之安全,利用数据加密(Encryption)技术,可确保数据在网络上之传输过程中不会被截取。目前一般通用之规格为40 bit之安全标准,美国则已推出128 bit之更高安全标准,但限制出境。只要3.0版本以上之I.E.或Netscape浏览器即可支持SSL。最新版本的TLS 1.0是IETF(工程任务组)制定的一种新的协议,它建立在SSL 3.0协议规范之上,是SSL 3.0的后续版本。两者差别极小,可以理解为SSL 3.1。SSL位于可靠的面向连接的网络层协议和应用层协议之间的一种协议层。SSL通过互相认证、使用数字签名确保完整性、使用加密确保私密性,以实现客户端和服务器之间的安全通讯。可以这么理解,安全套 接层,就是用安全套把明文的TCP包头加密(中间16个字节),使得TCP包头不外露从而起到安全的作用。

SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。
SSL协议可分为两层: 
SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。 
SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。

SSL协议提供的服务主要有:
1)认证用户和服务器,确保数据发送到正确的客户机和服务器;
2)加密数据以防止数据中途被窃取;
3)维护数据的完整性,确保数据在传输过程中不被改变。
如果是考试,以上三行已经会考试考到~~~~~~~

  2 IETF
上面引用了IETF(www.ietf.org)的内容,不得不简单介绍一下IETF,它将SSL作了标准化,使得SSL不在由网景Netscape专属,即RFC2246,并将其称为TLS(Transport Layer Security),从技术上讲,TLS1.0与SSL3.0的差别非常微小。IETF是Internet工程任务组(Internet Engineering Task Force)的简写。IETF又叫互联网工程任务组,成立于1985年底,是全球互联网最具权威的技术标准化组织,主要任务是负责互联网相关技术规范的研发和制定,当前绝大多数国际互联网技术标准出自IETF。我以前在宝开软件Popcap的老大也在IETF中占有一席,她是负责IP NAT转换RFC标准制定,我就去问她好好上班义务去这个组织人家会给你钱么,她就很嘲笑我“Chinese Style”中国思维任何都要以钱为中心,难道中国的以RMB为中心的价值观世界都知道了?以后还会有DTLS protocol IETF RFC 5246 http://datatracker.ietf.org/wg/tls/charter/ , 不过看标准还是在草稿阶段。

3 TLS (Transport Layer Security Protocol)
有了SSL 就一定要说下TLS 。IETF RFC2246 http://www.ietf.org/rfc/rfc2246.txt 
安全传输层协议(TLS)用于在两个通信应用程序之间提供保密性和数据完整性。该协议由两层组成: TLS 记录协议(TLS Record)和 TLS 握手协议(TLS Handshake)。较低的层为 TLS 记录协议,位于某个可靠的传输协议(例如 TCP)上面。 
TLS 记录协议提供的连接安全性具有两个基本特性:  私有――对称加密用以数据加密(DES、RC4等)。对称加密所产生的密钥对每个连接都是唯一的,且此密钥基于另一个协议(如握手协议)协商。记录协议也可以不加密使用。
可靠――信息传输包括使用密钥的 MAC 进行信息完整性检查。安全哈希功能( SHA、MD5 等)用于 MAC 计算。记录协议在没有 MAC的情况下也能操作,但一般只能用于这种模式,即有另一个协议正在使用记录协议传输协商安全参数。      TLS记录协议用于封装各种高层协议。作为这种封装协议之一的握手协议允许服务器与客户机在应用程序协议传输和接收其第一个数据字节前彼此之间相互认证,协商加密算法和加密密钥。 
TLS 握手协议提供的连接安全具有三个基本属性:   可以使用非对称的,或公共密钥的密码术来认证对等方的身份。该认证是可选的,但至少需要一个结点方。共享加密密钥的协商是安全的。对偷窃者来说协商加密是难以获得的。此外经过认证过的连接不能获得加密,即使是进入连接中间的***者也不能。协商是可靠的。没有经过通信方成员的检测,任何***者都不能修改通信协商。TLS 的最大优势就在于:TLS 是独立于应用协议。高层协议可以透明地分布在 TLS 协议上面。然而, TLS 标准并没有规定应用程序如何在 TLS 上增加安全性;它把如何启动 TLS 握手协议以及如何解释交换的认证证书的决定权留给协议的设计者和实施者来判断。 
考试啦~~~~~~~~~~~,写到这里一定会有人问SSL和TLS的区别素神马,不要着急,下文会提到。
4在WAP的环境下,由于手机及手持设备的处理和存储能力有限,wap论坛(www.wapforum.org)在TLS的基础上做了WTLS协议(Wireless Transport Layer Security),以适应无线的特殊环境。 
  
5 https
HTTPS(Secure Hypertext Transfer Protocol)安全超文本传输协议 它是由Netscape开发并内置于其浏览器中(怎么又是它?)用于对数据进行压缩和解压操作,并返回网络上传送回的结果。HTTPS实际上应用了Netscape的完全套接字层(SSL)作为HTTP应用层的子层。(HTTPS使用端口443,而不是象HTTP那样使用端口80来和TCP/IP进行通信。)SSL使用40位关键字作为RC4流加密算法,这对于商业信息的加密是合适的。HTTPS和SSL支持使用X.509数字认证,如果需要的话用户可以确认发送者是谁。 https是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,https的安全基础是SSL,因此加密的详细内容请看SSL。它是一个URIscheme(抽象标识符体系),句法类同http:体系。用于安全的HTTP数据传输。https:URL表明它使用了HTTP,但HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间)。这个系统的最初研发由网景公司进行,提供了身份验证与加密通讯方法,现在它被广泛用于万维网上安全敏感的通讯,例如交易支付方面。 

6 X.509数字认证
数字证书就是互联网通讯中标志通讯各方身份信息的一系列数据,提供了一种在Internet上验证您身份的方式,其作用类似于司机的驾驶执照或日常生活中的×××。它是由一个由权威机构-----CA机构,又称为证书授权(Certificate Authorit y)中心发行的,人们可以在网上用它来识别对方的身份。数字证书是一个经证书授权 中心数字签名的包含公开密钥拥有者信息以及公开密钥的文件。最简单的证书包含一 个公开密钥、名称以及证书授权中心的数字签名。一般情况下证书中还包括密钥的有 效时间,发证机关(证书授权中心)的名称,该证书的序列号等信息,证书的格式遵循 ITUT X.509国际标准。 

版本号:用来区分X.509的不同版本号
序列号;由CA给予每一个证书的分配唯一的数字型编号,当证书被取消时,实际上是将此证书的序列号放入由CA签发的CRL中;这也是序列号唯一的原因。

签名算法标识符:   用来指定用CA签发证书时所使用的签名算法。算法标识符用来指定CA签发证书时所使用的公开密钥算法和HASH算法,须向国际指明标准组织(如ISO)注册。

认证机构:   即发出该证书的机构唯一的CA的x.500名字;
有效期限:证书有效的时间包括两个日期:证书开始生效期和证书失效的日期和时间。在所指定的这两个时间之间有效

主题信息:   证书持有人的姓名、服务处所等信息;

认证机构的数字签名:   以确保这个证书在发放之后没有被撰改过;

公钥信息:   包括被证明有效的公钥值和加上使用这个公钥的方法名称;
7   X.509的扩展(V3)

  X.509标准第三版在V2的基础上进行了扩展,V3引进一种机制。这种机制允许通过标准化和类的方式将证书进行扩展包括额外的信息,从而适应下面的一些要求一: 

  (1)一个证书主体可以有多个证书;

  (2)证书主体可以被多个组织或社团的其他用户识别;

  (3)可按特定的应用名(不是X.500名)识别用户,如将公钥同EMAIL地址联系起来;

  (4)在不同证书政策和实用下会发放不同的证书,这就要求公钥用户要信赖证书;证书并不限于这些标准扩展,任何人都可以向适当的权利机构注册一种扩展。将来会有更多的适于应用的扩展列入标准扩展集中。值得注意的是这种扩展机制应该是完全可以继承的。 

  每一种扩展包括三个域:类型、可否缺省、值类型字段定义了扩展值字段中的数据类型。这个类型可以是简单的字符串,数值,日期,图片或一个复杂的数据类型。为便于交互,所有的数据类型都应该在国际知名组织进行注册。

  是否可缺省字段是一比特标识位。当一扩展标识为不可缺省时,说明相应的扩展值非常重要,应用程序不能忽略这个信息。如果使用一特殊证书的应用程序不能处理该字段的内容,就应该拒绝此证书。 

扩展值字段包含了这个扩展实际的数据。 

公开密钥证书的标准扩展可以分为以下几组: 

  ? 密钥和政策信息,包括机构密钥识别符、主体密钥识别符、密钥用途(如数字签字,不可否认性、密钥加密、数据加密、密钥协商、证书签字、CRL签字等),密钥使用期限等; 

  ? 主体和发证人属性,包括主体代用名、发证者代用名、主体检索属性等; 

  ? 证书通路约束,包括基本约束,指明是否可以做证书机构。 

  ? 与CRL有关的补充; 

X.509是国际标准化组织CCITT建议作为X.500目录检索的一部分提供安全目录检索服务。一份X.509证书是一些标准字段的集合,这些字段包含有关用户或设备及其相应公钥的信息一种非常通用的证书格式,所有的证书都符合X.509 国际标准。目前X.509有不同的版本,例如 X.509 V2和x.509 v3都是目前比较新的版本,但是都在原有版本基础上进行功能的扩充,其中每一版本必须包含下列信息:

  (1) 用来区分X.509的不同版本号既版本号

  (2) 由CA给予每一个证书的分配的编号即序列号;

  (3) 用于产生证书所用的方法以及一切参数即签名算法

  (4) CA的x.500名字即发出该证书的认证机构

  (5) 证书有效的时间包括两个日期,在所指定的两个时间之 间有效即有效期限

  (6) 证书持有人的姓名、服务处所等信息即主题信息

  (7) 认证机构的数字签名

  (8) 被证明的公钥值,加上使用这个公钥的方法名称即公钥信息

* PKI (Public-Key Infrastructure) 公钥体系基础框架。

  * PKIX (Public-Key Infrastructure Using X.509)使用X.509的公钥体系基础框架。

  * X.500 由ISO和ITU提出的用于为大型网络提供目录服务的标准体系。

  * X.509 为X.500提供验证(Authenticating)体系的标准。

  * PKCS(Public Key Cryptography Standards)公钥加密标准,为PKI提供一套完善的标准体系。 

  * 对于任何基于公钥体系的安全应用,必须确立其PKI。而电子签证机关(CA)是PKI中的一个关键的组成部分,它主要涉及两方面的内容,即公钥证书的发放和公钥证书的有效性证明。在PKIX中,CA遵循  X.509标准规范。

  * X.509最早的版本X.509v1是在1988年提出的,到现在已升级到X.509v3,现将其涉及到的主要内容以及与前版本的比较列于下表。

   X.509 PKI国际标准更新版本对照表

   X.509 PKI 主要特性

  X.509 v1 & 2 X.509 v3

证书信息 只有X.500 实体名,包括CA、证主(subject)名,证主公钥及其有效期。 充分扩展,可包含任何信息。

  CA 规范 CA体系鼓励带交叉的层状树型结构,无信任限制规范。 CA体系鼓励带交叉的层状树型结构,有信任限制规范。

  CA "证主 " 用户 CA、证主、用户在概念上严格区分

  CA "证主" 用户信任关系 认为每个用户至少信任一个CA。CA无法操纵与其它CA、证主及用户间的信任关系。 认为每个用户至少信任一个CA。CA可以规范与其它CA及证主间的信任关系。

证书有效性验证方式 离线方式,通过检查证书有效期及是否出现在最近的CRL(证书吊销表)上。 支持离线与在线方式。

  证书吊销方法 简单CRL。 复杂的CRL,通过功能扩展支持在线方式。

证书形式特点 身份形式的证书。 主要还是身份形式的证书,但支持信任委托形式的证书。 

匿名性 匿名程度依赖于 X.500 条目的匿名程度。 扩展功能支持彻底的匿名服务。

  X.509证书格式 

  X.509是另一种非常通用的证书格式。所有的证书都符合ITU-T X.509国际标准;因此(理论上)为一种应用创建的证书可以用于任何其他符合X.509标准的应用。但实际上,不同的公司对X.509证书进行了不同的扩展,不是所有的证书都彼此兼容。在一份证书中,必须证明公钥及其所有者的姓名是一致的。对PGP证书来说,任何人都可以扮演认证者的角色。对X.509证书来说,认证者总是 CA或由CA指定的人(其实PGP证书也完全支持使用CA来确认证书的体系结构),一份X.509证书是一些标准字段的集合,这些字段包含有关用户或设备及其相应公钥的信息。X.509标准定义了证书中应该包含哪些信息,并描述了这些信息是如何编码的(即数据格式),所有的X.509证书包含以下数据:

  <>X.509版本号:指出该证书使用了哪种版本的X.509标准,版本号会影响证书中的一些特定信息。目前的版本是3。 

  <>证书持有人的公钥:包括证书持有人的公钥,算法(指明密钥属于哪种密码系统)的标示符和其他相关的密钥参数。

  <>证书的序列号:创建证书的实体(组织或个人)有责任为该证书指定一个独一无二的序列号,以区别于该实体发布的其他证书。序列号信息有许多用途;比如当一份证书被回收以后,它的序列号就被放入证书回收列表(CRL)之中。

  <>证书持有人唯一的标示符:(或称DN-distinguished name)这个名字在 Internet上应该是唯一的。DN由许多部分组成,看起来象这样: 

  CN=Bob Allen, OU=Total Network Security Division, 

  O=Network Associates, Inc., C=US 

这些信息指出该科目的通用名,组织单位,组织和国家 

  <>证书的有效期:证书起始日期和时间以及终止日期和时间;指明证书何时失效。 

  <>证书发布者的唯一名字:这是签发该证书的实体的唯一名字。通常是CA。.使用该证书意味着信任签发证书的实体。(注意:在某些情况下,比如根或顶级CA证书,发布者自己签发证书) 

  <>发布者的数字签名:这是使用发布者私钥生成的签名。 

  <>签名算法的标示符:指明CA签署证书所使用的算法。 

  X.509证书和PGP证书之间有许多不同,最明显的如下所述: 

  <>用户可以创建自己的PGP证书,但是必须向CA请求才能得到一份X.509证书。 

  <>X.509证书天生只支持密钥拥有者的一个名字。

  <>X.509证书只支持证明密钥合法性的一个数字签名。

要获得一份X.509证书,必须请求CA发给你证书。用户提供自己的公钥,证明自己拥有相应的私钥,并提供有关自己的某些特定信息。然后在这些信息上数字签名,并将整个数据包(称为证书请求)发给CA。CA做一些努力来验证用户提供的信息是正确的,然后就生成证书并返回给用户。 

一份X.509证书看起来很象一份带公钥的标准书面证书(类似于基础急救班的结业证书)。证书中包含名字和一些有关的个人信息,加上颁发证书人的签名。


8 X.500协议

  在X.500协议中,本地的X.500客户程序又叫名录用户代理(DUA)。得到X.500 客户程序最简便的方法是通过FTP从公共软件库中获得,所获得的X.500客户程序一般都基于三种方式:基于命令行的用户界面;基于菜单驱动的用户界面;基于 X-Windows系统的用户界面。
  其中命令行用户界面的注册名为:de、dish、fred;
  菜单驱动用户界面的注册名为:sd(以前为:widget);
  X-Windows系统用户界面的注册名为:xdi、xlookup(xlu)、pool。
  这些名录用户代理程序所提供的功能也不一样,有的只提供基本查询功能,有的则支持全部X.500的功能。