当前位置: 首页 > news >正文

OpenSSL provider

提供者

  • 标准提供者
  • 默认提供者
  • 传统提供者
  • FIPS 提供者
  • 基本提供者
  • 空提供者
  • 加载提供者

标准提供者

提供者是算法实现的容器。每当通过高级别 API 使用加密算法时,都会选择一个提供者。实际上是由该提供者实现执行所需的工作。OpenSSL 自带了五个提供者。在未来,我们预计第三方将分发自己的提供者,这些提供者可以动态添加到 OpenSSL 中。有关编写提供者的文档,请参阅 provider(7) 手册页。

默认提供者

默认提供者收集了所有标准内置的 OpenSSL 算法实现。如果应用程序未明确指定任何其他内容(例如在应用程序中或通过配置中),那么将使用这个提供者。如果尚未加载其他提供者,当我们首次尝试从提供者获取算法时,它将被自动加载。如果已加载其他提供者,那么它将不会被自动加载。因此,如果您想与其他提供者一起使用它,那么您必须显式加载它。

这是一个“内置”提供者,这意味着它编译和链接到 libcrypto 库中,并不存在为单独的独立模块。

传统提供者

传统提供者是一组传统算法的集合,这些算法要么已不再普遍使用,要么被认为是不安全的,并且强烈建议不要使用。然而,一些应用程序可能需要使用这些算法以实现向后兼容性。该提供者不会被默认加载。这可能意味着从之前版本的 OpenSSL 升级的一些应用程序可能会发现一些算法不再可用,除非它们显式加载传统提供者。

传统提供者中的算法包括 MD2、MD4、MDC2、RMD160、CAST5、BF(Blowfish)、IDEA、SEED、RC2、RC4、RC5 和 DES(但不包括 3DES)。

FIPS 提供者

FIPS 提供者包含了默认提供者中可用的一部分算法实现,这些算法符合 FIPS 标准。预期该提供者将通过 FIPS140-2 验证。

在某些情况下,与默认提供者中等价算法相比,该提供者中的算法实现可能存在细微的行为差异。这通常是为了符合 FIPS 标准。

基本提供者

基本提供者包含了默认提供者中可用的一小部分非加密算法。例如,它包含了用于将密钥序列化和反序列化为文件的算法。如果未加载默认提供者,则应始终加载该提供者(特别是如果您使用 FIPS 提供者)。

空提供者

空提供者“内置”到 libcrypto 中,不包含任何算法实现。为了确保默认提供者不会被自动加载,可以加载空提供者。

如果您正在使用非默认的库上下文,并希望确保默认库上下文不会被意外使用,这将会很有用。

加载提供者

要加载的提供者可以在 OpenSSL 配置文件中指定。有关如何通过配置文件配置提供者以及如何自动激活它们的信息,请参阅 config(5) 手册页。

以下是一个加载和激活默认库上下文中的传统提供者和默认提供者的最小配置文件示例。

openssl_conf = openssl_init[openssl_init]
providers = provider_sect[provider_sect]
default = default_sect
legacy = legacy_sect[default_sect]
activate = 1[legacy_sect]
activate = 1

也可以通过编程方式加载提供者。例如,您可以加载传统提供者到默认库上下文中,如下所示。请注意,一旦您显式地将提供者加载到库上下文中,默认提供者将不再自动加载。因此,通常还需要显式加载默认提供者,就像下面的示例一样:

#include <stdio.h>
#include <stdlib.h>#include <openssl/provider.h>int main(void)
{OSSL_PROVIDER *legacy;OSSL_PROVIDER *deflt;/* 将多个提供者加载到默认(NULL)库上下文中 */legacy = OSSL_PROVIDER_load(NULL, "legacy");if (legacy == NULL) {printf("加载传统提供者失败\n");exit(EXIT_FAILURE);}deflt = OSSL_PROVIDER_load(NULL, "default");if (deflt == NULL) {printf("加载默认提供者失败\n");OSSL_PROVIDER_unload(legacy);exit(EXIT_FAILURE);}/* 应用程序的其余部分 */OSSL_PROVIDER_unload(legacy);OSSL_PROVIDER_unload(deflt);exit(EXIT_SUCCESS);
}
http://www.lryc.cn/news/271197.html

相关文章:

  • pandas处理双周数据
  • 2023结婚成家,2024借势起飞
  • linux SHELL语句
  • 音频修复和增强软件:iZotope RX 10 (Win/Mac)中文汉化版
  • 复试 || 就业day03(2023.12.29)算法篇
  • 处理urllib.request.urlopen报错UnicodeEncodeError:‘ascii‘
  • 数据结构模拟实现LinkedList双向不循环链表
  • 性能优化-如何提高cache命中率
  • 分布式【4. 什么是 CAP?】
  • <软考高项备考>《论文专题 - 39采购管理(3) 》
  • Java在SpringCloud中自定义Gateway负载均衡策略
  • 前端 js 基础(1)
  • Android : 使用GestureOverlayView进行手势识别—简单应用
  • API集群负载统计 (100%用例)C卷 (JavaPythonNode.jsC语言C++)
  • 小梅哥Xilinx FPGA学习笔记18——专用时钟电路 PLL与时钟向导 IP
  • 低代码平台在金融银行中的应用场景
  • Css基础内容
  • 微服务(11)
  • 连锁门店管理需要信息化系统
  • UTF-8编码:打破字符编码的国界
  • HTML进阶
  • 基于策略模式和简单工厂模式实现zip、tar、rar、7z四种压缩文件格式的解压
  • 修改jenkins的目录(JENKINS_HOME)
  • Bytebase:统一数据库 CI/CD 解决方案 | 开源日报 No.128
  • History对象常用方法
  • 修改源码,element的el-table合并,处理合并产生的hover样式问题
  • IoT 物联网常用协议
  • 使用java备份和恢复SQLServer表数据
  • 27 UVM queue
  • 聊聊自动化测试的分层实践