2.2 理解服务器证书(CA)
2.2.1 X.509协议简介
SSL采用的是X.509协议,由上而下金字塔式的凭证制度(如图2-3所示)。在X.509协议中,每一个合格的凭证上,都会有一个签名。最下层的凭证上,会有一个认证中心(CA)的签名,表示这个认证中心(CA)检查过,确认所有者数据无误。中间的认证中心(CA)上,也会有管辖它的最高层认证中心(root CA)的签名,表示最高层认证中心授权给它,可以签发别人的凭证。只有最高层认证中心上,因为它已经是最大,没有上层可以给它签名了,所以只好自己签自己,凭证上的签名是自己签的。X.509协议用于给大型计算机网络提供目录服务,X.509提供了一种用于认证X.509服务的PKI结构,两者(X.500标准和X.509标准)都属于ISO和ITU提出的X系列国际标准。目前,有许多公司发展了基于X.509的产品,例如Visa、MasterCard、Netscape,而且基于该标准的Internet和Intranet产品越来越多。X.509是目前唯一的已经实施的PKI系统。X.509 V3是目前的最新版本,在原有版本的基础上扩充了许多功能,目前电子商务的安全电子交易(SET)协议也采用X.509 V3。
图2-3 基于X.509协议的认证结构图
2.2.2 金字塔结构的优缺点
(1)优点
在无限宽广的网际网路上,我们根本不知道会碰到什么样的网站,所以根本也无从确认每一个收到的Public Key有没有问题,是不是真的是这家公司的网站,我们是不是真的是跟这家公司打交道。在X.509标准下,只要我们预先认得几家可靠的最高层认证中心就好了。碰到不认识的Public Key时,只要一层一层往上追溯,如果最后追溯得到一个我们认得的可靠的最高层认证中心,那这个Public Key就没有问题。这样的做法,简化了无限宽广的网际网路上,确认彼此身份的困难性。
(2)缺点
因为X.509是金字塔结构,最高层认证中心(root CA)手中握有整个网际网路信任关系的关键,权力太大了。庞大的权力,伴随着的是庞大的利益。跟认证中心打过交道(如VeriSign、HiTrust网际威信)的都知道,申请签发SSL凭证非常贵,一年年费要好几万,普通人或中小企业,需要SSL网站加密的时候,根本就负担不起。而金字塔顶层的最高层认证中心是垄断事业,数目很少,不会有什么竞争,所以大型的最高层认证中心姿态都很高,年费一直降不下来。但若不靠这些最高层认证中心,自己来发证,程序没有内建我们自制的认证中心,连到SSL网站上,一定会出现告警。
2.2.3 相关名词解释
(1)数字签名
数字签名是用Private Key针对某一段数据用Digest Hash算法(如SHA1)做出来的Digest摘要码。只要原来的数据有所不同,演算出来的Digest摘要码就会跟着变动。日后收到这个Public Key的人,只要检查上面认证中心的签名,就可以知道这个代码和它上面所载的所有人数据相不相符。也就知道连接的服务器,是不是真正的Web服务器。
(2)Private Key(私钥)
公钥算法中使用的加密密钥对的安全部分。私钥通常用于解密会话密钥、对数据进行数字签名或解密已使用相应公钥加密的数据。
(3)Public Key(公钥)
公钥算法中使用的加密密钥对的非安全部分。公钥通常用于加密会话密钥、验证数字签名或加密可使用相应私钥解密的数据。
(4)凭证
凭证的英文是Certificate,附着所有人(Owner)的数据(公司名称、服务器名称、个人真实姓名、电子邮件E-mail、通信地址等数据),后面加上数字签名的Public Key。凭证上会附有几个数字签名,代表这些签名的人,用来确认这个Public Key的所有人,和凭证上所载的数据相符,没有造假。在X.509协议中,最下层每一个合格的凭证(Certificate)上,会有一个认证中心(CA)的签名,表示这个认证中心(CA)检查过,确认凭证上的所有者数据无误。当程序碰到没见过的凭证时,只要检查凭证上认证中心(CA)的签名无误,即代表这个认证中心(CA)核查过这个凭证(Certificate),凭证上的资料无误。
(5)认证中心
认证中心的英文是CA,是Certificate Authority的缩写。认证中心是X.509协议的一环。认证中心也是一种凭证,上面附有认证中心本身的资料,但不是用来加解密,而是用来签发凭证,证明凭证所有人和凭证上所载的数据无误。每一个合格的认证中心(CA)上,会有一个管辖它的最高层认证中心(root CA)的签名,表示最高层认证中心授权给它,可以签发别人的凭证。当程序碰到没见过的凭证,凭证上签名的认证中心(CA)也没见过时,只要检查认证中心上附的最高层认证中心(root CA)的签名无误,即认为这个认证中心(CA)具有签发凭证(Certificate)的资格。所以这个认证中心(CA)签发的凭证(Certificate)有效,凭证上的资料也没有问题。
一份数字证书包括了公钥、个人、服务器或者其他机构的身份信息(称之为主题),证书的身份实体由可以识别的名字字段组成,如表2-1所示。
表2-1 可以识别的名字字段
(6)最高层认证中心
最高层认证中心的英文是root CA,也称为顶级CA。最高层认证中心是X.509协议的一环。最高层认证中心也是认证中心(CA),和一般认证中心的差别在于,它不会直接用来签发凭证,而是授权给一些中间的认证中心,让这些中间的认证中心来签发凭证。最高层认证中心,因为已经拥有最高权限,没有上层可以给它签名了,所以凭证上的是自己的签名,不是别人的签名。这样就产生一个问题:最高一级的证书机构没有授予者,那么谁为它的证书作担保呢?仅在这种情况下,此证书是“自签名的”,即证书的授予者和主题中的一样,所以,必须对自签名的证书倍加注意。顶级机构广泛发布的公共密钥可以减小信任这个密钥所带来的风险——这显然比其他某个人发布密钥并宣称他是证书机构要安全一些。浏览器被默认地配置为信任的证书机构。
许多公司是专业证书机构,如Thawte(http://www.thawte.com/)和VeriSign(http://www.verisign.com/),它们提供如下服务:
① 验证证书的申请;
② 处理证书的申请;
③ 授予和管理证书。
自己建立一个证书机构也是可能的,虽然在Internet环境中有风险,但在验证个体或服务器较容易的Intranet环境中,会很有用。如果程序被加进一些不可靠的最高层认证中心,接下来碰到它签的凭证,都会有问题,整个程序的安全都会被破坏。所以在X.509协议下,SSL程序一定要好好保护最高层认证中心,一定要再三确认,不可以随便让人手动加进最高层认证中心。