openssl的man中文文档文档格式.docx
《openssl的man中文文档文档格式.docx》由会员分享,可在线阅读,更多相关《openssl的man中文文档文档格式.docx(69页珍藏版)》请在冰豆网上搜索。
不久前接到有关ssl的活,
结果找遍中文网站资料实在奇缺。
感觉是好象现在国内做这个技术的人不多所有有兴趣写点东西来介绍一下。
我使用的ssl的toolkit是openssl就用openssl做例子来讲解
openssl实在太大了,指令也多,API也多,更严重的是
它的API没有说明。
我打算漫漫说清楚其主要指令的用法,主要API的中文说明,以及使用/编程的方法。
工作量很大,因为我接触它也没几个月,现在大概
完成了1/10吧,
先把目前自己的一些心得,找到的资料
和一些翻译出来的东西贴出来,希望对研究ssl的人有帮助
openssl简介-证书
openssl简介-加密算法
openssl简介-协议
openssl简介-入门
openssl简介-指令
verify
openssl简介-指令asn1parse
openssl简介-指令ca
openssl简介-指令cipher
openssl简介-指令dgst
openssl简介-指令dhparam
openssl简介-指令enc
openssl简介-指令gendsa
openssl简介-指令genrsa
openssl简介-指令passwd
openssl简介-指令pkcs7
openssl简介-指令rand
openssl简介-指令req
openssl简介-指令rsa
openssl简介-指令rsautl
openssl简介-指令s_client
openssl简介-指令s_server
openssl简介-指令sess_id
openssl简介-指令speed
openssl简介-指令version
openssl简介-指令x509
wingger回复于:
2005-01-0709:
29:
51
[b:
2f84c104e9]标题:
openssl简介--证书[/b:
2f84c104e9]
2f84c104e9]发信站:
BBS水木清华站(FriNov1020:
282000)
引用请指明原作译者fordesign@
二证书[/b:
证书就是数字化的文件,里面有一个实体(网站,个人等)的公共密钥和其他的属性,如名称等。
该公共密钥只属于某一个特定的实体,它的作用是防止一个实体假装成另外一个实体。
证书用来保证不对称加密算法的合理性。
想想吧,如果没有证书记录,那么假设某俩人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了。
你不信任RootCAs?
人民币由中国人民银行发行,运到各个大银行,再运到地方银行,你从地方银行取人民币的时候不信任发行它的中国人民银行吗?
RootCAs都是很权威的机构,没有必要担心他们的信用。
那RootCAs谁给签名?
他们自己给自己签名,叫自签名.
说了这么多,举个certificate的例子吧,对一些必要的item解释一下。
CertificateExample
Certificate:
Data:
Version:
1(0x0)
SerialNumber:
//系列号
02:
41:
00:
16
SignatureAlgorithm:
md2WithRSAEncryption//CA同志的数字签名的算法
Issuer:
C=US,O=RSADataSecurity,Inc.,OU=Commercial//CA自报家门
Certification
Authority
Validity
NotBefore:
Nov418:
58:
341994GMT//证书的有效期
NotAfter:
Nov318:
341999GMT
Subje