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

ngx_ssl_init

定义在 src\event\ngx_event_openssl.c 

ngx_int_t
ngx_ssl_init(ngx_log_t *log)
{
#if OPENSSL_VERSION_NUMBER >= 0x10100003Lif (OPENSSL_init_ssl(OPENSSL_INIT_LOAD_CONFIG, NULL) == 0) {ngx_ssl_error(NGX_LOG_ALERT, log, 0, "OPENSSL_init_ssl() failed");return NGX_ERROR;}/** OPENSSL_init_ssl() may leave errors in the error queue* while returning success*/ERR_clear_error();#elseOPENSSL_config(NULL);SSL_library_init();SSL_load_error_strings();OpenSSL_add_all_algorithms();#endif#ifndef SSL_OP_NO_COMPRESSION{/** Disable gzip compression in OpenSSL prior to 1.0.0 version,* this saves about 522K per connection.*/int                  n;STACK_OF(SSL_COMP)  *ssl_comp_methods;ssl_comp_methods = SSL_COMP_get_compression_methods();n = sk_SSL_COMP_num(ssl_comp_methods);while (n--) {(void) sk_SSL_COMP_pop(ssl_comp_methods);}}
#endifngx_ssl_connection_index = SSL_get_ex_new_index(0, NULL, NULL, NULL, NULL);if (ngx_ssl_connection_index == -1) {ngx_ssl_error(NGX_LOG_ALERT, log, 0, "SSL_get_ex_new_index() failed");return NGX_ERROR;}ngx_ssl_server_conf_index = SSL_CTX_get_ex_new_index(0, NULL, NULL, NULL,NULL);if (ngx_ssl_server_conf_index == -1) {ngx_ssl_error(NGX_LOG_ALERT, log, 0,"SSL_CTX_get_ex_new_index() failed");return NGX_ERROR;}ngx_ssl_session_cache_index = SSL_CTX_get_ex_new_index(0, NULL, NULL, NULL,NULL);if (ngx_ssl_session_cache_index == -1) {ngx_ssl_error(NGX_LOG_ALERT, log, 0,"SSL_CTX_get_ex_new_index() failed");return NGX_ERROR;}ngx_ssl_ticket_keys_index = SSL_CTX_get_ex_new_index(0, NULL, NULL, NULL,NULL);if (ngx_ssl_ticket_keys_index == -1) {ngx_ssl_error(NGX_LOG_ALERT, log, 0,"SSL_CTX_get_ex_new_index() failed");return NGX_ERROR;}ngx_ssl_ocsp_index = SSL_CTX_get_ex_new_index(0, NULL, NULL, NULL, NULL);if (ngx_ssl_ocsp_index == -1) {ngx_ssl_error(NGX_LOG_ALERT, log, 0,"SSL_CTX_get_ex_new_index() failed");return NGX_ERROR;}ngx_ssl_certificate_index = SSL_CTX_get_ex_new_index(0, NULL, NULL, NULL,NULL);if (ngx_ssl_certificate_index == -1) {ngx_ssl_error(NGX_LOG_ALERT, log, 0,"SSL_CTX_get_ex_new_index() failed");return NGX_ERROR;}ngx_ssl_next_certificate_index = X509_get_ex_new_index(0, NULL, NULL, NULL,NULL);if (ngx_ssl_next_certificate_index == -1) {ngx_ssl_error(NGX_LOG_ALERT, log, 0, "X509_get_ex_new_index() failed");return NGX_ERROR;}ngx_ssl_certificate_name_index = X509_get_ex_new_index(0, NULL, NULL, NULL,NULL);if (ngx_ssl_certificate_name_index == -1) {ngx_ssl_error(NGX_LOG_ALERT, log, 0, "X509_get_ex_new_index() failed");return NGX_ERROR;}ngx_ssl_stapling_index = X509_get_ex_new_index(0, NULL, NULL, NULL, NULL);if (ngx_ssl_stapling_index == -1) {ngx_ssl_error(NGX_LOG_ALERT, log, 0, "X509_get_ex_new_index() failed");return NGX_ERROR;}return NGX_OK;
}

这段代码是 Nginx 源码中用于初始化 OpenSSL 库的核心函数 ngx_ssl_init,其主要目的是为 Nginx 的 SSL/TLS 功能提供必要的初始化操作


ngx_int_t
ngx_ssl_init(ngx_log_t *log)
{
#if OPENSSL_VERSION_NUMBER >= 0x10100003Lif (OPENSSL_init_ssl(OPENSSL_INIT_LOAD_CONFIG, NULL) == 0) {ngx_ssl_error(NGX_LOG_ALERT, log, 0, "OPENSSL_init_ssl() failed");return NGX_ERROR;}/** OPENSSL_init_ssl() may leave errors in the error queue* while returning success*/ERR_clear_error();

 此时

#if OPENSSL_VERSION_NUMBER >= 0x10100003L

成立

OpenSSL 版本号大于等于 0x10100003L(即 OpenSSL 1.1.0 及以上版本),使用 OPENSSL_init_ssl 函数进行初始化


OPENSSL_init_ssl

在 OpenSSL 1.1.0 及以上版本中,OPENSSL_init_ssl 函数的声明位于以下头文件中:

#include <openssl/ssl.h>

OPENSSL_init_ssl 是 OpenSSL 1.1.0 引入的一个函数,用于初始化 SSL/TLS 库。

它的主要作用是替代旧版本中多个独立的初始化函数(如 SSL_library_init、SSL_load_error_strings 等),提供一个统一的接口来完成 SSL/TLS 的初始化工作。

函数原型如下:

int OPENSSL_init_ssl(uint64_t opts, const OPENSSL_INIT_SETTINGS *settings);

opts :

这是一个位掩码参数,用于指定初始化选项。



常见的选项包括:
OPENSSL_INIT_LOAD_CONFIG:加载 OpenSSL 配置文件(通常是 openssl.cnf)。
OPENSSL_INIT_LOAD_SSL_STRINGS:加载 SSL/TLS 相关的错误字符串。
OPENSSL_INIT_ADD_ALL_CIPHERS 和 OPENSSL_INIT_ADD_ALL_DIGESTS:注册所有加密算法和摘要算法。
OPENSSL_INIT_NO_LOAD_CONFIG:禁用配置文件加载。
更多选项可以参考 OpenSSL 文档。


settings :

这是一个指向 OPENSSL_INIT_SETTINGS 结构的指针,用于传递更高级的初始化设置。
在大多数情况下,可以传入 NULL,表示使用默认设置。


返回值
成功时返回 1。
失败时返回 0。



需要注意的是,即使 OPENSSL_init_ssl 返回成功,也可能在错误队列中留下未处理的错误信息。

因此,通常会在调用后清除错误队列:

ERR_clear_error();


    ngx_ssl_connection_index = SSL_get_ex_new_index(0, NULL, NULL, NULL, NULL);if (ngx_ssl_connection_index == -1) {ngx_ssl_error(NGX_LOG_ALERT, log, 0, "SSL_get_ex_new_index() failed");return NGX_ERROR;}ngx_ssl_server_conf_index = SSL_CTX_get_ex_new_index(0, NULL, NULL, NULL,NULL);if (ngx_ssl_server_conf_index == -1) {ngx_ssl_error(NGX_LOG_ALERT, log, 0,"SSL_CTX_get_ex_new_index() failed");return NGX_ERROR;}ngx_ssl_session_cache_index = SSL_CTX_get_ex_new_index(0, NULL, NULL, NULL,NULL);if (ngx_ssl_session_cache_index == -1) {ngx_ssl_error(NGX_LOG_ALERT, log, 0,"SSL_CTX_get_ex_new_index() failed");return NGX_ERROR;}ngx_ssl_ticket_keys_index = SSL_CTX_get_ex_new_index(0, NULL, NULL, NULL,NULL);if (ngx_ssl_ticket_keys_index == -1) {ngx_ssl_error(NGX_LOG_ALERT, log, 0,"SSL_CTX_get_ex_new_index() failed");return NGX_ERROR;}ngx_ssl_ocsp_index = SSL_CTX_get_ex_new_index(0, NULL, NULL, NULL, NULL);if (ngx_ssl_ocsp_index == -1) {ngx_ssl_error(NGX_LOG_ALERT, log, 0,"SSL_CTX_get_ex_new_index() failed");return NGX_ERROR;}ngx_ssl_certificate_index = SSL_CTX_get_ex_new_index(0, NULL, NULL, NULL,NULL);if (ngx_ssl_certificate_index == -1) {ngx_ssl_error(NGX_LOG_ALERT, log, 0,"SSL_CTX_get_ex_new_index() failed");return NGX_ERROR;}ngx_ssl_next_certificate_index = X509_get_ex_new_index(0, NULL, NULL, NULL,NULL);if (ngx_ssl_next_certificate_index == -1) {ngx_ssl_error(NGX_LOG_ALERT, log, 0, "X509_get_ex_new_index() failed");return NGX_ERROR;}ngx_ssl_certificate_name_index = X509_get_ex_new_index(0, NULL, NULL, NULL,NULL);if (ngx_ssl_certificate_name_index == -1) {ngx_ssl_error(NGX_LOG_ALERT, log, 0, "X509_get_ex_new_index() failed");return NGX_ERROR;}ngx_ssl_stapling_index = X509_get_ex_new_index(0, NULL, NULL, NULL, NULL);if (ngx_ssl_stapling_index == -1) {ngx_ssl_error(NGX_LOG_ALERT, log, 0, "X509_get_ex_new_index() failed");return NGX_ERROR;}

创建扩展索引 ,创建扩展数据索引,为 Nginx 的 SSL 相关结构分配扩展存储空间


return NGX_OK;

返回 NGX_OK

 

相关文章:

ngx_ssl_init

定义在 src\event\ngx_event_openssl.c ngx_int_t ngx_ssl_init(ngx_log_t *log) { #if OPENSSL_VERSION_NUMBER > 0x10100003Lif (OPENSSL_init_ssl(OPENSSL_INIT_LOAD_CONFIG, NULL) 0) {ngx_ssl_error(NGX_LOG_ALERT, log, 0, "OPENSSL_init_ssl() failed")…...

docker swarm常用命令

1、初始化Swarm集群 用于初始化一个Swarm集群&#xff0c;并将当前节点设置为Manager节点。 用法&#xff1a;docker swarm init --advertise-addr <Manager节点IP> # docker swarm init --advertise-addr 192.168.1.100 这会将当前节点初始化为Swarm集群的管理节点&…...

硬盘加密安全

‌硬盘加密性能需求核心指标与优化策略‌ ‌1. 核心性能指标‌ ‌读写速度影响‌&#xff1a; 硬盘加密需平衡安全性与数据吞吐效率。以BitLocker为例&#xff0c;其对4K随机写入性能的影响最高可达45%‌2&#xff0c;但在现代CPU&#xff08;支持AES-NI指令集&#xff09;下…...

推荐系统(二十二):基于MaskNet和WideDeep的商品推荐CTR模型实现

在上一篇文章《推荐系统&#xff08;二十一&#xff09;&#xff1a;基于MaskNet的商品推荐CTR模型实现》中&#xff0c;笔者基于 MaskNet 构建了一个简单的模型。笔者所经历的工业级实践证明&#xff0c;将 MaskNet 和 Wide&Deep 结合应用&#xff0c;可以取得不错的效果&…...

Ubuntu挂载HDD迁移存储PostgreSQL数据

关联博客&#xff1a;windows通用网线连接ubuntu实现ssh登录、桌面控制、文件共享 背景&#xff1a; 在个人ubuntu机器上安装了pgsql&#xff0c;新建了一张表插入了2000w数据用于模拟大批量数据分页查询用&#xff0c;但是发现查询也不慢&#xff08;在公司测试环境查询1700…...

Flink CDC Pipeline mysql to doris

版本兼容 flink 与 flink-cdc版本兼容 flink 与doris版本兼容 运行同步程序 最终在 flink-1.20.1 与 flink-cdc-3.1.1 跑通测试 配置yaml文件 [rootchb1 flink-cdc-3.1.1]# cat mysql2doris.yaml ##################################################################…...

LaTeX、KaTeX、Markdown 的用法

文章目录 1. LaTeX 用法概述1.1 LaTeX简介1.2 优点与应用场景2. LaTeX 基础语法2.1 文档结构2.2 文本格式化2.3 数学公式3. KaTeX 用法3.1 KaTeX简介3.2 基本使用方法3.2.1 引入KaTeX3.2.2 渲染数学公式3.2.3 自定义配置3.3 与LaTeX的兼容性4. Markdown 用法4.1 Markdown简介4.…...

Git 教程:从 0 到 1 全面指南 教程【全文三万字保姆级详细讲解】

目录 什么是 Git &#xff1f; Git 与 SVN 区别 Git 安装配置 Linux 平台上安装 Centos/RedHat 源码安装 Windows 平台上安装 使用 winget 工具 Mac 平台上安装 Git 配置 用户信息 文本编辑器 差异分析工具 查看配置信息 生成 SSH 密钥&#xff08;可选&#xf…...

事件类型——常见的键盘事件及应用

事件类型——常见的键盘事件及应用 键盘事件是前端交互的重要组成部分&#xff0c;通过 keydown 和 keyup 可以精准监听用户的按键行为&#xff0c;结合 key 和 code 属性实现多样化的逻辑。在实际开发中&#xff0c;需根据场景选择合适的事件和属性&#xff0c;并注意兼容性和…...

【 <二> 丹方改良:Spring 时代的 JavaWeb】之 Spring Boot 的未来:从微服务到云原生的演进

<前文回顾> 点击此处查看 合集 https://blog.csdn.net/foyodesigner/category_12907601.html?fromshareblogcolumn&sharetypeblogcolumn&sharerId12907601&sharereferPC&sharesourceFoyoDesigner&sharefromfrom_link <今日更新> 一、引子&…...

beego文件上传

1file.go 2html代码 3路由设置 beego.Router("/file/Upload", &controllers.FileUploadController{}, "post:Upload") 注意 1&#xff0c;得新建个upload文件夹 2&#xff0c;路由设置严格区分大小写。 biiego文件下载上传代码 github 觉得不错Star下...

2025-04-05 吴恩达机器学习5——逻辑回归(2):过拟合与正则化

文章目录 1 过拟合1.1 过拟合问题1.2 解决过拟合 2 正则化2.1 正则化代价函数2.2 线性回归的正则化2.3 逻辑回归的正则化 1 过拟合 1.1 过拟合问题 欠拟合&#xff08;Underfitting&#xff09; 模型过于简单&#xff0c;无法捕捉数据中的模式&#xff0c;导致训练误差和测试误…...

基于Python的图书借阅推荐系统设计与实现

【Python】基于Python的图书借阅推荐系统设计与实现 &#xff08;完整系统源码开发笔记详细部署教程&#xff09;✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 本项目基于Python语言和Django框架开发&#xff0c;旨在为用户提供一个高可靠、高便捷的图…...

数字与数学——常见面试算法题

目录 数字统计问题 符号统计 阶乘0的个数 溢出问题 整数反转 回文数 进制问题 七进制数 进制转换 数组实现加法 数组实现整数加法 字符串实现加法 二进制加法 幂运算 求2的幂 求3的幂 求4的幂 辗转相除法&#xff08;之前博客有过详细推导&#xff09; https…...

Lua:第1-4部分 语言基础

1 Lua语言入门 1.1 程序段 我们将 Lua 语言执行的每一段代码&#xff08;例如&#xff0c;一个文件或交互模式下的一行&#xff09;称为一个程序段 &#xff08; Chunk &#xff09; &#xff0c;即一组命令或表达式组成的序列 。 1.2 一些词法规范 Lua 语言中的标识符&#…...

2024版idea使用Lombok时报找不到符号

今天在springboot项目中使用Lombok的Builder注解&#xff0c;启动时居然报了找不到符号的错&#xff0c;如下图 于是开始了漫长的寻找之路&#xff0c;首先去settings->Plugins中看自己的Lombok插件是否启动&#xff0c;发现确实是如此&#xff0c;然后看网上的教程去加上这…...

python中的sort使用

目录 sort()使用 排序处理 升序由小到大排序&#xff1a; sort与sorted 总结 降序由大到小排序&#xff1a; key 参数详解 按字符串长度升序排序 按字符串第二个字符排序 sort()使用 list.sort(keyNone, reverseFalse) 功能&#xff1a;对列表原地排序&#xff08;直接…...

构建macOS命令速查手册:基于Flask的轻量级Web应用实践

构建macOS命令速查手册&#xff1a;基于Flask的轻量级Web应用实践 一、项目概述 本文介绍一个基于Flask框架开发的macOS命令速查Web应用。该应用通过结构化的命令数据存储和响应式前端设计&#xff0c;为用户提供便捷的命令查询体验&#xff0c;具备以下特点&#xff1a; 六…...

APP的兼容性测试+bug定位方法

兼容性问题定位 一、为什么会有兼容性问题&#xff1f;二、APP兼容性测试场景三、常见的一些兼容性bug0. 引言1. 常见兼容性bug&#xff08;1&#xff09;界面性问题&#xff08;2&#xff09;内存不足&#xff08;3&#xff09;网络问题&#xff08;4&#xff09;权限问题 通过…...

开源 PDF.js 文件编辑操作

一、PDF.js PDF.js 是 Mozilla 基金会推出的一个使用 HTML5 构建的 PDF 阅读器&#xff0c;它完全使用 JavaScript 编写。作为 Firefox 浏览器的默认 PDF 查看器&#xff0c;PDF.js 具有强大的兼容性和稳定性。它不仅支持 PDF 文件的查看和渲染&#xff0c;还提供了丰富的交互…...

云资源合规基线:确保云环境安全与合规的完整指南

1. 引言 随着越来越多的企业将其IT基础设施迁移到云端,确保云资源的安全性和合规性变得至关重要。云资源合规基线是一套最佳实践和标准,旨在帮助组织维护安全、高效且符合法规要求的云环境。本文将深入探讨云资源合规基线的各个方面,为IT管理者和安全专业人士提供全面的指导。…...

#SVA语法滴水穿石# (005)关于 问号表达式(condition ? expr1 : expr2)

在 SystemVerilog 断言(SVA)中,问号表达式(condition ? expr1 : expr2)的语法和逻辑与 C 语言的三元条件运算符完全一致。它根据条件选择执行 expr1 或 expr2,常用于动态选择信号、序列或属性。 1. 基本语法 // 格式: condition ? true_expression : false_expressi…...

操作系统、虚拟化技术与云原生及云原生AI简述

目录 操作系统基础 操作系统定义 操作系统的组成 操作系统的分类 Linux操作系统特性 虚拟化技术 概述 CPU虚拟化 内存虚拟化 I/O虚拟化 虚拟化技术 虚拟化平台管理工具 容器 容器与云原生&#xff1a;详细介绍 容器的特点 什么是云原生&#xff1f; 云原生的特点 容器与云原生的…...

springcouldalibaba5大组件

springcouldalibaba5大组件 Spring Cloud Alibaba 简介 Spring Cloud Alibaba 是阿里巴巴提供的一站式微服务解决方案&#xff0c;基于 Spring Cloud 框架&#xff0c;集成了阿里巴巴的分布式中间件技术。它通过简单的注解和少量配置&#xff0c;就能将 Spring Cloud 应用连接…...

opencv中mat深拷贝和浅拷贝

1. 浅拷贝&#xff08;Shallow Copy&#xff09; 特点&#xff1a; 共享数据内存&#xff0c;新对象和原对象指向同一块内存数据。 修改任一对象的数据会影响另一个对象&#xff08;因为内存共享&#xff09;。 高效&#xff08;仅复制矩阵头信息&#xff0c;不复制实际数据&…...

深入理解 C++ 三大特性之一 继承

欢迎来到干货小仓库!!! 今日的Commit 是明日的 Releasse&#xff0c;用持续交付的心态活成终身迭代的版本。 1.继承的定义 1.1定义格式 1.2继承关系和访问限定符 1.3继承基类成员访问方式的变化 类成员/继承方式public继承protected继承private继承基类的public成员派生类的…...

类 和 对象 的介绍

对象的本质是一种新的数据类型。类是一个模型&#xff0c;对象是类的一个具体化实例。为类创建实例也就是创建对象。 一、类&#xff08;class&#xff09; 类决定一个对象将是什么样的&#xff08;有什么属性、功能&#xff09;。类和变量一样&#xff0c;有名字。 1.创建类 …...

`use_tempaddr` 和 `temp_valid_lft ` 和 `temp_prefered_lft ` 笔记250405

use_tempaddr 和 temp_valid_lft 和 temp_prefered_lft 笔记250405 以下是 Linux 系统中与 IPv6 临时隐私地址相关的三个关键参数 use_tempaddr、temp_valid_lft 和 temp_prefered_lft 的详细说明及协作关系&#xff1a; &#x1f4dc; 参数定义与功能 参数作用默认值依赖关…...

LeetCode详解之如何一步步优化到最佳解法:20. 有效的括号

LeetCode详解系列的总目录&#xff08;持续更新中&#xff09;&#xff1a; LeetCode详解之如何一步步优化到最佳解法&#xff1a;前100题目录&#xff08;更新中...&#xff09;-CSDN博客 LeetCode详解系列的上一题链接&#xff1a; LeetCode详解之如何一步步优化到最佳解法…...

学习笔记,DbContext context 对象是保存了所有用户对象吗

DbContext 并不会将所有用户对象保存在内存中&#xff1a; DbContext 是 Entity Framework Core (EF Core) 的数据库上下文&#xff0c;它是一个数据库访问的抽象层它实际上是与数据库的一个连接会话&#xff0c;而不是数据的内存缓存当您通过 _context.Users 查询数据时&…...