Linux(程序设计):35---OpenSSL库之(OpenSSL简介、安装)

一、OpenSSL简介

  • OpenSSL是一个功能丰富且自包含的开源安全工具箱
  • 它提供的主要功能有:SSL协议实现(包括SSLv2、SSLv3和TLSv1)、大量软算法(对称/非对称/摘要)、大数运算、非对称算法密钥生成、ASN.1编解码库、证书请求(PKCS10)编解码、数字证书编解码、CRL编解码、 OCSP协议、数字证书验证、PKCS7标准实现和PKCS12个人数字证书格式实现等功能
  • OpenSSL采用C语言作为开发语言,这使得它具有优秀的跨平台性能。OpenSSL支持Linux、UNIX、windows、Mac等平台。OpenSSL目前最新的版本是1.0.2t
  • 学习方法:Linux下主要用man就能查看OpenSSL命令和函数的帮助。Windows用户可用到 www.openss.org去查看在线帮助文档,或者用linux下的命令man2html将帮助文档装换 为html格式。用户也可以访问OpenSSL.cn论坛来学习OpenSSL

二、OpenSSL安装

  • 下面以下载1.1.1版本的为例,不同版本之前接口实现可能不同。步骤如下:
wget https://www.openssl.org/source/openssl-1.1.1g.tar.gz

tar -zxf openssl-1.1.1g.tar.gz

cd openssl-1.1.1g

./config

make

sudo make install

sudo ldconfig
  • 安装完成之后,默认情况下:
    • 头文件位于:/usr/local/include/openssl/目录下
    • 动态库文件位于:/usr/local/lib/目录下
    • 可执行文件openssl位于:/usr/local/bin/目录下
    • 相关帮助文档位于:/usr/local/share/doc/openssl/html/目录下

  • 可以查看当前系统openssl的版本,如下:

二、源码目录分析

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

crypto/目录

  • 源代码放在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)

apps/目录

  • 工具源码主要在crypto/apps目录下,默认编译时只编译成openssl可执行文件。该命令 包含了各种命令工具。此目录下的各个源码可以单独进行编译
  • apps目录下的各个程序,对应于openssl的各项命令

demos/目录

  • 范例源码在demo目录下,另外engines目录给出了OpenSSL支持的几种硬件的engines源码,也可以作为engine编写参考

test/目录

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

猜你喜欢

转载自blog.csdn.net/qq_41453285/article/details/106763236