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了。
发布评论