centos7|操作系统|升级openssl-1.0.2k到openssl-3.3.0

news2024/11/29 0:53:18

一、

前言:

opensssl是什么软件?openssl的版本是怎样的?为什么需要升级openssl?如何升级openssl?

1、openssl是一个什么样软件?

OpenSSL是一个开源的安全套接字层(Secure Sockets Layer,SSL)和传输层安全(Transport Layer Security,TLS)协议的实现软件。它提供了强大的加密功能,包括加密算法、哈希函数、随机数生成器等,用于实现互联网通信的安全,如网站的HTTPS加密、TLS/SSL协议的握手、证书管理等。

OpenSSL项目不仅提供了命令行工具,用于加密解密数据、生成密钥对、管理证书等操作,还提供了一套丰富的编程库(C语言接口),允许开发者在自己的应用程序中使用这些加密技术。因此,OpenSSL被广泛应用于各种服务器软件、Web服务器、操作系统、嵌入式设备以及各种需要安全通信的软件产品中。

OpenSSL 是许多软件和系统的强依赖,因为它提供了关键的安全功能,包括加密、解密、证书管理等。以下是一些依赖于 OpenSSL 的重要软件和技术:

  1. Web 服务器:如 Apache HTTP Server 和 Nginx,它们依靠 OpenSSL 来实现 HTTPS 加密通信,保护网站数据传输的安全。

  2. 数据库系统:包括 MySQL、PostgreSQL 等数据库软件,使用 OpenSSL 来加密数据库连接,确保数据存储和访问的安全性。

  3. 编程语言及其库:如 Python、Ruby、PHP、Node.js(通过其libcrypto和libssl库)等,它们在处理安全连接、加密数据时,直接或间接依赖于 OpenSSL。

  4. 操作系统:大多数Linux发行版(如Ubuntu、Debian、Fedora、CentOS等)、BSD系统以及macOS,都将OpenSSL作为系统的一部分,用于系统级的加密服务和其他安全功能。

  5. 邮件服务器:例如Postfix、Dovecot,利用OpenSSL加密邮件传输,支持SMTPS、IMAPS等安全协议。

  6. 虚拟化和云平台:如OpenStack、VMware等,在管理虚拟机和云服务时,使用OpenSSL来保障通信安全。

  7. 移动应用和嵌入式系统:很多手机应用和物联网(IoT)设备中的软件也依赖OpenSSL进行安全通信和数据保护

  8. 包管理器:包括但不限于apt(通过libssl-dev)、yum/dnf、zypper等,需要OpenSSL来安全地从远程仓库获取和验证软件包。

  9. SSL/TLS客户端和库:如curl、wget、libcurl等,它们在发起HTTPs请求或实现安全的数据传输时,依赖OpenSSL

2、

OpenSSL的版本问题

OpenSSL的版本不断更新以修复安全漏洞、增加新特性及改进性能。由于版本迭代频繁,具体版本信息会随时间变化,但大致可以分为以下几个类别:

  1. 长期支持(LTS)版本:这些版本承诺提供多年的维护和支持,适合那些需要高度稳定性和长期安全更新的应用场景。例如,OpenSSL 1.0.2系列曾是一个LTS版本,虽已过期,但在其生命周期内得到了广泛使用。当前的LTS版本是OpenSSL 1.1.1系列,该系列增加了对TLS 1.3的支持,并持续接收安全更新和错误修正。

  2. 主流版本:除了LTS版本,OpenSSL项目还会发布一些非LTS的主要版本,这些版本包含最新的特性和改进,但支持周期相对较短。例如,随着OpenSSL 3.0.0在2021年9月的发布,它成为了最新的主流版本,带来了重大的内部架构变化、新特性和安全性增强。

  3. 维护更新和补丁版本:在每个主版本下,会有多个小版本和补丁级别的更新,用以修复发现的安全漏洞和问题。这些更新通常以版本号的第三位数字表示,如OpenSSL 1.1.1a到1.1.1k等。

例如,centos7.7版本默认的OpenSSL的版本如下:

[root@centos10 ~]# cat /etc/redhat-release 
CentOS Linux release 7.7.1908 (Core)
[root@centos10 ~]# openssl version
OpenSSL 1.0.2k-fips  26 Jan 2017

OpenSSL 1.0.2k-fips表示这是OpenSSL 1.0.2系列的一个特定版本,其中包含了FIPS(Federal Information Processing Standards,联邦信息处理标准)兼容模块。这里的"FIPS"指的是该版本经过了美国政府的FIPS 140-2(或者后续的FIPS 140-3)标准认证,这是一个评估加密模块安全性的标准。获得FIPS认证意味着该软件满足了美国政府对于加密算法的严格要求,这对于需要遵循政府安全规范的机构和系统尤为重要,尤其是在处理敏感或机密信息的环境下。

具体来说:

  • 1.0.2 表示这是OpenSSL 1.0.2系列的版本。
  • k 是在这个系列中的一个子版本标记,表明它是一个维护更新或安全修复的版本。
  • -fips 表明此版本包含了符合FIPS 140标准的加密模块,适用于需要遵循FIPS合规要求的系统部署。

使用"FIPS Mode"的OpenSSL会限制可使用的加密算法和操作模式到那些被FIPS标准所批准的范围内,确保所有加密操作都符合规范。

3、

OpenSSL为什么需要升级?

简单的一句话就可以概括:每一个软件都有bug,迭代升级的软件也会有更多的功能,因此,为了安全方面以及性能方面的考虑,必须要不断的升级软件,而操作系统自带的软件通常不是有安全方面的问题就是性能方面的问题

二、

升级的大体流程

1、获取新软件

2、安装新软件

3、如果新安装的软件有问题,并不能达到自身期望,需要回滚

4、如果新安装的软件没有问题,符合自身预期,需要测试软件的各个方面是否正常

5、清理安装过程产生的多余垃圾,确认完成升级工作

那么,很显然采用编译安装是比较方便的方式,因为编译安装一次后,就可以在其它的同类型的服务器上部署了,不需要再次编译

当你在一个服务器上从源代码编译安装OpenSSL后,生成的可执行文件、库文件以及其他必要的组件通常是静态的或已经编译为可在目标系统上直接运行的格式。这意味着,你不需要在其他服务器上再次编译OpenSSL,可以直接将编译好的产物复制或分发到其他服务器上重复使用。

不过,要注意以下几点:

  1. 系统兼容性:确保目标服务器的操作系统和架构(如x86、x86_64、ARM等)与编译OpenSSL的服务器相匹配。不同的操作系统或架构可能会导致二进制不兼容。
  2. 动态链接与静态链接:
    • 动态链接:如果OpenSSL是以动态库的形式编译(默认情况下经常如此),你需要将相应的动态库文件(如libssl.so*libcrypto.so*)复制到目标服务器的适当库目录下(如/usr/lib/usr/local/lib),并确保LD_LIBRARY_PATH环境变量包含了这些库的路径。
    • 静态链接:如果你在编译OpenSSL时选择了静态链接,则生成的可执行文件会包含OpenSSL的所有必要代码,这样就不需要在目标服务器上安装额外的OpenSSL库文件了。
  3. 配置与环境变量:某些程序或脚本可能需要知道OpenSSL的安装位置,特别是当它没有安装在标准路径下时。这可能涉及到修改PATH环境变量或特定应用的配置文件来指向正确的OpenSSL头文件和库文件路径。
  4. 权限与依赖:复制文件到目标服务器后,确保适当的权限设置,以免因权限问题影响程序的正常运行。同时,确认目标服务器上没有缺失OpenSSL运行所依赖的其他库或组件。

三、

升级OpenSSL步骤

1、

[ 3.3 ] - /source/old/3.3/index.html

在该网站下载OpenSSL的源码安装包,本次下载的是openssl-3.3.0.tar.gz

2、

解压openssl

tar xf openssl-3.3.0.tar.gz

3、

切换到解压后的目录

cd openssl-3.3.0

4、

安装编译所需的依赖

yum install perl-IPC-Cmd perl-Data-Dumper gcc gcc-c++ perl perl-devel -y

5、

预编译和编译

预编译命令

./Configure --prefix=/usr/local/openssl/

输出如下:

[root@centos10 openssl-3.3.0]# ./Configure --prefix=/usr/local/openssl/
Configuring OpenSSL version 3.3.0 for target linux-x86_64
Using os-specific seed configuration
Created configdata.pm
Running configdata.pm
Created Makefile.in
Created Makefile

**********************************************************************
***                                                                ***
***   OpenSSL has been successfully configured                     ***
***                                                                ***
***   If you encounter a problem while building, please open an    ***
***   issue on GitHub <https://github.com/openssl/openssl/issues>  ***
***   and include the output from the following command:           ***
***                                                                ***
***       perl configdata.pm --dump                                ***
***                                                                ***
***   (If you are new to OpenSSL, you might want to consult the    ***
***   'Troubleshooting' section in the INSTALL.md file first)      ***
***                                                                ***
**********************************************************************

编译和编译安装命令

make && make install

编译安装完成的最后日志大概如下:

install doc/html/man7/provider-encoder.html -> /usr/local/openssl//share/doc/openssl/html/man7/provider-encoder.html
install doc/html/man7/provider-kdf.html -> /usr/local/openssl//share/doc/openssl/html/man7/provider-kdf.html
install doc/html/man7/provider-kem.html -> /usr/local/openssl//share/doc/openssl/html/man7/provider-kem.html
install doc/html/man7/provider-keyexch.html -> /usr/local/openssl//share/doc/openssl/html/man7/provider-keyexch.html
install doc/html/man7/provider-keymgmt.html -> /usr/local/openssl//share/doc/openssl/html/man7/provider-keymgmt.html
install doc/html/man7/provider-mac.html -> /usr/local/openssl//share/doc/openssl/html/man7/provider-mac.html
install doc/html/man7/provider-object.html -> /usr/local/openssl//share/doc/openssl/html/man7/provider-object.html
install doc/html/man7/provider-rand.html -> /usr/local/openssl//share/doc/openssl/html/man7/provider-rand.html
install doc/html/man7/provider-signature.html -> /usr/local/openssl//share/doc/openssl/html/man7/provider-signature.html
install doc/html/man7/provider-storemgmt.html -> /usr/local/openssl//share/doc/openssl/html/man7/provider-storemgmt.html
install doc/html/man7/provider.html -> /usr/local/openssl//share/doc/openssl/html/man7/provider.html
install doc/html/man7/proxy-certificates.html -> /usr/local/openssl//share/doc/openssl/html/man7/proxy-certificates.html
install doc/html/man7/x509.html -> /usr/local/openssl//share/doc/openssl/html/man7/x509.html

6、

备份旧的OpenSSL,链接新OpenSSL的库文件

mv /usr/bin/openssl{,.bak}
ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl 
ln -s /usr/local/openssl/include/openssl /usr/include/openssl

此时检查OpenSSL,看看依赖是否正常,可以看到缺失依赖:

[root@centos10 openssl-3.3.0]# ldd  /usr/bin/openssl
	linux-vdso.so.1 =>  (0x00007fffd0ddb000)
	libssl.so.3 => not found
	libcrypto.so.3 => not found
	libdl.so.2 => /lib64/libdl.so.2 (0x00007f260f893000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f260f677000)
	libc.so.6 => /lib64/libc.so.6 (0x00007f260f2a9000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f260fa97000)

解决方法:在/etc/ld.so.conf这个文件末尾添加如下两行,并重新激活动态链接库 

/usr/local/openssl/lib/
/usr/local/openssl/lib64/

激活上面的路径

ldconfig -v

再次检查openssl这个可执行文件是否缺失依赖:可以看到前面缺失的库已经装载到内存了,OpenSSL可以使用了

[root@centos10 openssl-3.3.0]# ldd  /usr/bin/openssl
	linux-vdso.so.1 =>  (0x00007ffd6b1f3000)
	libssl.so.3 => /usr/local/openssl/lib64/libssl.so.3 (0x00007febf16dc000)
	libcrypto.so.3 => /usr/local/openssl/lib64/libcrypto.so.3 (0x00007febf1027000)
	libdl.so.2 => /lib64/libdl.so.2 (0x00007febf0e23000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007febf0c07000)
	libc.so.6 => /lib64/libc.so.6 (0x00007febf0839000)
	/lib64/ld-linux-x86-64.so.2 (0x00007febf19d9000)

检查OpenSSL的版本,确认升级正常:

[root@centos10 openssl-3.3.0]# openssl version -a
OpenSSL 3.3.0 9 Apr 2024 (Library: OpenSSL 3.3.0 9 Apr 2024)
built on: Sat Jul  6 11:22:31 2024 UTC
platform: linux-x86_64
options:  bn(64,64)
compiler: gcc -fPIC -pthread -m64 -Wa,--noexecstack -Wall -O3 -DOPENSSL_USE_NODELETE -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_BUILDING_OPENSSL -DNDEBUG
OPENSSLDIR: "/usr/local/openssl/ssl"
ENGINESDIR: "/usr/local/openssl//lib64/engines-3"
MODULESDIR: "/usr/local/openssl//lib64/ossl-modules"
Seeding source: os-specific
CPUINFO: OPENSSL_ia32cap=0xfffa32234f8bffff:0x1840071c219c27eb

四、

测试OpenSSL是否可以正常工作

  1. 查看版本信息:首先,你可以直接通过命令行检查OpenSSL的版本号,确认是否已更新到预期的版本。

    打开终端,输入以下命令:

     
    openssl version -a

    如果升级成功,这条命令将显示新安装的OpenSSL版本号。

  2. 检查SSL/TLS协议支持:新版本的OpenSSL可能支持更多或更新的SSL/TLS协议版本。你可以检查这些协议的支持情况:

     
    openssl ciphers -v 'ALL:!aNULL:!eNULL'

    这个命令会列出所有可用的加密套件和它们所支持的协议版本。

  3. 测试加密和解密功能:执行一个简单的加密和解密测试,以验证OpenSSL的常规功能是否正常工作:

     
    echo "test message" | openssl enc -aes-256-cbc -a -salt -iter 10000 -pass pass:testpassword

    输出如下:上面的命令会对"test message"这个消息进行AES-256-CBC加密,并使用"testpassword"作为口令。解密:

  4. [root@centos10 openssl-3.3.0]# echo "U2FsdGVkX18U9LnaQo3XPMlj8gr/GKe7/W6DrWKLUtk=" | openssl enc -d -aes-256-cbc -a -salt -iter 10000 -pass pass:testpassword
    test message
    

回退方法

上面的第六步反向操作即可

 

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

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

相关文章

Ubuntu 22.04.4 LTS 安装 FreeRADIUS 3.0 和 Daloradius 2.2 搭建radius 认证服务器

1 ubuntu 安装LAMP 环境&#xff08;安装nginx代替apache&#xff09;: Ubuntu 22.04.4 LTS 安装 php apache LAMP 环境nginx-CSDN博客 2 安装freeradius sudo apt update sudo apt-get install libmysqld-dev sudo apt-get install freeradius #先安装libmysqld-dev,否则启…

LabVIEW与OpenCV图像处理对比

LabVIEW和OpenCV在图像处理方面各有特点。LabVIEW擅长图形化编程、实时处理和硬件集成&#xff0c;而OpenCV则提供丰富的算法和多语言支持。通过DLL、Python节点等方式&#xff0c;OpenCV的功能可在LabVIEW中实现。本文将结合具体案例详细分析两者的特点及实现方法。 LabVIEW与…

FL Studio 2024 发布,添加 FL Cloud 插件、AI 等功能

作为今年最受期待的音乐制作 DAW 更新之一&#xff0c;FL Studio 2024发布引入了新功能&#xff0c;同时采用了新的命名方式&#xff0c;从现在起将把发布年份纳入其名称中。DAW 的新增功能包括在 FL Cloud 中添加插件、AI 驱动的音乐创作工具和 FL Studio 的新效果。 FL Cloud…

PsQuerySystemDllInfo逆向

typedef struct _SYSTEM_DLL_ENTRY {ULONG64 type;UNICODE_STRING FullName;PVOID ImageBase;PWCHAR BaseName;PWCHAR StaticUnicodeBuffer; }SYSTEM_DLL_ENTRY, * PSYSTEM_DLL_ENTRY; 返回值为上面的结构体指针 验证 type: fullname inagebase: pwchar basename PWCHAR …

java wait, notify, notifyAll三个方法

wait(), notify(), 和 notifyAll() 是 Java 中用于线程间通信和同步的方法&#xff0c;它们都是 Object 类中的方法&#xff0c;而非 Thread 类的方法。这些方法通常与 synchronized 关键字一起使用&#xff0c;用于实现线程之间的协作和互斥访问共享资源。 关于生产者-消…

Qt中word转换为pdf多线程QRunable继承QObject出现的问题

转换的时候&#xff0c;经常会用到转换结束通知显示进度&#xff0c;因此需要使用到多线程&#xff0c; class PdfRunable : public QRunnable, public QObject { Q_OBJECT public: PdfRunable(QObject *parent); ~PdfRunable(); void run(); signals: }; 初…

YOLOV8血细胞检测

原文&#xff1a;YOLOV8血细胞检测 - 知乎 (zhihu.com) 一、数据集准备 数据集下载参考如下文章 YOLOX算法实现血细胞检测-CSDN博客 voc格式的数据集需要转换成yolo格式 import xml.etree.ElementTree as ET import pickle import os from os import listdir, getcwd from …

概率统计(二)

二维离散型 联合分布律 样本总数为16是因为&#xff0c;两封信分别可以放在4个信箱 边缘分布律 条件分布律 独立性 选填才能用秒杀 联合概率乘积不等于边缘概率的乘积则不独立 二维连续型 区间用一重积分面积用二重积分 离散型随机变量

SystemUIService启动-Android13

SystemUIService启动-Android13 1、SystemUIService启动2、其他SystemUI services启动2.1 Dagger依赖注入2.2 Recents为例 1、SystemUIService启动 SystemUI启动&#xff0c;及其SystemUIService启动 <!-- SystemUi service component --><string name"config_s…

1.pwn的汇编基础(提及第一个溢出:整数溢出)

汇编掌握程度 能看懂就行&#xff0c;绝大多数情况不需要真正的编程(shellcode题除外) 其实有时候也不需要读汇编&#xff0c;ida F5 通常都是分析gadget&#xff0c;知道怎么用&#xff0c; 调试程序也不需要分析每一条汇编指令&#xff0c;单步执行然后查看寄存器状态即可 但…

排序-java(插入排序和选择排序)

一&#xff0c;分类 主要的排序大致分为以下几类&#xff1a; 1&#xff0c;插入排序&#xff0c;又分为直接插入排序和希尔排序 2&#xff0c;选择排序&#xff0c;又分为选择排序和堆排序 3&#xff0c;交换排序&#xff0c;又分为冒泡排序和快速排序 4&#xff0c;归并…

Fast R-CNN(论文阅读)

论文名&#xff1a;Fast R-CNN 论文作者&#xff1a;Ross Girshick 期刊/会议名&#xff1a;ICCV 2015 发表时间&#xff1a;2015-9 ​论文地址&#xff1a;https://arxiv.org/pdf/1504.08083 源码&#xff1a;https://github.com/rbgirshick/fast-rcnn 摘要 这篇论文提出了一…

YOLOv8_pose数据集可视化[关键点检测实践篇]

先贴代码,周末再补充解析。 这个篇章主要是对标注好的标签进行可视化,虽然比较简单,但是可以从可视化代码中学习到YOLOv8是如何对标签进行解析的。 import cv2 import numpy as np import os import randomdef read_pose_labels(label_file_path):with open(label_file_path…

MySQL的count()方法慢

前言 mysql用count方法查全表数据&#xff0c;在不同的存储引擎里实现不同&#xff0c;myisam有专门字段记录全表的行数&#xff0c;直接读这个字段就好了。而innodb则需要一行行去算。 比如说&#xff0c;你有一张短信表(sms)&#xff0c;里面放了各种需要发送的短信信息。 …

一.2.(1)双极型晶体三极管的结构、工作原理、特性曲线及主要参数

1.双极型晶体三极管的结构 学会区分P管和N管&#xff0c;会绘制符号 2.工作原理 无论是PNP 还是NPN&#xff0c;本质上放大时&#xff0c;都是发射结正偏&#xff0c;集电极反偏。&#xff08;可以简单理解为pn为二极管&#xff0c;每个三极管都有两个二极管&#xff09; 其中电…

commonjs、module 模块同时启动

怎样同时在一个项目中同时启动node服务和我们前端项目&#xff08;commonjs、module 模块同时启动&#xff09; 今天在使用node实现完增删改查的接口之后&#xff0c;将自己node代码嵌入到我们react项目中 启动完前端项目之后&#xff0c;当我使用node service.js的时候&#x…

【JavaWeb程序设计】JSP实现购物车功能

目录 一、结合之前所学的相关技术&#xff0c;编写代码实现以下购物车功能 1. 我实现的功能运行截图如下 &#xff08;1&#xff09;商品列表页面home.jsp &#xff08;2&#xff09;登录账号页面/未登录点击结账页面 &#xff08;3&#xff09;重新登录页面&#xff08;记…

STM32-PWR和WDG看门狗

本内容基于江协科技STM32视频学习之后整理而得。 文章目录 1. PWR1.1 PWR简介1.2 电源框图1.3 上电复位和掉电复位1.4 可编程电压监测器1.5 低功耗模式1.6 模式选择1.7 睡眠模式1.8 停止模式1.9 待机模式1.10 库函数 2. WDG看门狗2.1 WDG简介2.2 IWDG框图2.3 IWDG键寄存器2.4 …

如何搭建Ubuntu环境安装禅道

一、禅道安装部署的环境要求 禅道安装部署环境推荐使用 Linux Apache PHP7.0以上版本 MySQL5.5以上版本/MariaDB的组合。Nginx其次&#xff0c;不推荐IIS PHP组合。禅道需要使用PHP的这些扩展&#xff1a;pdo、pdo_mysql、json、filte、openssl、mbstring、zlib、curl、gd、…

Qt源码解析之QObject

省去大部分virtual和public方法后&#xff0c;Qobject主要剩下以下成员&#xff1a; //qobject.h class Q_CORE_EXPORT Qobject{Q_OBJECTQ_PROPERTY(QString objectName READ objectName WRITE setObjectName NOTIFY objectNameChanged)Q_DECLARE_PRIVATE(QObject) public:Q_I…