2024年3月9日发(作者:)

OpenSSL

中文手册

之一

OpenSSL

简介-证书

2011-05-13 11:52 44人阅读 评论(0) 收藏 举报

证书就是数字化的文件,里面有一个实体(网站,个人等)的公共密钥和其他的属性,如名称

等。该公共密钥只属于某一个特定的实体,它的作用是防止一个实体假装成另外一个实体。

证书用来保证不对称加密算法的合理性。想想吧,如果没有证书记录,那么假设某俩人A

与B的通话过程如下:

这里假设A的publickey是K1,privatekey是K2,B的publickey是K3,privatekey是K4

xxxxxx(kn)表示用kn加密过的一段文字xxxxxx

A-----〉hello(plaintext)-------------〉B

A〈---------hello(plaintext)〈---------B

A〈---------Bspublickey〈------------B

A---------〉spublickey(K1)--------〉B

......

如果C想假装成B,那么步骤就和上面一样。

A-----〉hello(plaintext)-------------〉C

A〈---------hello(plaintext)〈---------C

注意下一步,因为A没有怀疑C的身份,所以他理所当然的接受了C的publickey,并且使

用这个key来继续下面的通信。

A〈---------Cspublickey〈------------C

A---------〉Aspublickey(K1)--------〉C

......

这样的情况下A是没有办法发觉C是假的。如果A在通话过程中要求取得B的证书,并且

验证证书里面记录的名字,如果名字和B的名字不符合,就可以发现对方不是B.验证B的

名字通过再从证书里面提取B的公用密钥,继续通信过程。

那么,如果证书是假的怎么办?或者证书被修改过了怎么办?慢慢看下来吧。

证书最简单的形式就是只包含有证书拥有者的名字和公用密钥。当然现在用的证书没这么简

单,里面至少还有证书过期的deadline,颁发证书的机构名称,证书系列号,和一些其他可

选的信息。最重要的是,它包含了证书颁发机构(certificationauthority简称CA)的签名信息。

我们现在常用的证书是采用X.509结构的,这是一个国际标准证书结构。任何遵循该标准

的应用程序都可以读,写X509结构的证书。

通过检查证书里面的CA的名字,和CA的签名,就知道这个证书的确是由该CA签发的然

后,你就可以简单证书里面的接收证书者的名字,然后提取公共密钥。这样做建立的基础是,

你信任该CA,认为该CA没有颁发错误的证书。

CA是第三方机构,被你信任,由它保证证书的确发给了应该得到该证书的人。CA自己有

一个庞大的publickey数据库,用来颁发给不同的实体。

这里有必要解释一下,CA也是一个实体,它也有自己的公共密钥和私有密钥,否则怎么做

数字签名?它也有自己的证书,你可以去它的站点down它的证书得到它的公共密钥。

一般CA的证书都内嵌在应用程序中间。不信你打开你的IE,在internet选项里面选中"内容

",点击"证书",看看那个"中间证书发行机构"和"委托根目录发行机构",是不是有一大堆CA的

名称?也有时CA的证书放在安全的数据库里面。

当你接受到对方的证书的时候,你首先会去看该证书的CA,然后去查找自己的CA证书数据

库,看看是否找的到,找不到就表示自己不信任该CA,那么就告吹本次连接。找到了的话就

用该CA的证书里面的公用密钥去检查CA在证书上的签名。

这里又有个连环的问题,我怎么知道那个CA的证书是属于那个CA的?人家不能造假吗?

解释一下吧。CA也是分级别的。最高级别的CA叫RootCAs,其他cheap一点的CA的证

书由他们来颁发和签名。这样的话,最后的保证就是:我们信任RootCAs.那些有RootCAs

签名过的证书的CA就可以来颁发证书给实体或者其他CA了。