密码学专题 OpenSSL专题

OpenSSL总体架构 

  • 软件包分为三个主要的功能部分:密码算法库 、 SSL协议库及应用程序

  • MacOS,MS,OS/2及 VMS这几个目录,包含了在不同的 平台编译时的环境变量配置文件,在安装编译完成之后,这几个目录就没有作用了。
  • bugs,certs,perl,shlib,times,tools 及 utils 目录都是一些辅助的目录 , 里面包含文件对于我们使用 OpenSSL进行工作并没有很多的帮助,所以可以不作深究。但是编译的时候还是需要的
  • Crypto目录是 OpenSSL所有密码算法和一些 PKI相关标准源码存放的目录,也是 OpenSSL 最 重 要 的 一 个 目 录 。
  • SSL 目 录 是 SSL 协 议 各 个 版 本 的 实 现 源 码 存 放 的 目 录 。
  • Doc目录是 OpenSSL使用的说明文档存放的目录,这个目录对于 OpenSSL使用者来说具有 “芝麻开门”的作用。
  • Apps目录存放了OpenSSL所有应用程序的源代码文件,也是研 究 OpenSSL API 的 很 好 的 例 子 。
  • Demos 目 录 就 是 一 些 乐 意 奉 献 的 人 写 的 OpenSSL 应 用 的例子,在你开始使用 OpenSSL进行工作之前,可以看看这个目录,或许会有所帮助。
  • Include 目 录 是 使 用 OpenSSL 的 库 进 行 编 程 的 时 候 可 能 需 要 使 用 到 的 一 些 头 文 件 。
  • Test 目录是 OpenSSL一些自身功能测试源程序所在的地方。

注意事项

  • 如果在 Windows平台下将 OpenSSL编译成功后,还会增加三个新的目录:Inc32, Out32dl,Tmp32dl。
  • Inc32目录和Include目录相似,存放的是 Windows平台下使用 OpenSSL进行编程需要包含的头文件。
  • Out32dl则存放了 OpenSSL编译成功后的可执行应用程序、链接库 LIB文件和动态 DLL 文件。
  • Tmp32dl则是在编译过程中存放 OBJ等 临时文件的目录。

OpenSSL算法目录

  • Crypto 目录包含了OpenSSL密码算法库的所有源代码文件, 是 OpenSSL中最重要的目录之一。
  • OpenSSL的密码算法库包含了 OpenSSL中所有密码算法、密钥管理和证书管理相关标准的实现
  • 在 Windows下编程后的库文件名为libeay32.lib, 在 Linux 下 编 译后生成的库文件名为 libcrypto.a。 Crypto目录下包含了众多的子目录,这些子目录大多数以相关的算法或标准名称的简写命名。
  • 当然,并非所有这 些目录存放的源文件都是密码算法和标准,有些是 OpenSSL本身的一些相关功能文件, 如 BIO,DSO 和 EVP 等 

  • 对称加密算法8种,非对称加密算法4种,信息摘要算法5种。 

 openssl文档目录

  • OpenSSL的文档使用Perl文档格式保存,为 “.pod”文件,对于 Windows平台的用户,阅读这样的文档可能存在一些麻烦,可以使用Perl工具pod2text或者pod2html 指令将文档转换成txt文本格式或者html格式以方便阅读。
  • doc文档涉及到 应用程序说明文档、密码算法库 API文档及SSL协议库API文档
  • 应用程序说明文档目录 (Apps)包含了大部分OpenSSL应用程序的使用和参数说明,并有部分例子。
  • 密码算法库API文档 (Crypto)则包含了部分OpenSSL密码算法库的API的使用说明,可惜不是很全面。
  • SSL协议库 API文档包含了 OpenSSL实现的SSL协议和 TLS协议的大部分 API使用说明,该部分由于变动比较缓慢,所以文档相对全面一些。此外, 目前版本的 OpenSSL文档目录下还有一个 Howto子目录,现在只有一个文件,内容是关于证书的一些问题,希望后续的版本能够丰富这个 Howto目录。
  • OpenSSL文档目录的根目录下还有个综述性质的文档 ssleay.txt 和 openssl.txt, 也是值得一看的 。

Openssl的功能

对称加密算法

  • OpenSSL一共提供了8种对称加密算法,其中7种是分组加密算法,仅有的一种流 加密算法是 RC4。这7种分组加密算法分别是 AES,DES,Blowfish,CAST,IDEA,RC2,RC5,都支持电子密码本模式 (ECB)、加密分组链接模式 (CBC)、加密反馈模式 (CFB)和输出反馈模式 (OFB)四种常用的分组加密模式
  • 其中,AES使用的加密反馈模式 (CFB)和输出反馈模式 (OFB)分组长度是128位,其他算法使用的则是64位。
  • 事实上,DES算法里面不仅仅是常用的 DES算法,还支持三个密钥和两个密钥的3DES 算法。
  •  OpenSSL 还使用EVP封装了所有的对称加密算法,使得各种对称加密算法能够使用统一的 API接口EVP_Encrypt 和 EVP_Decrypt 进行数据的加密和解密 ,大大 提高了代码的可重用性能 。

非对称加密算法

  • OpenSSL一共实现了4种非对称加密算法,包括 DH 算法、RSA 算法、DSA 算法和 椭圆曲线算法 (EC)。
  • DH算法一般用于密钥交换。RSA算法既可以用于密钥交换,也可以用于数字签名,当然,如果你能够忍受其缓慢的速度,那么也可以用于数据加密。
  • DSA 算法则一般只用于数字签名。
  • OpenSSL 也使用EVP技术对不同功能的非对称加密算法进行封装,提供了统一的 API接口。如果使用非对称加密算法进行密钥交换或者密钥加密, 则使用 EVP_Seal 和 EVP_Open 进行加密和解密 ; 如果使用非对称加密算法进行数字签名 ,则使用 EVP_Sign 和 EVP_Verify 进行签名和验证

信息摘要算法

  • OpenSSL实现了5种信息摘要算法,分别是 MD2,MD5,MDC2,SHA (SHA1)和 RIPEMD。SHA 算法事实上包括了SHA 和 SHA1两种信息摘要算法 。 此外 , OpenSSL还实现了 DSS标准中规定的两种信息摘要算法 DSS和 DSS1。

  • OpenSSL 采用EVP_Digest 接口作为信息摘要算法统 一 的 EVP 接 口 , 对所有信息摘要算法进行了封装,提高了代码的重用性。当然,跟对称加密算法和非对称加密算法不一 样,信息摘要算法是不可逆的,不需要一个解密的逆函数。

密钥和证书管理

  • 密钥和证书管理是PKI的一个重要组成部分 , OpenSSL 为之提供了丰富的功能 , 支持多种标准
  • 首先,OpenSSL实现了 ASN.1的证书和密钥相关标准,提供了对证书、公钥、私钥 、 证 书请求及CRL 等数据对象的DER , PEM 和 BASE64 的编解码功能 。 OpenSSL 提供了产生各种公开密钥对和对称密钥的方法、函数和应用程序,同时提供了对公钥和私钥 的 DER 编解码功能 , 并实现了私钥的PKCS#12 和 PKCS#8 的编解码功能 。 OpenSSL 在标准中提供了对私钥的加密保护功能,使得密钥可以安全地进行存储和分发。
  • 在此基础上,OpenSSL实现了对证书的 X.509标准编解码、PKCS#12格式的编解 码及 PKCS#7的编解码功能。并提供了一种文本数据库,支持证书的管理功能,包括证 书密钥产生、请求产生、证书签发、吊销和验证等功能。
  • 事实上,OpenSSL提供的CA应用程序就是一个小型的证书管理中心 (CA),实现 了证书签发的整个流程和证书管理的大部分机制。

SSL 和TLS 协议

  • 虽然已经有众多的软件实现了SSL的功能,但是OpenSSL里面实现的SSL协议能够让我们对SSL协议有一个更加清楚的认识,因为至少存在两点:一是OpenSSL实现的SSL协议是开放源代码的,我们可以研究SSL协议实现的每一个细节;二是OpenSSL实现的SSL协议是纯粹的SSL协议,没有跟其他协议(如HTTP)协议结合在一起。由于SSL协议现在经常跟HTTP协议在一起应用形成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和带mod_ssl的Apache等;而S_Server模拟了一个SSL服务器,可以用来测试SSL客户端,比如IE和Netscape等。事实上,由于是开放源代码的,S_Client和S_Server程序的源代码还是很好的OpenSSL的SSL接口API使用例子

应用程序

  • 现在OpenSSL的应用中,很多都是基于OpenSSL的应用程序而不是其API的,如OpenCA,就是完全使用OpenSSL的应用程序实现的。OpenSSL的应用程序是基于OpenSSL的密码算法库和SSL协议库写成的,所以也是一些非常好的OpenSSL的API使用范例,
  • OpenSSL的应用程序主要包括密钥生成、证书管理、格式转换、数据加密和签名、SSL测试,以及其他辅助配置功能。表4.4是OpenSSL-0.9.7版本的指令列表。在表4.4中,根据指令的性质,对指令进行了归类,这些归类不一定科学。
  • 这些类型包括:对称密钥指令、非对称密钥指令、信息摘要和签名指令、证书签发和管理指令、标准转换指令、SSL测试指令及其他指令。

 

Engine机制

  • Engine机制的目的是为了使OpenSSL能够透明地使用第三方提供的软件加密库或者硬件加密设备进行加密。 

  • 目前,OpenSSL的0.9.7版本支持的内嵌第三方加密设备有8种,包括:CryptoSwift,nCipher,Atala,Nuron,UBSEC,Aep,SureWare及IBM4758CCA的硬件加密设备。现在还出现了支持PKCS#11接口的Engine接口,支持微软CryptoAPI的接口也有人进行开发。当然,所有上述Engine接口支持不一定很全面

 BIO机制

  • BIO机制是OpenSSL提供的一种高层IO接口,该接口封装了几乎所有类型的IO接口,如内存访问、文件访问及Socket等。这使得代码的重用性大幅度提高,OpenSSL提供的API的复杂性也降低了很多。前面介绍的EVP封装也提高了OpenSSL代码的可重用性。

OpenSSL的应用

  • penSSL的应用一般可以分为两种不同的方式:基于OpenSSL指令的应用和基于OpenSSL加密库和协议库的应用。前者更容易一些,而后者需要做的工作更多一些。当然,这些应用不一定是截然分开的,你当然可以两种都用一点,比如使用SSL协议的API,但是证书可以使用OpenSSL的指令签发。

参考链接

  • GitHub - openssl/openssl: TLS/SSL and crypto library
  • openssl/openssl - Sourcegraph

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/446321.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 华氏温度转换为摄氏温度

题目 小明要到美国旅游,可是那里的温度是以华氏度为单位记录的。 它需要一个程序将华氏温度(80度)转换为摄氏度,并以华氏度和摄氏度为单位分别显示该温度。 公式:华氏温度(摄氏温度-32)/1.8 M…

hs控什么意思_凡尔赛文学 到底是什么?

点击蓝字关注我们XIE XIE NI DE XI HUAN|| 动漫 情头 耽美 闺蜜 男女头 句子控 壁纸 ||左句 凡尔赛文学野象:老是有人提知不知道凡尔赛文学,说实话我不太清楚网络时下流行的梗,也没有兴趣参与,我还是比较喜欢欧洲古典文学和后现…

密码学专题 openssl编译和安装

Configure 脚本文件 使得OpenSSL可以适应多种不同的系统平台和多达几十种不同的编译器。Configure指令还可以使OpenSSL在编译的时候具备组件的选择功能,比如可以选择支持或者不支持某种算法或者协议等,这使得OpenSSL具有很大的灵活性,比如在…

Python学习12 文件的读写

目标 文件的打开和关闭 mode缺省情况下表示只读r 文件的路径 前面加个r’,代表其中的转义字符不起作用 文件的打开方式 案例:实现文件拷贝的功能 将某一文件夹下的某一文件 保存在当前文件 所在目录。 import os #读取文件1 path./file.txt fileopen(path,…

密码学专题 openssl的基本概念

配置文件 配置文件是OpenSSL的一个基础结构组件,OpenSSL使用一组称为OpenSSLCONF的函数来读取OpenSSL配置文件的信息。OpenSSL提供的主配置文件是opensl.cnf,它集成了OpenSSL所要使用的配置文件选项的大部分内容。此外,OpenSSL还提供了其他一…

该工程中的宏被禁止_建筑劳务分包都能承担什么工程

来源:找法网建筑工程的承包单位,也就是总承包单位可以将部分建造工程分包给具有资质的施工单位,这是法律所允许的,但是禁止将建造工程进行转包。一、建筑劳务分包都能承担什么工程建筑劳务分包能承担什么工程要看分包单位的资质&a…

matlab用辛普森公式求积分_积分近似计算之辛普森公式

对于积分区间[a, b],若则成立辛普森公式辛普森公式可看作是改良的梯形公式。梯形公式是以直线逼近实际曲线,而辛普森公式则以二次曲线(即抛物线)逼近。以二次曲线逼近实际曲线根据辛普森公式可得各积分小区间内的积分值如下式所示:其中于是&a…

密码学专题 文件编码格式

OpenSSL中虽然使用PEM作为基本的文件编码格式,但是,由于不同的对象其封装的标准格式不太一样,所以经常会导致读者产生迷惑。此外,OpenSSL也支持DER编码和过时的Netscape编码格式(NET)OpenSSL的编码是基于ASN.1标准的,A…

echarts 折线图 设置y轴最小刻度_【硬货】vue全家桶+Echarts+百度地图,搭建数据可视化系统...

作者丨夙言来源丨前端大牛爱好者(Web-2017)https://segmentfault.com/a/1190000018993981本文章篇幅略长,内容有点多,大佬可根据目录选择性查阅,新人可一步步来阅读。1、 前言1.1 业务场景突然接到产品说要做一个数据监控的系统。有线图、柱状…

密码学专题 文本数据库

应用概述 文本数据库是跟OpenSSL的CA应用程序紧密结合在一起的,它以文本的方式记录CA已经签发的证书的状态和摘要信息。这些状态信息可以用于跟证书库相关的一些操作,比如使用ca指令生成CRL主要就是读取这个文本数据库的信息作为参考。文本数据库就是普…

Python学习13 异常处理机制

概括 常见的异常 异常处理机制 可以多个异常放在元组里面 一旦产生异常,try后面的语句不会继续执行,会做异常处理 异常使用场景1 close应该放在finally中 异常使用场景2 finally关键字 会执行except后面的,报错

java 布隆过滤器_牛逼哄哄的布隆过滤器,到底有什么用?

Java技术栈www.javastack.cn打开网站看更多优质文章作者:CodeBear的园子www.cnblogs.com/CodeBear/p/10911177.html本文是站在小白的角度去讨论布隆过滤器,如果你是科班出身,或者比较聪明,又或者真正想完全搞懂布隆过滤器的可以移…

Java web后端6 java Bean EL表达式

EL表达式和JSTL概述 java Bean规范 java中成员变量使用类Integer private Integer count; java Bean的创建 创建java Bean: BookTest.java package com.example.elandjstl.bean;public class BookTest {//java中成员变量使用类Integerprivate Integer count;private Boolean…

python根须系统斜杠_深入浅出Python中的os模块

「Author:Runsen」当初学Python的时候,把一些标准库和第三方开源库学的七零八落,不成系统,正好趁这个机会来系统的整理一下,先从Python常用的标准库os开始吧。osOS模块简单的来说它是一个Python的系统编程的操作模块&a…

Java web后端7JSTL

概括 下载jstl的jar包 官网&#xff1a;https://mvnrepository.com/ 网址1&#xff1a;https://search.maven.org/ 在pomxml中插入依赖&#xff1a; <dependency><groupId>taglibs</groupId><artifactId>standard</artifactId><version>1…

Python学习14 模块和包

模块 公共类、函数都可以放在独立的文件中&#xff0c;这样其他多个程序都可以使用&#xff0c;而不必把这些公共性的类、函数等在每个程序中复制一份&#xff0c;这样独立的文件就叫做模块&#xff0c;它们的扩展名为.py 标准库中的模块 使用help查看模块 代码&#xff1a; …

python语句分为_python以什么划分语句块

语句块是在条件为真&#xff08;条件语句&#xff09;时执行或者执行多次&#xff08;循环语句&#xff09;的一组语句&#xff1b;在代码前放置空格来缩进语句即可创建语句块&#xff0c;语句块中的每行必须是同样的缩进量&#xff1b;&#xff08;推荐学习&#xff1a;Python…

Python学习15 正则表达式1

网址 正则表达式测试网址&#xff1a;https://regex101.com/ 概述 正则表达式&#xff1a; 正则表达式(Regular Expression)是一种文本模式&#xff0c;包括普通字符&#xff08;例如&#xff0c;a 到 z 之间的字母&#xff09;和特殊字符&#xff08;称为"元字符"…

STL源码剖析 空间配置器 查漏补缺

ptrdiff_t含义 减去两个指针的结果的带符号整数类型ptrdiff_t (Type support) - C 中文开发手册 - 开发者手册 - 云社区 - 腾讯云 std::set_new_handler&#xff08;&#xff09;函数的理解 关于set_new_handler的理解_wck0617-CSDN博客new分配内存的时候 如果分配的空间不…

Python学习16 正则表达式2 re模块

re 模块 re 模块&#xff1a; Python的 re 模块实现了正则表达式处理的功能。 导入re模块后&#xff0c;使用findall、search函数可以进行匹配 查找&#xff1a;match和search 多个匹配上的&#xff0c;也只会返回第一个匹配上的 re.match()&#xff1a; 需要特别注意的是&…