openssl不是内部或外部命令_OpenSSL新架构蓝图

概述

日前OpenSSL官网公布了未来OpenSSL的架构蓝图。作为战略性的架构目标,需要大量的版本迭代本文档概述了OpenSSL战略架构。它需要多个版本的迭代从目前最新的版本1.1开始直到3.0甚至是4.0最终实现。由于版本架构变动非常大,涉及大量的变化和迭代,力争在OpenSSL 3.0.0版本中实现对绝大多数应用程序的影响最小,并能高性能的编译迁移。3.0后对目前版本的功能将通过API来实现,现有引擎将不再支持。本文虫虫和大家一起来学习OpenSSL的现有架构、存在问题,新架构、特点,实现等。

现有架构

当前版本OpenSSL提供的功能主要通过四个主要组件提供:

1. libcrypto加密库。该库提供了大量加密算法的实现。另外提供libssl和libcrypto使用支持服务,以及CMS和OCSP等协议的实现。

2.引擎。 libcrypto的功能可以通过Engine API进行扩展。引擎是可动态加载的模块,它们向libcrypto注册并使用可用的钩子来提供加密算法实现。通常这些hook由libcrypto提供的算法的替代实现(例如,用于实现算法的硬件加速),还包括默认未在OpenSSL中实现的算法。引擎作为OpenSSL发行版的一部分提供,未实现的引擎则通过外部第三方提供。

3.libssl。该库依赖于libcrypto并实现TLS和DTLS协议。

4.应用程序。应用程序是一组命令行工具,这些工具使用底层的libssl和libcrypto库来提供一系列的加密和其他功能:

密钥和参数的生成和检查;

证书生成和检查;

SSL/TLS测试工具集;

ASN.1检查;

其他等。

现有架构的特点和问题

目前版本的OpenSSL具有以下特征和问题:

1.EVP层

EVP在API级别提供与具体加密功能实现和打包分开的的高级抽象接口。

EVP层还提供复合操作,例如签名和验证的打包。一些复合操作也EVP级操作提供(例如HMAC-SHA256)。

EVP还允许使用算法无关的方式使用加密算法(例如,EVP_DigestSign适用于RSA和ECDSA算法)。

2.不支持FIPS140。

FIPS140只能在OpenSSL-1.0.2中使用,它早于目前架构,不兼容API或ABI。

架构图

现有的体系结构是一个简单的4级分层,底部为引擎层和算法层。 TLS层依赖于加密层,应用程序依赖于TLS和加密层。

ae78bef5da4ba08ea3bc0d6a19d8009b.png

注意:图中组件的存在并不表示该组件是公共API或旨在供最终用户直接访问或使用。

打包图

以上的各层的功能和组件都被打包到了基础库(libcrypto和libssl)以及相关的引擎接口以及用于运行各种应用程序实现的"openssl"命令行可执行文件。打包图如下所示。

e770418c15293fca20b4b6ec8d5ea41c.png

新架构

新架构的特点

新架构的的目的是优化现有架构,新架构由一下功能组成:

1、核心服务由应用程序和应用程序提供器使用的构建块组成。 (例如BIO,X509,SECMEM,ASN1等)。

2、提供器实现加密算法和支持服务。提供器由以下一个或多个功能的组合:

算法的加密子,例如如何加密/解密/签名/哈希等

算法的序列化,例如如何将私钥转换为PEM文件。序列化当前支持的格式或者不支持的格式的扩展。

存储加载后端。 OpenSSL目前有一个存储加载程序,可以从文件中读取密钥,参数和其他项。提供器可以从另一个位置(例如LDAP目录)加载加载器。

提供器可以是完全独立的,也可以使用由不同提供器或核心服务提供的服务。

例如,应用程序可以使用一个加密原子实现由硬件加速提供程序实现的算法,但是其他程序提供的序列化服务把密钥导出为PKCS#12格式。

程序默认内置一个提供器(包含由当前OpenSSL加密算法实现的核心),但其他提供器可以在在运行时动态加载。

旧提供器模块将为较旧的算法(例如,DES,MDC2,MD2,Blowfish,CAST)提供加密实现。 OMC会发布一个策略,说明从旧提供器转化到默认提供器的时间和迁移方法。

FIPS提供器内嵌的OpenSSL FIPS加密模块可以在运行时动态加载。

3、核心实现对默认应用程序提供器(和其他提供商)提供的服务器的访问。提供器负责为Core提供服务和方法。

Core将实现基于属性的查找功能,用于算法查找,例如通过"fips = true"或"keysize = 128,constant_time = true"这样条件来搜索算法。

4、协议的实现。例如。 TLS,DTLS。

新架构的特点:

1、EVP层功能缩减,仅仅对提供器提供的服务进行打包。大多数功能将直接调用,没有或者很少的预处理和后处理。

2、将提供新的EVP API用来查找Core中提供给特定EVP调用的算法的实现。

信息将以与实现无关的方式在核心库和提供者之间传递。

3、旧API将被删除(例如绕过EVP层的底层API)。

4、OpenSSL FIPS加密模块将由动态加载的提供器实现,并且自包含,只依赖于核心提供的系统运行时库和服务。

5、其他接口也可能会随着时间的推移而转换到核心库。

6、引擎功能由提供器取代。

架构图

OpenSSL新架构图如下图所示。

cccd5b1e90c76a37d59e78d1be90f977.png

上图中显示的组件如下:

1、应用程层:命令行应用程序,例如ca,ciphers,cms,dgst等

2、协议:提供根据标准协议在端点之间进行通信的功能

TLS协议:所有支持的TLS/DTLS协议和支持基础设施的实现,例如:

SSLBIO:使用TLS进行通信的BIO

Statem:TLS状态机

RECORD:TLS记录层

其他协议:

CMS:加密消息语法标准的实现

OCSP:在线证书状态协议的实现

TS:时间戳协议的实现

支持服务:用于支持协议代码实现的组件

Packet:用于读取协议消息的内部组件

Wpacket:用于编写协议消息的内部组件

3、核心:这是将服务请求(例如加密)关联到该服务的提供器的基础组件。核心实现了提供器的注册几附属参数的设置。它还支持通过对给定服务属性进行服务的搜索功能。例如,加密服务的属性可能包括"aead","aes-gcm","fips","security-bits = 128"等。

4、默认提供器:实现核心启动时默认注册服务。

支持服务

低层实现:这是实际实现加密算法的一组组件。

5、FIPS提供器:实现一组经过FIPS验证并可供核心使用的服务。包括以下支持的服务:

POST:开机自检

KAT:已知的答案测试

完整性检查等等

6、旧提供器:提供通过EVP级API公开的旧算法的实现,为向后兼容提供服务。

7、第三方提供器:不属于OpenSSL发行版。第三方可以实施自己的提供者。

8、公共服务:这部分构成了应用程序和提供器可用的构建块。 (例如BIO,X509,SECMEM,ASN1等)。

9、旧版API。 低层API。这里的特指老API,而不是算法本身。例如,AES不是老算法,但它还在老API中(例如AES_encrypt)。

打包图

以上的架构图提供各种组件都会打包到一下文件,打包图如下:

可执行的应用程序供用户使用;

应用程序使用的库;

可动态加载的模块供核心使用。

9f4a9890f523200c187e5702836d9328.png

图中涉及的包有:

Openssl可执行文件。命令行应用程序。

libssl。这包含与TLS和DTLS直接相关的所有内容。它的内容与现有架构中的libssl大致相同,某些支持服务将移至libcrypto。

Libcrypto。该库包含以下组件:

核心服务的实现,例如:X509,ASN1,EVP,OSSL_STORE等

核心

与TLS或DTLS无关的协议

协议支持服务(例如Packet和Wpacket)

默认提供程序,包含所有默认算法的实现

Libcrypto旧程序。提供兼容老程序的底层API。这些APIS算法的实现可能来自任何提供器。

FIPS模块。它包含FIPS提供器程序,该提供程序实现一组经过FIPS验证并在核心中注册的服务。

旧模块。这包含旧版提供器程序。

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

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

相关文章

eclipse安装Hadoop-0.20.2插件

因为在使用Hadoop-0.20.2这个古董,需要使用它自带的eclipse插件,而我最初安装的是现代的eclipse4.10.0。 在经历两天,以及以下种种尝试之后,均以失败告终: 1.网上找适合的版本,据说有人编译好的hadoop-0.20…

java setcontenttype_response.setContentType()在Java过滤器中重置

我试图在过滤器中将压缩文件的内容类型设置为正确的mime类型,而不是application / gzip。这是我的一些代码:public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, Serv…

休眠事实:始终检查Criteria API SQL查询

Criteria API对于动态构建查询非常有用,但这是我使用它的唯一用例。 每当您有一个带有N个过滤器且可以以任意M个组合到达的UI时,都有一个API动态构造查询是有意义的,因为串联字符串始终是我所不愿使用的路径。 问题是,您是否知道…

JS基础(一)

1、JS脚本放置位置 页面内的JS脚本中,各种公共函数和变量应放在head标签之间,而将页面加载期间执行的代码、dom对象初始化以及与dom相关的全局引用赋值操作放在body标签之间,如果没有特殊要求,不妨放在body标签之前。 2、js命名…

treegrid,可以展开的jqgrid树

效果图 html部分 <div class"padding20 bgWhite marginTop20"> <div class"cus-grid row" id"grid-wrap"> <div class"col-lg-12"> <table id"list2"></table> …

winfrom软件开发汽车测试_ETci — 全自动软件测试调度(持续集成)平台

ETci 提供了编译- 测试- 发布解决方案&#xff0c;包括&#xff1a;自动提取配置库代码进行自动构建, 自动调度静态测试工具(如QAC)进行静态测试&#xff0c;自动调度单元测试工具(如Tessy)开展动态测试&#xff0c;自动调度HIL 自动化测试系统等。使得开发、测试团队在软件开发…

LVS负载均衡群集(NAT)

----构建NAT模式的LVS群集----------client---------------LVS----------------WEB1-----------WEB2------------NFS----2.2.2.100 eth0:2.2.2.1 eth1:192.168.1.1 192.168.1.10 192.168.1.20 192.168.1.200 一、准备工作1、添加模块[rootlocalhost ~]# modprobe ip_vs[rootloc…

查询锁表并解锁

查询锁定的表:SELECT l.session_id sid, s.serial#, l.locked_mode, l.oracle_username, l.os_user_name, s.machine, s.terminal, o.object_name, s.logon_time FROM v$locked_object l, all_objects o, v$session s WHERE l.object_id o.object_id AND l.session_id s.sid …

在POJO中使用ThreadLocal的Java嵌套事务

大多数嵌套事务是使用EJB实现的&#xff0c;现在我们尝试在POJO上实现嵌套事务。 在这里&#xff0c;我们使用了ThreadLocal的功能。 了解嵌套事务 事务可以嵌套在另一个内部。 因此&#xff0c;内部事务或外部事务可以回滚或提交&#xff0c;而不会影响其他事务。 创建新事务…

HTML存储详解

和大家一起先来了解一下H5之前的存储方式&#xff1a; cookies的诞生&#xff1a; http请求头上带着数据大小只能为4K主Domain的污染 下面是百度的一些Cookies HTTP中带√的表示&#xff0c;只能被服务器端修改的数据&#xff0c;一般用来存储身份验证等信息 cookies造成了…

java 导入excel到数据库_java导入excel到数据库

1.[文件] jxl-2.6.jar ~ 645KB 下载(124)2.[代码]将excel表格内容解析为listpackage com.utils;import java.io.File;import java.util.ArrayList;import java.util.List;import jxl.Sheet;import jxl.Workbook;import com.jiumai.shgold.model.aboutas.AboutAs;public cla…

智课雅思词汇---十六、前缀hyper和hypo是反义词

智课雅思词汇---十六、前缀hyper和hypo是反义词 一、总结 一句话总结&#xff1a; hypertension 过度紧张&#xff1b;高血压&#xff08;hypertension紧张&#xff09; hypotension 低血压 1、epi是什么意思&#xff1f; 前缀&#xff1a;ep-, epi-, eph- 【词根含义】&#x…

python神经网络库 keras_在Python和R中使用Keras和Tensorflow进行深度学习

了解TensorFlow 2.0和Keras在Python和R中的深度学习并构建神经网络深入了解人工神经网络(ANN)和深度学习了解Keras和Tensorflow库的用法了解适用人工神经网络(ANN)的业务场景使用Python和R构建人工神经网络(ANN)使用人工神经网络(ANN)进行预测完成本课程后&#xff0c;您将能够…

springboot 工程启动报错之Consider defining a bean of type ‘XXX’ in your configuration.

一、前言&#xff1a; 使用springboot自动注入的方式搭建好了工程&#xff0c;结果启动的时候报错了&#xff01;&#xff01;&#xff01;&#xff0c;错误如下图&#xff1a; Description:Field userEntityMapper in com.xxx.xxx.service.UserService required a bean of typ…

结合使用嵌入式Tomcat和Maven tomcat插件

使用Eclipse WTP开发Java Web应用程序时&#xff0c;我们需要在计算机中安装tomcat才能执行该应用程序。 如果在项目上使用Maven&#xff0c;则可以使用tomcat插件运行嵌入式tomcat安装并测试应用程序。 如下所示&#xff0c;这非常简单。 OBS&#xff1a;要执行本文中给出的…

java 自定义报表_灵活数据分析 | 自定义数据分析_集力数据系统平台_Java报表系统软件...

灵活数据分析集力数据系统数据分析是立足于让终端用户即使不懂专业计算机技术也能即时定义报表和分析数据的工具。用户只需关心业务需要&#xff0c;无需关心技术实现&#xff0c;通过拖拖拽拽、点点选选即可轻松制作列表式报表、分组报表、交叉报表、自由报表、组合报表等并进…

洛谷 P4878 [USACO05DEC]layout布局

题面链接 sol&#xff1a;差分约束系统裸题&#xff0c;根据ab<c建个图跑个最短路就没了。。。 #include <queue> #include <cstdio> #include <cstring> #include <iostream> using namespace std; #define int long long #define M(a,v) memset(a…

(1-1)line-height的定义和行内框盒子模型

&#xff08;1-1&#xff09;line-height的定义和与行内框盒子模型的关系 一、line-height的定义 line-height的定义&#xff1a; 行高&#xff0c;又称为两基线的距离。默认基线对齐&#xff08;因为CSS所有*线&#xff1a;总之就是各种定义的线都是和基线对齐的&#xff09…

PHP的命名空间

1.什么是命名空间&#xff0c;官方文档定义为&#xff1a; 什么是命名空间&#xff1f;从广义上来说&#xff0c;命名空间是一种封装事物的方法。在很多地方都可以见到这种抽象概念。例如&#xff0c;在操作系统中目录用来将相关文件分组&#xff0c;对于目录中的文件来说&…

Java与本机代理–他们所做的强大功能

在安装代理之前应了解的内容以及它如何影响您的代码 在构建可伸缩的服务器端应用程序时&#xff0c;我们花费大量时间思考如何在生产中监视&#xff0c;操作和更新代码。 已经开发出一种新的工具来帮助Java和Scala开发人员做到这一点。 它们中的许多都是基于最强大的方法之一构…