openssl编程-基础知识-OpenSSL简介

参考链接

OpenSSL

简介

  • 它提供的主要功能有:SSL协议实现(包括SSLv2、SSLv3和TLSv1)、大量软算法(对称/非对称/摘要)、大数运算、非对称算法密钥生成、ASN.1编解码库、证书请求(PKCS10)编解码、数字证书编解码、CRL编解码、OCSP协议、数字证书验证、PKCS7标准实现和PKCS12个人数字证书格式实现等功能

安装

  • 运行./config --prefix=/usr/local/openssl  即生成动态库,且将其安装在 /usr/local/openssl  文件夹下
  • 更多选项用./config --help 来查看
  • 比如:no-mdc2、no-cast no-rc2、no-rc5、no-ripemd、no-rc4 no-des 、no-md2、no-md4、no-idea 、 no-aes、no-bf、no-err、no-dsa、no-dh、no-ec、no-hw、no-asm、no-krb5、no-dso 、no-threads 、 no-zlib、-DOPENSSL_NO_HASH_COMP、-DOPENSSL_NO_ERR、-DOPENSSL_NO_HW 、 -DOPENSSL_NO_OCSP、-DOPENSSL_NO_SHA256 和-DOPENSSL_NO_SHA512 等,去掉不必要的内容可以减少生成库的大小。
  • 若要生成 debug 版本的库和可执行程序加-g 或者 -g3(openssl 中有很多宏,需要调试学习最好加上-g3)。
  • make
  • make test 开始测试,此步骤可选
  • make install
  • openssl 会被安装到/usr/local/openssl 目录,包括头文件目录 include、可执行文件目录 bin、man 在线帮助、库目录 lib 以及配置文件目录(ssl)

 源代码

  • openssl 源代码主要由ssl 库、工具源码、范例源码以及测试源码组成。

crypto源代码

  • 包括如下内容:
  • 1) asn.1 DER 编码解码(crypto/asn1 目录),它包含了基本 asn1 对象的编解码以及数字证书请求、数字证书、CRL撤销列表以及PKCS8等最基本的编解码函数。这些函数主要通过宏来实现。
  • 2)抽象 IO(BIO,crypto/bio 目录),本目录下的函数对各种输入输出进行抽象,包括 文件、内存、标准输入输出、socket和 SSL 协议等。
  • 3)大数运算(crypto/bn 目录),本目录下的文件实现了各种大数运算。这些大数运 算主要用于非对称算法中密钥生成以及各种加解密操作。另外还为用户提供了大量辅助函数,比如内存与大数之间的相互转换。
  • 4)字符缓存操作(crypto/buffer 目录)。
  • 5)配置文件读取(crypto/conf 目录),openssl 主要的配置文件为 openssl.cnf。本目录下的函数实现了对这种格式配置文件的读取操作。
  • 6) DSO(动态共享对象,crypto/dso 目录),本目录下的文件主要抽象了各种平台的动态库加载函数,为用户提供统一接口。
  • 7) 硬件引擎(crypto/engine 目录),硬件引擎接口。用户如果要写自己的硬件引擎, 必须实现它所规定的接口。
  • 8) 错误处理(crypto/err 目录),当程序出现错误时,openssl 能以堆栈的形式显示各 个错误。本目录下只有基本的错误处理接口,具体的的错误信息由各个模块提供。各个模块专门用于错误处理的文件一般为*_err..c 文件。
  • 9) 对称算法、非对称算法及摘要算法封装(crypto/evp 目录)。
  • 10) HMAC(crypto/hmac 目录),实现了基于对称算法的 MAC。
  • 11) hash 表(crypto/lhash 目录),实现了散列表数据结构。openssl 中很多数据结构都是以散列表来存放的。比如配置信息、ssl session 和 asn.1 对象信息等。
  • 12) 数字证书在线认证(crypto/ocsp 目录),实现了 ocsp 协议的编解码以及证书 有效性计算等功能。
  • 13) PEM 文件格式处理(crypto/pem),用于生成和读取各种 PEM 格式文件, 包括各种密钥、数字证书请求、数字证书、PKCS7消息和PKCS8消息等。
  • 14) pkcs7 消息语法(crypto/pkcs7 目录),主要实现了构造和解析 PKCS7 消息;
  • 15) pkcs12 个人证书格式(crypto/pckcs12 目录),主要实现了 pkcs12 证书的构造和解析。
  • 16) 队列(crypto/pqueue 目录),实现了队列数据结构,主要用于 DTLS。  未找到
  • 17) 随机数(crypto/rand 目录),实现了伪随机数生成,支持用户自定义随机数 生成。
  • 18) 堆栈(crypto/stack 目录),实现了堆栈数据结构。 
  • 19) 线程支持(crypto/threads),openssl 支持多线程,但是用户必须实现相关接口。未找到
  • 20) 文本数据库(crypto/txt_db 目录)。
  • 21) x509 数字证书(crypto/x509 目录和 crypto/x509v3),包括数字证书申请、数字证书和CRL的构造、解析和签名验证等功能了;
  • 22) 对称算法(crypto/aes、crypto/bf、crypto/cast、ccrypto/omp (未找到)和 crypto/des 等目录)。
  • 23) 非对称算法(crypto/dh、crypto/dsa、crypto/ec 和 crypto/ecdh(未找到))。
  • 24) 摘要算法(crypto/md2、crypto/md4、crypto/md5 和 crypto/sha)以及密钥交 换/认证算法(crypto/dh 和 crypto/krb5  (未找到))。 

SSL 源代码 

  • ssl 库所有源代码在 ssl 目录下,包括了 sslv2、sslv3、tlsv1 和 DTLS 的源代码。各个版本基本上都有客户端源码(*_clnt.c)、服务源码(*_srvr.c)、通用源码(*_both.c)、底层包源码(*_pkt.c)、方法源码(*_meth.c)以及协议相关的各种密钥计算源码(*_enc.c)等,都很有规律。  存疑,有问题

工具源码 apps

  • 工具源码主要在 crypto/apps 目录下,默认编译时只编译成 openssl(windows 下为openssl.exe)可执行文件。该命令包含了各种命令工具。此目录下的各个源码可以单独进行编译

范例源码 

  • 范例源码在 demo 目录下

engines

  • 另外 engines 目录给出了 openssl 支持的几种硬件的 engines 源码,也可以作为 engine 编写参考。

 test测试源码

  • 测试源码主要在 test 目录下。

 

第一章 基础知识 81.1 对称算法 81.2摘要算法 81.3 公钥算法 91.4 回调函数 11第二章 openssl简介 132.1 openssl简介 132.2 openssl安装 132.2.1 linux下的安装 132.2.2 windows编译与安装 132.3 openssl源代码 142.4 openssl学习方法 16第三章openssl堆栈 173.1 openssl堆栈 173.2 数据结构 173.3 源码 173.4 定义用户自己的堆栈函数 183.5 编程示例 19第四章 openssl哈希表 214.1 哈希表 214.2 哈希表数据结构 214.3 函数说明 224.4 编程示例 24第五章 openssl内存分配 275.1 openssl内存分配 275.2 内存数据结构 275.3 主要函数 285.4 编程示例 28第六章 Openssl动态模块加载 316.1 动态库加载 316.2 DSO概述 316.3 数据结构 316.4 编程示例 32第七章 openssl抽象IO 357.1 openssl抽象IO 357.2 数据结构 357.3 BIO 函数 367.4 编程示例 377.4.1 mem bio 377.4.2 file bio 377.4.3 socket bio 387.4.4 md BIO 407.4.5 cipher BIO 407.4.6 ssl BIO 417.4.7 其他示例 43第八章 Openssl配置文件 448.1 概述 448.2 openssl配置文件读取 448.3 主要函数 448.4 编程示例 45第九章 Openssl随机数 479.1 随机数 479.2 openssl随机数数据结构与源码 479.3 主要函数 489.4 编程示例 49第十章 Openssl文本数据库 5110.1 概述 5110.2 数据结构 5110.3 函数说明 5210.4 编程示例 52第十一章 Openssl大数 5511.1 介绍 5511.2 openssl大数表示 5511.3 大数函数 5511.4 使用示例 58第十二章 Openssl base64编解码 6512.1 BASE64编码介绍 6512.2 BASE64编解码原理 6512.3 主要函数 6612.4 编程示例 66第十三章 Openssl ASN1库 6913.1 ASN1简介 6913.2 DER编码 7013.3 ASN1基本类型示例 7113.4 openssl 的ASN.1库 7313.5 用openssl的ASN.1库DER编码 7413.6 Openssl的ASN.1宏 7513.7 ASN1常用函数 7613.8 属性证书编码 90第十四章 Openssl错误处理 9414.1 概述 9414.2 数据结构 9414.3 主要函数 9614.4 编程示例 98第十五章 Openssl摘要与HMAC 10115.1 概述 10115.2 openssl摘要实现 10115.3 函数说明 10115.4 编程示例 10215.5 HMAC 103第十六章 Openssl数据压缩 10516.1 简介 10516.2 数据结构 10516.3 函数说明 10616.4 openssl中压缩算法协商 10616.5 编程示例 107第十七章 Openssl RSA 10817.1 RSA介绍 10817.2 openssl的RSA实现 10817.3 RSA签名与验证过程 10917.4 数据结构 10917.4.1 RSA_METHOD 10917.4.2 RSA 11017.5 主要函数 11117.6编程示例 11217.6.1密钥生成
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值