1、openssl简介(中文版本)(内部资料,禁止外传)目 录前言openssl简介证书 2openssl简介加密算法 7openssl简介协议 9openssl简介入门 11openssl简介指令 verify 13openssl简介指令asn1parse 17openssl简介指令ca(一) 19openssl简介指令ca(二) 22openssl简介指令cipher 24openssl简介指令dgst 28openssl简介指令dhparam29openssl简介指令enc 31openssl简介指令gendsa 34openssl简介指令genrsa 35openssl简介指令passwd
2、 36openssl简介指令pkcs7 37openssl简介指令rand 38openssl简介指令req(一) 39openssl简介指令req(二) 42openssl简介指令rsa 45openssl简介指令rsautl 47openssl简介指令s_client(一) 50openssl简介指令s_client(二) 53openssl简介指令s_server57openssl简介指令sess_id 59openssl简介指令speed 61openssl简介指令version 62openssl简介指令x509(一) 63openssl简介指令x509(二) 66前言不久前接到有关
3、ssl的活, 结果找遍中文网站资料实在奇缺。感觉是好象现在国内做这个技术的人不多。所有有兴趣写点东西来介绍一下。 我使用的ssl的toolkit是openssl就用openssl做例子来讲解 openssl实在太大 ,指令 多, 多, 的是 的 有 。我算 指令的用法, 的中文 , 使用 的法。 大, 我接 个,现在大 1 10, 目前currency1的一“,找到的资料一“fifl 来的东西 来, ssl的人有 文”的ug openssl简介证书证书就是 的文,”有一个实(网站,个人)的密 的 ,。密 一个 的实, 的 用是 止一个实 外一个实。 证书用来 证不加密算法的 。 ,果 有证书
4、录, 人 的 下 这” 的pulic key是1 private key是2 的pulic key是3 private key是4 xxxxxx(kn) 用kn加密的一 文xxxxxx hello(plain text) hello(plain text) s pulic key s pulic key(1) 果 就 一 。 hello(plain text) hello(plain text) 下一 , 有 的 ,所 所 的接受 的 pulic key并且使用这个key来继续下的 信。 s pulic key s pulic key(1) 这 的情况下 是 有办法发觉 是 的。果 在 中 求
5、取 的证书,并且验证证书” 录的,果 的不符 ,就可 发现 不是 验证 的 再从证书”提取 的用密 ,继续 信 。 ,果证书是 的怎办?或者证书被修改 怎办?慢慢看下来。证书最简单的形式就是 包含有证书拥有者的用密 。 现在用的证书 这简单,”至少还有证书期的deadline 颁发证书的机构,证书系列号,一“ 可选的信息。最 的是, 包含 证书颁发机构(certification authorit简 )的签信息。 我们现在常用的证书是采用X 509结构的,这是一个国际标准证书结构。任何遵循标准的应用 序都可 读写X509结构的证书。 检查证书”的 的, 的签,就知道这个证书的确是由 签发的,
6、后,你就可 简单证书”的接收证书者的, 后提取密 。这 做建立的基础是,你信任 认 有颁发错误的证书。 是第三 机构,被你信任,由 证证书的确发给 应到证书的人。currency1有一个庞大的pulic key 据库,用来颁发给不同的实。 这”有必 解释一下, 是一个实, 有currency1的密 私有密 ,否则怎做 签? 有currency1的证书,你可 去 的站点down 的证书到 的密 。 一般 的证书都内嵌在应用 序中间。不信你 开你的 E 在internet选项”选中“内容“ 点击“证书“ 看看 个“中间证书发行机构“委托根目录发行机构“ 是不是有一大堆 的? 有时 的证书放在安全的
7、 据库”。 你接受到 的证书的时候,你首会去看证书的 后去查找currency1的证书 据库,看看是否找的到,找不到就 currency1不信任 就 吹本次连接。找到 的 就用 的证书”的用密 去检查 在证书 的签。 这”又有个连环的问题,我怎知道 个 的证书是 个 的?人家不能造 吗? 解释一下。 是分级别的。最高级别的 oot s cheap一点的 的证书由们来颁发签。这 的 ,最后的 证就是我们信任 oot s “有 oot s签的证书的 就可 来颁发证书给实或者 。 你不信任 oot s 人 由中国人 行发行, 到 个大 行,再 到 行,你从 行取人 的时候不信任发行 的中国人 行吗?
8、 oot s都是 的机构, 有必 们的信用。 oot s 给签 们currency1给currency1签 currency1签 这多, 个证书的例子一“必 的子项解释一下。 ertificate Example ertificate ata ersion 1 (0x0) erial umer 系列号 02 41 00 00 16 ignature lgorithm md2 ith Encryption 同 的 签的算法 ssuer ata ecurity nc ommercial currency1 家门 ertification uthority alidity ot efore ov 4
9、 18 58 34 1994 证书的有 期 ot fter ov 3 18 58 34 1999 u ect ata ecurity nc ommercial ertification uthority u ect ulic ey nfo ulic ey lgorithm rsaEncryption ulic ey (1000 it) odulus (1000 it) 00 a4 f 81 62 7 ce 10 27 dd e8 f7 e 6c 6e c6 70 99 d 8 d5 05 03 69 28 82 9c 72 7f 96 3f 8e ec ac 29 92 3f 8a 14 f8
10、 42 76 e d 5d 03 9 90 d4 d0 c 06 2 51 33 5f c4 c2 f 6 8 8f 99 6 62 22 60 dd d df 20 82 4 ca a2 2f 2d 50 ed 94 32 de e0 55 8d d4 68 e2 e0 4c d2 cd 05 16 2e 95 66 5c 61 52 38 1e 51 a8 82 a1 c4 ef 25 e9 0a e6 8 2 8e 31 66 d9 f8 d9 fd d 3 69 d9 e Exponent 65537 (0x10001) ignature lgorithm md2 ith Encryp
11、tion 76 5 6 10 fe 23 f7 f7 59 62 4 0 5f 9c c1 68 c 49 3 49 6f 21 47 5d 2 9d 54 c4 00 28 3f 98 9 f2 8a 83 9 60 7f e 50 c7 a 05 10 2d 3d ed 38 02 c1 a5 48 d2 fe 65 a0 c0 c ea a6 23 16 66 6c 1 24 a9 f3 ec 79 35 18 4f 26 c8 e3 af 50 4a c7 a7 31 6 d0 7c 18 9d 50 f a9 26 fa 26 2 46 9c 14 a9 5 30 98 42 28
12、5 4 53 43 09 92 40 a a8 aa 5a a4 c6 6 8 57 4d c5 实这是我们看的 的 式的证书内容, 的证书都是加密 的, 容下 E E E c tqg w g gkqhki 9w0 i E k 1 E h 0gx E g g d1 5n 9ucurrency1E 1 E x 3 hmd6a 91 Ew w Ewhhc2lha 5mcurrency1E k 1 E x c3cx g hln5 Ew“wo hvc k hm3kX p25 i5 20w“hc w w c0 1 hc Ew w c0 1 i E k 1 E h 0gxE g g d1 5n 9ucur
13、rency1E1 E x 3 hmd6a 91 Ew w Ewhhc2lha 5mcurrency1E k 1 E x c3cx g hln5 Ew“wo hvc k hm3kX p25 i5 20wg8w o hvc E g0 o r h acw 30 u63m kgp “a s E6wy l2 “E“ 0k 3i8ly qcl7d c Xli2rdkto t “v1 cmo0vcurrency1uf38 r 9wef lp8 9uycurrency18 v5hekgXg l3“ x w vala Ew2nyf45 np h p g gegwge w“ 0 E 7x e“ m “5w r i
14、q iild 1 g “ Ega0wgaq 7x e“ m “5w r iq iild o p sw Ew E 1 E 3 hmdk25n wE “Ewlnd u3po3 xE g o currency1a pmv sw Ewcurrency1dcurrency1E w 1 E x a ucnkx f gkqhki 9w0 E Emvcm lc2lnk y um v g “ E “ 0 q 3 E 4 a9“2mix 7 7 0 r1 “r oaX2 ch4t3q g kt c37 g 3 dq 9r3p 23 ex 1 ac“ih n73s fh p 8ar 1 g9 v phd 0 “72
15、 vx qpn iqsgw xqeog0 8“3do rffw87408 qf E E E 证书都是有的。就是 的 个 ot efore ot fter间的fi子。期的证书,果 有 fl ,都 在证书收列(certificate revocation list)” 证书收列,文写是 一个证书的key被 ,或者证书拥有者 有 再使用证书,证书就 ” 。 录 所有 的证书。 的缺 式是 E 式。 可 我们可 读的文本 式。下有个 的例子。 E X509 fow o hvc E wXcurrency1E k 1 E h x e g o 1 EX h l3 yaX 5 m u 4w Ey 1cm g
16、2 ydm y E lcn pml X p24gX 0a 9yaX 5w05 1 w Ey aw05 2 Ew x la a g c w x cy 2 g c w Ew x 5 g xc w 0 x 5 g c w 1 0 0 g xc w currency1Ecurrency1 g0 5 g hc w currency1E1 kx 0 g hc w currency1E1 k0 x g “xc w currency1 0 k0 currency1 g cg c w currency1 5 w currency1Ex g cg E c wcurrency1 w currency1 2 g c
17、w 3 Ex currency1 x g cg “hc w 4 w 5 g cg c w 4 cx currency1 0 g cg c w 4 cy currency1 x g cg c w y x 2 gkqhki 9w0 “q EX e y0 wxxr“ 9 2currency15xu if06qm92 0h 158wpgov 3w wv E 2roc0tf s q1 aw currency1 gx 0lrcla3 r n4 a u4uth72 3 t a 3i “ 55k2 oy1d ls u h6 Egd w yp0v E X509 下是文本 式的 的例子。 he following
18、 is an example of a in text format issuer ata ecurity nc ecure erver ertification uthority last pdate ay 2 02 12 26 1995 next pdate un 1 00 01 49 1995 revoked serial umer 027200004 revocation ate ay 2 02 12 26 1995 revoked serial umer 0272000038 revocation ate pr 28 17 27 21 1995 revoked serial umer
19、 0272000041 revocation ate pr 28 17 17 24 1995 revoked serial umer 027200001E revocation ate pr 8 00 02 59 1995 revoked serial umer 0241000020 revocation ate pr 7 01 13 21 1995 revoked serial umer 0272000011 revocation ate ar 30 02 34 26 1995 revoked serial umer 0272000005 revocation ate ar 29 20 07
20、 11 1995 revoked serial umer 024100001 revocation ate ar 24 19 44 33 1995 revoked serial umer 024100001 revocation ate ar 15 19 40 41 1995 revoked serial umer 0241000016 revocation ate ar 15 19 16 54 1995 revoked serial umer 024100001 revocation ate ar 13 18 40 49 1995 revoked serial umer 024100000
21、revocation ate e 25 00 46 44 1995 revoked serial umer 024100000 revocation ate e 24 00 12 49 1995 revoked serial umer 0241000009 revocation ate e 10 02 16 39 1995 revoked serial umer 0241000004 revocation ate e 1 17 24 26 1995 结一下X 509证书是个东东。 实际 是建立 密 个实间系的 的文。 包含的内容有 版本信息 X 509 是有三个版本的。 系列号 证书接受者 颁
22、发者 证书有 期 密 一大堆的可选的 信息 的 签证书由 颁发,由 证书的有 期,由 签。个证书都有一的系列号。证书的系列号证书颁发者来 证书的一 。 openssl有个验证证书的式。你还可 指 一个callack ,在验证证书的时候会currency1用callack 。这 可 currency1根据验证结果来 应用序的行 。 的东西在 后的会 介绍的。 openssl的个验证证书式分别是 _ E _ E 全验证证书的结果。 你觉 必 的 ,就选用这个选项。 实 有证书的人 少 在中国。 果 用 一“ 的 , email的时候,我觉server 最好采用这个式。 _ E _ EE 验证 的证
23、书。不用 这个是最一般的式 client来 ,果 这 的式,验证server的证书 任何错误, 都 吹 server来 果 这 的式client 不一 currency1的证书 去。果client 有 证书,servercurrency1 下一 怎做。 _ E _ _ _ _ EE _ E 这是server使用的一 式,在这 式下, server会 client 证书。果client不给, 吹。 _ E _ E _ E 这是 能使用在ssl session renegotiation 的一 式。是 session renegotiation 后的再解释。我文点,觉这个 fifl 应的中文。 后
24、的文”,我觉 接fifl的单或 ,都会 接用文写 来。果不是用这个式的 在regegotiation的时候,client都 currency1的证书 给server 后做一 分。这个 cpu时间的,这个式则不 client在regotiation的时候 currency1的证书 。openssl简介加密算法解ssl 知道一“加密算法的常 加密算法 容 解 ,就是 文人家看不 的东西, 后 给currency1 的 到的 ,接收 用 的解密算法又密文解开 文,这 就不 在 果密文给人家 密。 加密算法有大,第一 是不基 E的, 个简单的例子,我 加密“fordesign“这一符,就个符都 的后一
25、个符, 就是“gpseft hm“ ,这 的东西人家 看不 ,接收 用 的 法就可 到 文。这 是个例子,现在应 人用这 的加密算法 。 不基 E的加密算法好象一 用到 计算机 现。我 古中国军事机密都是用这 式加密的。 战的时候好象军队 “电 员 带着密码本, 应是用这 式加密的。这 算法的安全 持算法的 密 前提。 这 加密算法的缺点太 显 ,就是一旦你的加密算法给人家知道,就肯 挂。fi本中途岛惨败好象就是密码给老米 。 计一 算法是 麻烦的,一旦给人 就 用 ,这 忑浪 。 我们现在使用的加密算法一般是基 key的, 就是 在加密 中 一个key用这个key来 文进行加密。这 的算法即
26、使一次被,下次改个key还可 继续用。key是一个东西呢?随便你,可 是一个随机产生的 ,或者一个单,啥都行, 你用的算法认 你选来做key的 玩 法就行。这 的算法最 的是 安全 取 key一般来 取 key的长度。 就是 应 证人家在知道这个算法不知道key的情况下,解 困。实现在常用的基 E的加密算法在网络 都可 找到, 多革同 (都是老外)都在 办法解基 key的加密算法又包括加密不加密。加密指的是双 使用全 同的key, 最常见的是 E E 3 4。加密算法的 容 解, 信一 用E加密 文, 一 收到后用同 的E来解密就可 到 文。 不加密指双 用不同的E加密解密 文, 信双 都 有
27、currency1的密 私有密 。 个例子 较容 解, 我们们 信双 分别是 拥有 E_ 1 E_ 2 中E_ 1是 的私有密 ,E_ 2是 的密 。 拥有E_ 1 E_ 2 中E_ 1是 的私有密 ,E_ 2是 的密。 密 私有密 的 点是, 中任何一加密的 文, 能用 外一才能够解开。 就是 E_ 1加密的 文, 有E_ 2才能够解密, 亦 。信 下 E_ 2 E_ 2 这个 做密 换,老外管这 key exchange 后 就分别用 的密 加密,用currency1的私有密 解密。 一般密 是 发布 去的, 后你 currency1的私有密 加密 文,人家用你的密 解密,果能解开, 你是
28、加密人,这就是 使用的验证机制。 常用的不加密一般有 “。我们一般使用 签 是不加密算法的一个 应用, 解 解 的,放在这”一起介绍一下。 签是大家都 熟悉?证 东西是你写的,是你发布的,你就用签。看看 “ 文都 头头签。 签就是 的签 。 用密 私有密 的 征吗? 有你一个人有你currency1的私有密 。你的用密 是 人都知道的 。 你在写一封邮后,用currency1的私有密加密currency1的,接收人用你的密 解开一看,哦,是你发的。这就是你的 签 。 的解释是 简的 , 实 签 这个 杂多 ,但我们 有 解的必 ,知道 签是这一事就可 。 还有一 我们 知道的加密算法, 实我不
29、觉 是加密算法 ,应 哈算法,文是message digest 是用来任何长度的一 文 一 规则固 长度的一符。 在 中的 用 , 后会慢慢提 的。一般使用的是 5 “ ase64不是加密算法,但 是 常使用的一 算法, 是 码 式,用来asc码 二进制码转来转去的。 的加密解密 我们不 解, 根本不关。但 解加密算法的一“基本 是必 的,否则 解 。 加密算法的 有兴趣的同 ,可 去网络 找这“加密算法的 的文实现的 序来 ,不学 论。不 论看 玩还是一头雾水。openssl简介协议( ecure ocket ayer)是netscape司提 的 用 we的安全 信标准分 2 0版3 0版
30、( ransport ayer ecurity)是 E 的 在3 0基础 提 的安全 信标准目前版本是1 0即 2246 提供的安全机制可 证应用层 据在互网络传 不被监听伪造窜改 一般情况下的网络协议应用中, 据在机器中简单的由 到下的 次包 ,就进入网络,果这“包被 的 , 可 容 的根据网络协议到”的 据 由网络监听 可 容 的做到这一点。 就是 加密这“ 据产生的协议,可 这 解, 是位 应用层间的一层, 据 流 的时候被加密,再往 , 据从 流入后进入 这一层被解密,同时 能够验证网络连接 的 。 的 功能就是个 一加密解密在网络中传 的 据包 同时 护这“ 据不被修改 伪造。 二验
31、证网络 中双 的 协议包含个子协议,一个是包协议,一个是 协议。包协议是 的 据包应何封 的。 协议则是 信双 何协商同 使用算法 算法使用的key。 显包协议位 协议 下一层。我们暂时包协议的内容 有兴趣。 简单点就是 信双 不加密算法来协商好一个加密算法 使用的key 后用这个算法加密 后所有的 据应用层协议的 据 换。 一般都是由client发起的, 不例外。 1 client 给server currency1本 使用的ssl的version(ssl一有三个version)加密算法的一“ ,一“随机产生的 据, 在 协议中 用到的信息。 2 server 给client currenc
32、y1的 的version 加密算法的 ,随机产生的据,还会用currency1的私有密 加密 E E “E 信息。 erver还同时currency1的证书文给 去。同时有个可选的项目,就是server可 求 客户的certificate。 3 client就用server 来的certificate来验证server的 。果server验证 ,本次 信结束。 证书验证后,到server的密 ,解开server 来的被 用私有密 加密的 E E “E 信息,看看头 否。果不, 有server的密 有私有密 ,必是 的。信 吹。 4 client使用到目前 止所有产生 的随机 据(shared
33、secret) client产生本次 中的premaster secret(这个 是有可能有server的参 的,由们使用的加密算法 )并且这个用server的密 加密, 给server 果server 求 验 证client client currency1currency1的证书 去,同时一“currency1签的 据去。 协议有 技术来产生shared secret( 不好思,又是一个 fl的 )一 是 一 是E “ 就是我们 一 的一 不加密算法。首servercurrency1的 密 给client client 是用这个key加密一个随机产生的值(这个随机产生的值就是shared
34、secret), 再结果 给server E “ 是一 不加密算法, 但 不同的是, 好象 有currency1固 的密 私有密 ,都是在 序跑起来的时候产生的,用就掉。 的 者就 不多 。 “三 不加密算法的区别 就在这”。 的密 固 ,后个 一个参 来临时生key “甚至 求双 使用同 的参 ,这个参 事指 。果 库 有load进这个参 , “算法就 办法用。 。 5 erver验证client的 后, 后用currency1的私有密 解密到premaster secret 后双 利用这个premaster secret来同协商,到master secret 6 双 用master一起产生
35、 的session key 着就是们在剩下的 中的加密的key 。这个key还可 用来验证 据整 。双 再 换结束信息。 结束。 接下来双 就可 用协商好的算法key来用加密算法继续下的 。简单? 实 杂一“的,我简 多来 。 不还是有个问题,喜捣蛋的人虽 看不 们在 流“,但篡改可? 我们在加密算法”介绍的哈算法吗?就是 付这 捣蛋者的。在次 信息的时候,附带整条信息的哈值 去,接收 收到信息的时候, 收到的内容哈一, 后 来的哈值 一下,看看是否 确。捣蛋者果乱改 信内容,哈 来的值是不同的, 就 容 被发现 。 但这 子,捣蛋者至少可 学舌。可 前监听到的内容 发给 一 ,这“内容肯 是
36、 确的无法验证 有问题的。哎, 是怎付这 人的我还 看 来。有篇文 多放点随机 在信息”可 付,我 去 这句 是思。openssl简介入门实现 的软不多,但都蛮优秀的。首,netscapecurrency1提 来的念,currency1会实现一 。netscape的技术蛮优秀的,不我 用们的ssl toolkit 甚至连都 。 1995年,eric young开始开发openssl 时候 ssleay 一 到现在,openssl还在不停的修改新版本的发行中。openssl 够大的,我 佩 eric的水平兴趣。这“open free的斗 的 是我写这个系列的 ,虽 写的 烦的。ps eric现在
37、去 司做,做 一个 的toolkit 实openssl不多。 计应 openssl ,区别是这个是 子的,且 所有 层的 都不提供 接用 。 多 思。 去www openssl org down openssl,最新的是0 9 6版。 安 是 简单的。我一 用的是sun sparc的机器,所 用sun sparc的机器做例子。 guncurrency1ip d openssl 0 9 6 tar gcurrency1 tar xf openssl 0 9 6 tar mv openssl 0 9 6 openssl cd openssl configure prefix XXXXX opens
38、sldir XXXXXXXX (这”prefix是你 安 openssl的 , openssldir就是你tar开的openssl码的 。好象所有的 点的free software都是这个 行,configure make make test make install 。) make(果机器慢,这一 的时候可 去 个 ,换 ) make test make install 果 有问题的 , 。 常有人 ug 在hp ux sgi openssl 问题,我 , 发言 。 现在可 开始玩openssl 。 我 计openssl最开始是在linux下开发的。大家可 看一看在linxu下有这一个文 d
39、ev urandom 在sparc下 有。这个文有用?你可 随时找 一个随机 。在加密算法产生key的时候,我们 一 子seed。这个seed就是找 dev urandom 的 个随机 。 在sparc下,由 有这一个 , 多openssl的 会 错“ not seeded“ 解 法是在你的 profile” 加一个 E, 下 E “ E rnd 后在 “ E下vi rnd 随便往”乱 入一“符,起码行。 多openssl的 都会这个文 seed openssl rsa openssl修改这个ug 果用openssl做toolkit , 则有 不太安全的解 法。 后讲到openssl 的会 介
40、绍。 生currency1的私有密 文, server key openssl genrsa des3 out server key 1024 genras 生 私有密 文, des3 用 E 3加密文,1024是我们的key的长度。一般用512就可 ,784可用 商 行 ,1024可 用军事用途 。 ,这是基 现在的计算机的 度言,可能 年1024是用 开发 ,2048用 一般用途 。 生server key的时候会 你 入一个密码,这个密 用来 护你的server key文,这 即使人家 你的server key文, 不开, 不到你的私有密 。 openssl rsa noout text
41、 in server key 可 用来看看这个key文”到 有“东西(不还是看不 ) 果你觉server key的 护密码太麻烦 去掉的 openssl rsa in server key out server key unsecure 不不 这做 下一 到证书 。到证书前我们 生一个 ertificate igning equest 进行 。 openssl req new key server key out server csr 生 的时候 有提 指 一 一 入 求的信息即可 生的csr文 给 签后形 currency1的证书 怎 给 签? currency1去www verisign
42、com慢慢看。 果是currency1玩下, currency1来做 。openssl有 简单的 法做 但一般好在开发的时候或者currency1玩的时候用, 的做 产,还是使用 规的 签发给你的证书 在你make install后,会发现有个misc的目录,进去, 行 sh newca,会找你 的一个 currency1的私有密 密码文。 有这个文?currency1建, 入密码来 护这个密码文。后会 你的一个司信息来做 crt文。最后在 前目录下多 一个 demo 这 的目录 demo private cakey pem就是 的key文 , demo cacert pem就是 的crt文
43、。currency1currency1建 来的server crt文copy到misc目录下,mvnewreq pem 后行 sh sign ok 到来的证书我们 server crt 看看我们的证书”有“ openssl x509 noout text in server crt 玩是玩 ,openssl的指令“多,就象 的。慢慢一个一个解释。openssl简介指令 verify用法 openssl verify path directoryfi file filefi purpose purposefi untrusted filefi helpfi issuer_checksfi verosefi fi certificatesfi 证书验证 。 选项 path directory 我们信任的 的证书fl放目录。这“证书的应是这 的 式 xxxxxxxx 0( xxxxxxxx 证书的哈值。