OPENSSL学习整理201210.doc

上传人:11****ws 文档编号:2428928 上传时间:2019-05-13 格式:DOC 页数:8 大小:204.16KB
下载 相关 举报
OPENSSL学习整理201210.doc_第1页
第1页 / 共8页
OPENSSL学习整理201210.doc_第2页
第2页 / 共8页
OPENSSL学习整理201210.doc_第3页
第3页 / 共8页
OPENSSL学习整理201210.doc_第4页
第4页 / 共8页
OPENSSL学习整理201210.doc_第5页
第5页 / 共8页
点击查看更多>>
资源描述

1、OPENSSL学习整理 1 OPENSSL简介 openssl是一个功能丰富且自包含的开源安全工具箱。它提供的主要功能有: SSL 协议实现 (包括 SSLv2、 SSLv3和 TLSv1)、大量软算法(对称 /非对称 /摘要 )、大数运算、非对称算法密钥生成、 ASN.1 编解码库、证书请求 (PKCS10)编解码、数字证书编解码、 CRL编解码、 OCSP协议、数字证书验证、 PKCS7标准实现和 PKCS12 个人数字证书格式实现等功能。 openssl 采用 C语言作为开发语言,这使得它具有优秀的跨平台性能。 openssl支持 Linux、 UNIX、 windows、 Mac 等平

2、台。openssl目前最新的版本是 0.9.8e。 2 OPENSSL结构 整个软件包可大概分为三个主要功能部分:密码算法库、 SSL 协议库以及应用程序。 OpenSSL 的目录结构是围绕这三个功能部分进行规划的。 OpenSSL 的根目录下的文件包含 OpenSSL 各个平台下编译安装的说明文档、编译安装的配置文件以及 OpenSSL 本 身版本变化的一些说明文档。诸如 INSTALL.*这样名称的文件,都是安装编译说明文件,后缀名是平台的名称。比如 INSTALL.w32,就是 Windows 平台的OpenSSL 安装编译说明文件。只有 Linux的安装编译说明文件是不带后缀的,就是

3、INSTALL。 图 2-1 列出了系统平台和对应安装文件的关系其它一些文件的作用。 图 2-1 openssl安装说明文件及相应平台 2.1 非重要目录 MacOS、 ms、 os2 以及 VMS 这几个目录,包含了在不同的平台编译时候的环境变量配置文件,在安装编译完成之后,这几个目录就没有作用了。 Bugs、 certs、 perl、 shlib、 times、 tools 以及 utils 目录都是一些辅助的目录,里面包含的文件对于我们使用 OpenSSL 进行工作并没有很多的帮助,所以可以不作深究。当然,这些目录中的文件在编译的时候起的作用可能是不可或缺的,但是这并非关注的焦点。 2.

4、2 重要目录 (参考图 2-2) Crypto 目录是 OpenSSL 所有密码算法和一些 PKI 相关标准源码存放的目录,也是 OpenSSL 最重要的一个目录。 SSL 目录是 SSL 协议各个版本的实现源码存放的目录。 Doc目录是 OpenSSL 使用的说明文档存放的目录,这个目录对于 OpenSSL 使用者来说具有 “芝麻开门 ” 的作用。 Apps 目录存放了 OpenSSL 所用应用程序的源代码文件,也是研究 OpenSSL 的 API 很好的例子。 Demos目录就是一些 OpenSSL 应用的例子,在开始使用 OpenSSL进行工作之前,可以看看这个目录,或许会有所帮助。 I

5、nclude 目录是使用 OpenSSL 的库进行编程的时候可能需要使用到的一些头文件。 Test 目录测试 OpenSSL 一些自身测试程序源文件所在的地方。 图 2-2 OPENSSL 重要目录 2.3 其它 目录 在 Windows 平台下将 OpenSSL 编译成功后,会增加三个新的目录: inc32、 out32dll、 tmp32dll。 Inc32目录与 Include 目录相似,存放的是 Windows 平台下使用 OpenSSL 进行编程需要包含的头文件。 Out32dll 则存放了 OpenSSL 编译成功后的可执行应用程序、链接库 LIB文件和动态 DLL 文件。 Tmp

6、32dll 则是在编译过程中存放 OBJ等临时文件的目录。 2.4 算法目录 openSSL 的算法目录 Crypto 目录包含了 OpenSSL 密码算法库的所有源代码文件,是 OpenSSL 中最重要的目录之一。 OpenSSL 的密码算法库包含了 OpenSSL 中所有密码算法、密钥管理和证书管理相关标准的实现,在 Windows 下编译后的库文件名为 libeay32.lib,在Linux 下编译后生产的库文件名为 libcrypto.a。 Crypto 目录下包含了众多的子目录,这些目录大多数以相关的算法或标准名称的简写命名。当然 ,并非所有这些目录存放的源文件都是密码算法和标准,有

7、些是OpenSSL 本身的一些相关功能文件,如 BIO、 DSO 和 EVP 等。 2.5 文档目录 Doc文档目录: OpenSSL 的文档使用 Perl 文档格式保存,为 .pod 文件,对于 Windows平台用户,可使用 Perl 工具 pod2text或 pod2html命令将文档转换成 txt文本格式或 html格式以方便阅读。若用写字板或其它阅读器打开这些文档会使格式显得凌乱。 OpenSSL 的文档主要分为三部分:应用程序说明文档、密码算法库 API 文档以及 SSL 协议库 API 文档。分别对应 Doc 根目录下的三个子目录 Apps、 Crypto 和 SSL。 由于非商

8、业软件开发的共同缺点, OpenSSL 提供的文档并不全面,甚至可以说是非常有限,而且不能及时跟着版本更新。 2.6 DOC 文档目录 的子目录 Apps 包含了大部分 OpenSSL 应用程序的使用和参数说明,并有部分例子。 Crypto 则包含了部分 OpenSSL 密码算法库的 API的使用说明,可惜不是很全面。 SSL包含了 OpenSSL 实现的 SSL 协议和 TLS 协议的大部分 API 使用说明,该部分由于变动比较缓慢,所以文档相对全面一些。 OpenSSL 文档目录下还有一个 Howto 子目录,内容是关于证书、密钥以及代理证书的一些问题。 3 OPENSSL功能 OPENS

9、SL 的功能如下 :1) 提供主要的密码算法 :包括对称加密算法、非对称加密算法和信息摘要算法。 2) 常用的密钥和证书封装管理功能 。 3) 实现了 SSL 协议 。 4) 提供丰富的应用程序供测试或其它目的使用。 5) Engine机制 。 6) 其他辅助功能 。 3.1 密码算法 OpenSSL 提供了 8 种对称加密算法,其中 7 种是分组加密算法,仅有的一种流加密算法是 RC4。这 7 种分组加密算法分别是 AES、DES、 Blowfish、 CAST、 IDEA、 RC2、 RC5,都支持电子密码本模式( ECB) 、加密分组链接模式( CBC) 、加密反馈模式( CFB)和输出

10、反馈模式( OFB)四种常用的分组密码加密模式。其中, AES 使用的加密反馈模式( CFB)和输出反馈模式( OFB)分组长度是 128位,其它算法使用的则是 64 位。 DES 算法里面不仅仅是常用的 DES算法,还支持三个密钥和两个密钥 3DES算法。虽然每种加密算法都定义了自己的接口函数,但 OpenSSL 还使用 EVP封装了所有的对称加密算法,使得各种对成加密算法能够使用统一的 API 接口 EVP_Encrypt 和EVP_Decrypt 进行数据的加密和解密,大大提供了代码的可重用性能。 OpenSSL 实现了 4 种非对称加密算法,包括 DH算法、 RSA算法、 DSA算法和

11、椭圆曲线算法( EC) 。 DH算法一般 用于 密钥交换。 RSA算法既可以用于密钥交换,也可以用于数字签名,用于数据加密速度特别慢,所以一般不用来加密。 DSA 算法则一般只用于数字签名。跟对称加密算法相似, OpenSSL 也使用 EVP 技术对不同功能的非对称加密算法进行封装,提供了统一的 API 接口。如果使用非对称加密算法进行密钥交换或者密钥加密,则使用 EVP_Seal 和 EVP_Open 进行加密和解密;如果使用非对称加密算法进行数字签名,则使用 EVP_Sign 和 EVP_Verify 进行签名和验证。 OpenSSL 实现了 5 种信息摘要算法,分别是 MD2、 MD5、

12、 MDC2、SHA( SHA1)和 RIPEMD。 SHA 算法事实上包括了 SHA和 SHA1 两种信息摘要算法,此外, OpenSSL 还实现了 DSS 标准中规定的两种信息摘要算法 DSS 和 DSS1。 OpenSSL 采用 EVP_Digest 接口作为信息摘要算法统一的 EVP接口, 对所有信息摘要算法进行了封装,提供了代码的重用性。跟对称加密算法和非对称加密算法不一样,信息摘要算法是不可逆的,不需要一个解密的逆函数。 3.2密钥和证书管理 Opensll支持多种标准的密钥和证书。首先, OpenSSL 实现了 ASN.1 的证书和密钥相关标准,提供了对证书、公钥、私钥、证书请求以

13、及 CRL 等数据对象的 DER、 PEM 和 BASE64 的编解码功能。OpenSSL 提供了产生各种公开密钥对和对称密钥的方法、 函数和应用程序, 同时提供了对公钥和私钥的 DER编解码功能, 并实现了私钥的 PKCS#12 和 PKCS#8 的编解码功能。 OpenSSL 在标准中提供了对私钥的加密保护功能,使得密钥可以安全地进行存储和分发。在此基础上, OpenSSL 实现了对证书的 X.509 标准编解码、 PKCS#12 格式的编解码以及 PKCS#7的编解码功能。并提供了一种文本数据库,支持证书的管理功能,包括证书密钥产生、请求产生、证书签发、吊销和验证等功能。事实上, Ope

14、nSSL 提供的 CA应用程序就是一个小型的证书管理中心( CA) ,实现了证书签发的整个流程和证书管理的大部分机制。 3.3 SSL和 TLS协议 虽然已经有众多的软件实现了 OpenSSL 的功能, 但是 OpenSSL 里面实现的 SSL 协议能够让我们对 SSL 协议有一个更加清楚的认识, 因为至少存在两点: 一是 OpenSSL实现的 SSL协议是开放源代码的, 我们可以追究 SSL 协议实现的每一个细节; 二是 OpenSSL 实现的 SSL协议是纯粹的 SSL 协议,没有跟其它协议(如 HTTP)协议结合在一起,澄清了 SSL 协议的本来面目。由于 SSL 协议现在经常跟 HTT

15、P协议在一起应用形成 HTTPS 协议,所以给很多人误认为 SSL 协议就是为了保护 Web 安全性的,这实在是一个很大的误解! OpenSSL 实现了 SSL 协议的 SSLv2和 SSLv3, 支持了其中绝大部分算法协议。 OpenSSL 也实现了 TLSv1.0, TLS是 SSLv3 的标准化版, 虽然区别不大, 但毕竟有很多细节不尽相同。 OpenSSL 除了提供了使用 SSL 协议和 TLS协议的 API 接口函数之外,还提供了两个不错的应用程序 S_Client 和 S_Server。 S_Client 用来模拟 SSL 客户端,可以用来测试 SSL 服务器,比如 IIS和带 m

16、od_ssl的 Apache 等; 而 S_Server模拟了一个 SSL 服务器, 可以用来测试 SSL 客户端,比如 IE 和 Netscape 等。事实上,由于是开放源代码的, S_Client 和 S_Server 程序的源代码还是很好的 OpenSSL 的 SSL 接口 API 使用例子。 3.4 应用程 序 OpenSSL 的应用程序是基于 OpenSSL 的密码算法库和 SSL 协议库写成的,所以也是一些非常好的 OpenSSL 的 API 使用范例。OpenSSL 的应用程序主要包括密钥生成证书管理、格式转换、数据加密和签名、 SSL 测试以及其它辅助配置功能。 OpenSSL

17、 的应用程序提供了相对全面的功能,可以把应用程序当做 OpenSSL 的指令。根据指令的性质可以对其进行归类,这些类型包括:对称密钥指令 、 非对称密钥指令 、 信息摘要和签名指令 、 证书签发和管理指令 、 标准转换指令 和 SSL 测试指令以及其它指令 。 4 OPENSSL编译 4.1 Win32下 OPENSSL编译 Win32下编译 openssl需要如下环境: openssl源码、 perl for win32、c编译器( vc+、 borlan c 等) 。 编译步骤如下: 1 访问 http:/www.openssl.org/source/下载 2 解压缩 openssl-0.

18、9.8e.tar.gz 3 下载 perl 地址 http:/ 4 安装 perl 5 运行 cmd命令,在控制台窗口,用 cd命令改变当前目录的openssl-0.9.8e源码所在目录 6 执行 configure,运行” perl Configure VC-WIN32 -prefix=c:/openssl-0.9.8e”, c:openssl-0.9.8e 这个目录必须先创建好。 7 运行“ msdo_ms” 8 运行” nmake -f msntdll.mak”,执行 make进行编译。该命令将openssl编译成动态库,如果想编译成静态库应使用命令“ nmake -f msnt.mak

19、 ” 9 运行” nmake -f msntdll.mak test”,检查上一步编译是否成功。 10运行” nmake -f msntdll.mak install”, 本步骤讲安装编译后的openssl到制定目录。 11 查看安装结果。打开 c:openssl-0.9.8e目录将看到binincludelib三个文件夹。 12 编译完成。 4.2 编译 问题及解决方法 1) NMAKE : fatal error U1077: cl : return code 0x2 解决办法 : 禁用 IPV6, perl Configure VC-WIN32 -DOPENSSL_USE_IPV6=0

20、2) fatal error U1077: ml : return code 0x1 解决办法: 下载一个 MASM8.0,下载下来名字是 MASMsetup.exe,不用安装, 首先 用 winrar 解压安装文件 MASMsetup.EXE,得到Setup.exe;然后 用 winrar 解压 Setup.exe,得到 vc_masm1.cab;再 用winrar 解压 vc_masm1.cab,得到一个文件,文件名很长,改名为 ml.exe。将 ml.exe拷贝到工作目录,即可正常使用。 3) 运行 “nmake -f msntdll.mak”命令, 出现 “msuplink.c(11)

21、 : fatal error C1083: Cannot open include file: windows.h: No such file or directory NMAKE : fatal error U1077: cl : return code 0x2 Stop.” 解决 办法 :先运行 vcvars32 命令, vcvars32.bat 用于设置 VC命令行编译的环境变量。 4) 编译 , 提示错误 :cryptlib.obj : error LNK2001: unresolved external symbol _OPENSSL_ia32_cpuid out32dll/libe

22、ay32.dll : fatal error LNK1120: 1 unresolved externals 解决办法 : 修改 do_ms 文件如下: perl util/mkfiles.pl MINFO perl util/mk1mf.pl debug no-asm VC-WIN32 ms/nt.mak perl util/mk1mf.pl debug dll no-asm VC-WIN32 ms/ntdll.mak perl util/mk1mf.pl debug no-asm VC-CE ms/ce.mak perl util/mk1mf.pl debug dll no-asm VC-CE ms/cedll.mak perl util/mkdef.pl 32 libeay ms/libeay32.def perl util/mkdef.pl 32 ssleay ms/ssleay32.def 5) 执行 命令 “nmake -f msntdll.mak”发现弹 出警告框,标题为 cl.exe提示缺少 mspdb60.dll。 解决办法:将 目录 CommonMSDev98Bin 下的 mspdb60.dll文件,复制到 C:Program FilesMicrosoft Visual StudioVC98BIN 下, VC6.0即可正常运行。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育教学资料库 > 精品笔记

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。