收藏 分享(赏)

openssl源代码笔记(最简明).doc

上传人:HR专家 文档编号:6298196 上传时间:2019-04-05 格式:DOC 页数:16 大小:1.17MB
下载 相关 举报
openssl源代码笔记(最简明).doc_第1页
第1页 / 共16页
openssl源代码笔记(最简明).doc_第2页
第2页 / 共16页
openssl源代码笔记(最简明).doc_第3页
第3页 / 共16页
openssl源代码笔记(最简明).doc_第4页
第4页 / 共16页
openssl源代码笔记(最简明).doc_第5页
第5页 / 共16页
点击查看更多>>
资源描述

1、Openssl 源代码整理学习声明:建议结合 Openssl 源代码学习;1、基础知识1.Openssl 简史OpenSSL 项目是加拿大人 Eric A.Yang 和 Tim J.Hudson 开发,现在有 Openssl 项目小组负责改进和维护;他们是全球一些技术精湛的志愿技术人员,他们的劳动是无偿的,在此我们应该向他们表示崇高的敬意。Openssl 最早的版本在 1995 年发布,1998 年开始由 Openssl 项目组维护;当前最新版本为 OpenSSL 1.0.1;开放源代码的 SSL 产品实现,采用 C 语言开发;源代码可以在 www.openssl.org 自由下载;The O

2、penSSL Project is a collaborative effort to develop a robust, commercial-grade, full-featured, and Open Source toolkit implementing the Secure Sockets Layer (SSL v2/v3) and Transport Layer Security (TLS v1) protocols as well as a full-strength general purpose cryptography library. The project is man

3、aged by a worldwide community of volunteers that use the Internet to communicate, plan, and develop the OpenSSL toolkit and its related documentation. OpenSSL is based on the excellent SSLeay library developed by Eric A. Young and Tim J. Hudson. The OpenSSL toolkit is licensed under an Apache-style

4、licence, which basically means that you are free to get and use it for commercial and non-commercial purposes subject to some simple license conditions.2.SSL 协议和 TLS 协议SSL 是 Netscape 开发的专门用户保护 Web 通讯的,目前版本为 3.0。最新版本的 TLS 1.0是 IETF(工程任务组) 制定的一种新的协议,它建立在 SSL 3.0 协议规范之上,是 SSL 3.0 的后续版本。两者差别极小,可以理解为 SSL

5、 3.1,它是写入了 RFC 的。但在 TLS 与 SSL3.0 之间还是存在着差别,主要是它们所支持的加密算法不同,所以 TLS与 SSL3.0 不能互操作。TLS 在 SSL v3.0 的基础上,提供了以下增强内容:1)更安全的 MAC 算法;2)更严密的警报;3) “灰色区域”规范的更明确的定义;3.对称算法加解密使用同一个密钥;主要模式有 ECB,CBC,CFB , OFB 等;4.摘要算法特殊格式输出算法,无论输入多长,输出密文都是固定长度的;摘要过程不可逆;常用算法有 MD5(16bytes) , SHA1(20bytes) ;5.公钥算法加解密使用不同密钥;密钥不需要交换,即可通

6、信;加密算法和密钥(公钥)是公开的;常用公钥算法有 RSA,DSA,DH 和 ECC;6.回调函数定义在数据结构中,是一个函数指针,方便用户自行编写函数,类似虚函数;7.X.509(1993)由国际电信联盟(ITU-T)制定的数字证书标准;包含公钥和用户标志符、CA 等;x509 是数字证书的规范,P7 和 P12 是两种封装形式;X.509 是常见通用的证书格式。所有的证书都符合为 Public key Infrastructure 制定的 ITU-T x509 国际标准。PKCS # 7 常用的后缀是: P7B, P7C, SPCPKCS # 12 常用的后缀有: P12 ,PFXX509

7、 DER 编码(ASCII)的后缀是: DER CER CRTX509PEM 编码( base64)的后缀是:PEM CER CRTpem 格式是经过 base64 编码的证书,der 格式是 DER 编码的证书;证书入和导出操作支持四种文件格式。 个人信息交换 (PKCS #12)个人信息交换格式(PFX,也称为 PKCS #12)支持安全存储证书、私钥和证书路径中的所有证书。PKCS #12 是唯一可用于导出证书及其私钥的文件格式。 加密消息语法标准 (PKCS #7)PKCS #7 格式支持存储证书和证书路径中的所有证书 DER 编码的二进制 X.509区别编码规则 (DER) 格式支持

8、存储单个证书。该格式不支持存储私钥或证书路径。 Base64 编码的 X.509Base64 格式支持存储单个证书。该格式不支持存储私钥或证书路径。cer/crt 证书: 用于存储公钥证书的文件格式,它是二进制存放的,不含私钥,不能导入到个人存储区,因为个人存储区存储与私钥相关的数字证书;cer、crt 格式只是一个后缀,该后缀的证书可以 pem 编码的也可以是 der 编码的; pfx/p12 证书:含有证书和对应的 私钥,可以导入 IE 的个人证书存储区;p12 格式的证书一般用于证书的分发,里面包含了证书和对应的私钥;由于 Apache Proxy 是 PEM 格式 Prefer 的,不

9、支持 DER 经编码的证书,因此,要通过证书的编码转换,把 DER 编码转换为 PEM 编码,再经 Apache 处理。证书的编码为 DER 编码,但 DER 编码的文件是二进制格式不利于读写和传播,所以对DER 编码的数据进行 BASE64 编码形成了 PEM。8.PKCS 系列标准由 RSA 数字安全公司但呢个制定的公钥密码学标准,包含证书申请、更新、CRL、DS 等;其中 PKCS7,定义了通用的消息语法,含数字签名和加密,与 PEM 兼容,互相转化;PKCS12,描述个人信息交换语法,打包公钥、私钥、证书和其他信息;PKCS 全称是 Public-Key Cryptography St

10、andards ,是由 RSA 实验室与其它安全系统开发商为促进公钥密码的发展而制订的一系列标准,PKCS 目前共发布过 15 个标准。 常用的有:PKCS#7 Cryptographic Message Syntax StandardPKCS#10 Certification Request StandardPKCS#12 Personal Information Exchange Syntax Standard比较:P7 一般是把证书分成两个文件,一个公钥一个私钥,有 PEM 和 DER 两种编码方式。PEM 比较多见,就是纯文本的,P7 一般是分发公钥用,看到的就是一串可见字符串,扩展名

11、经常是.crt,.cer,.key 等。DER 是二进制编码。P12 是把证书压成一个文件,.pfx 。主要是考虑分发证书,私钥是要绝对保密的,不能随便以文本方式散播。所以 P7 格式不适合分发。 .pfx 中可以加密码保护,所以相对安全些。在实践中要中,用户证书都是放在 USB Key 中分发,服务器证书经常还是以文件方式分发。服务器证书和用户证书,都是 X509 证书,就是里面的属性有区别。7.OCSP 在线证书状态协议由 IETF 颁布,用于检查数字证书在某一交易时刻是否有效的标准;提供快捷状态查询通道;8.LDAP 轻量级目录访问协议简化了 X.500 目录访问协议,广泛应用于证书发布

12、、 CRL 信息发布、CA 政策等;9.PKI(Public Key Infrastructure )PKI,“公钥基础设施“ ;X.509 标准中,将 PKI 定义为支持公开密钥管理并能支持认证、加密、完整性和可追究性服务的基础设施;更多:完整的 PKI 系统必须具有权威认证机构(CA)、数字证书库、密钥备份及恢复系统、证书作废系统、应用接口(API)等基本构成部分,构建 PKI 也将围绕着这五大系统来着手构建。 核心技术就围绕着数字证书的申请、颁发、使用与撤销等整个生命周期进行展开;PKI 采用数字证书方式进行服务,即通过第三方颁发的数字证书证明末端实体的密钥,而不是在线查询或在线分发;P

13、KI 与应用的分离也是 PKI 作为基础设施的重要标志,实际上就是网络社会的一次“社会分工” ,这种分工可能会成为网络应用发展史上的重要里程碑。2、Openssl 源码分析1.简介开源 SSL 安全工具,包含 SSL 协议实现,大量软算法(对称/非对称/摘要) ,非对称算法密钥生成,ASN.1 编解码库、证书请求(pscs10) 编解码,数字证书、CRL 编解码,OCSP 协议,pkcs7 标准实现和 pkcs12 个人数字证书格式实现等功能;使用 C 语言开发,跨平台优越;2.源码框架主要由 eay 基础函数库、ssl 库、工具、demo 和 test 组成;Eay 库源码,在 crypto

14、 目录下,包含:1) asn.1 DER 编码解码(crypto/asn.1 目录) ,包含数字证书请求, CRL 吊销列表及 pkcs8编解码函数;2) 抽象 IO( BIO,crypto/bio 目录) ,包含各种输入输出抽象,文件、内存、stdio、socket、 SSL;3) 大数运算(crypto/bn 目录) ,用于非对称算法密钥生成和各种加解密;4) 字符缓存(crypto/buffer 目录) ;5) 配置文件读取(crypto/conf 目录) ,主要配置文件为 f。本目录实现改格式配置文件的读取;6) DSO 动态共享对象(crypto/dso 目录) ,抽象各平台动态库加

15、载函数,提供统一接口;7) 硬件引擎(crypto/engine 目录) ,提供了规定接口;8) 错误处理(cryto/err 目录) ,提供处理接口;以堆栈显示错误;9) 对称算法、非对称算法及摘要算法封装(crypto/evp 目录)10) HMAC(crypto/hmac 目录) ,实现基于对称算法的 MAC;11) Hash 表(crypto/lhash 目录) ,实现散列表数据结构;12) OCSP 数字证书在线认证(crypto/ocsp 目录) ,实现 ocsp 协议的编解码等;13) PEM 文件格式处理(crypto/pem 目录) ,生成和读取 PEM 文件;14) Pkc

16、s7 消息语法(crypto/pkcs7 目录) ,实现构造和解析 PKCS7 消息;15) Pkcs12 个人证书格式(crypto/pkcs12 目录) ,实现 pkcs12 证书构造和解析;16) 队列(crypto/pqueue 目录) ,实现队列数据结构,用于 DTLS;17) 随机数(crypto/rand 目录) ,实现伪随机数生成,支持用户自定义;18) 堆栈(crypto/rand 目录) ,实现堆栈数据结构;19) 线程支持(crypto/threads),openssl 支持多线程,但是用户必须实现相关接口;20) 文本数据库(crypto/txt_db 目录) ;21)

17、 X509 数字证书(crypto/x509 目录) ,包括数字证书申请、证书和 CRL 构造解析和签名验证;22) 对称算法(crypto/aes、crypto/bf、crypto/cast、crypto/omp 和 crypto/des 等) ;23) 非对称算法(crypto/dh、crypto/dsa 、crytpo/ec 和 crypto/ecdh) ;24) 摘要算法(crypto/md2/4/5/sha)以及密钥交换/认证算法 (crypto/dh 和 crypto/krb5);SSL 库源代码在 ssl 目录下,包含 sslv2,sslv3,tlsv1 和 DTLS 的源码;包

18、含客户端源码、服务器源码、通用、底层包、方法以及协议相关密钥计算源码;工具源码在 crypto/apps 目录;demo 中有硬件引擎 engines 源码;测试源码在 test 中;3、Openssl 具体模块举例1.PEM 格式使用 PEM(Privacy Enhanced Mail),来存放各种信息,是 openssl 默认信息存放方式;文件包含信息:内容类型、头信息(加密算法和初始化变量 iv) 、信息体(BASE64 编码的)三部分;PEM 格式文件生成过程:1)将个数据 DER 编码;如有需要,进行加密处理;2)根据是否加密,构造 PEM 头,将 1 中数据进行 BASE64 编码

19、,放入 PEM 文件;文件内容举例如下图:编程相关:PEM 模块实现位于/crypto/pem 目录下,依赖 ASN1 模块,支持格式见/crypto/pem/pem.h 文件;函数定义主要是 read 和 write,见 crypto/pem/pem.h;2.通用数据结构主要用于数字证书申请,数字证书和 CRL 中;借 ASN1 库实现 DER 编解码;包含 set 和 get 操作;编程相关:数据结构定义放在 crypto/x509/x509.h 中。3.证书申请生成 x509 数字证书前,用户先提交证书申请文件,然后 CA 来签发证书;过程大致:1)用户生成自己公私钥对;构造证书申请文件

20、,符合 PKCS10 标准;包含用户信息、公钥等,并用私钥签名(即自签名证书) ;2)用户将证书申请提交给 CA;3)CA 验证签名,提取用户信息,并加入如颁发者信息等,用 CA 私钥签发;编程相关:X509 证书申请数据结构定义在 crypto/x509.h 中,包含两部分,X509_REQ_INFO 和X509_REQ。4.X509 数字证书将用户身份与公钥绑定的载体,符合 x509 格式,必须有 CA 的签名;用户不仅有数字证书,还有对应的私钥;数字证书包含内容有,版本、序列号、算法、颁布着、有效时间、共要信息、ID 等;编程相关:源码在 crypto/x509 和 crypto/x50

21、9v3 中,实现了结构设置、证书验证摘要、公钥导入导出等;5.CRL证书吊销列表(Certificate Revocation List),是包含吊销列表的数据结构;是离线的证书状态信息,类似黑名单;分完全 CRL 和增量 CRL;基本 CRL 信息有,吊销证书序列号、时间、原因、CRL 签名等;数据结构在 cry pto/x509/x509.h 中;编程相关:6.PKCS7加密消息语法(pkcs7),是各种消息存放的格式标准;如数据,签名、数字信封、摘要和加密数据;实现在 crypto/pkcs7 中;编程相关:7.PKCS12个人数字证书标准 PKCS12,用于存放证书、CRL、用户私钥以

22、及证书链;其中私钥是加密存放的;实现在 crypto/pkcs12 目录;编程相关:代码结构如下,数据结构定义在 crpto/pkcs12/pkcs12.h 中;7.SSL 实现由 netscape 公司提出,有 sslv2 和 sslv3,当前形成标准有 tls 协议和 DTLS;保证通信信道安全,提供数据加密、身份验证以及消息完整性保护;另支持数据压缩;通过握手协商各种算法和密钥;源码在 ssl 目录,有客户端(xx_clnt.c)、服务器(xx_srvr.c)、加密实现(xx_enc.c)、记录协议实现(xx_pkt.c)、METHOD 方法(xx_meth.c)、双方握手方法 (xx_

23、both.c),以及对外函数(xx_lib.c)建立 SSL 测试环境:1)建立自己的 CA;apps 中运行脚本:./CA.sh -newca,生成 demoCA 目录,含 ca 证书和私钥;2)生成客户端和服务器端证书申请;#客户端的Openssl req -newkey rsa:1024 -out req1.pem -keyout sslclientkey.pem#服务器端req -newkey rsa:1024 -out req2.pem -keyout sslserverkey.pem 3)签发客户端和服务器端证书;ca -in req1.pem -out sslclientcert

24、.pem#CA 的签发,必须在 apps 目录下进行;$ cd /dzrSSL/apps ca -in demoCA/mySSLtest/req2.pem -out demoCA/mySSLtest/sslservercert.pem.4)运行 ssl 服务器和客户端;Openssls_server -cert sslservercert.pem -key sslserverkey.pem -CAfile demoCA/cacert.pem -ssl3s_client -ssl3 -CAfile demoCA/cacert.pem5)验证客户端证书6)制定加密套件7)制定私钥加密口编程相关:主

25、要数据结构在 ssl.h 中,有 SSL_CTX、SSL 和 SSL_SESSION;SSL_CTX 数据结构用于 SSL 握手前准备,设置 CA 文件和目录、设置 SSL 握手中的证书文件和私钥、设置协议版本等;SSL 结构主要用于 SSL 握手以及传送数据;SSL_SESSION保存主密钥、session id/读写加解密钥、读写 MAC 密钥信息;SSL_CTX 缓存了所有 SSL_SESSION 信息,SSL 包含 SSL_CTX 数据;通过 SSL 数据查找session id,实现 SESSION 重用;加密套件,用 opensslciphers 命令查询;参考1.SSL 协议及 OPENSSL 源代码分析 ,陈岩文档,2009 ;2.Openssl 编程 ,江南计算技术研究所,赵春平, forxy126, ;3.OpenSSL 与网络信息安全基础、结构和指令 ,王志海,2004;4.Network Sercurity with OpenSSL ,Pravir Chandra,MattMessier,John Viega,2002;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报