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

一、

前言:

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/openssllinux-vdso.so.1 =>  (0x00007fffd0ddb000)libssl.so.3 => not foundlibcrypto.so.3 => not foundlibdl.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/openssllinux-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.mzph.cn/pingmian/42697.shtml

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

相关文章

MySQL8.0在windows下的下载安装及详细使用

下载mysql8.0二进制包 下载地址&#xff1a;MySQL :: Download MySQL Community Server 编辑my.ini配置文件 解压二进制包&#xff0c;新建/编辑my.ini配置文件(如果不存在则新建) [client] #客户端设置&#xff0c;即客户端默认的连接参数 # 设置mysql客户端连接服务端时…

Canvas:掌握颜色线条与图像文字设置

想象一下&#xff0c;用几行代码就能创造出如此逼真的图像和动画&#xff0c;仿佛将艺术与科技完美融合&#xff0c;前端开发的Canvas技术正是这个数字化时代中最具魔力的一环&#xff0c;它不仅仅是网页的一部分&#xff0c;更是一个无限创意的画布&#xff0c;一个让你的想象…

回溯 | Java | LeetCode 39, 40, 131 做题总结

Java Arrays.sort(数组) //排序 不讲究顺序的解答&#xff0c;都可以考虑一下排序是否可行。 39. 组合总和 错误解答 在写的时候需要注意&#xff0c;sum - candidates[i];很重要&#xff0c;也是回溯的一部分。 解答重复了。是因为回溯的for循环理解错了。 class Solutio…

使用OpenCV与PySide(PyQt)的视觉检测小项目练习

OpenCV 提供了丰富的图像处理和计算机视觉功能&#xff0c;可以实现各种复杂的图像处理任务&#xff0c;如目标检测、人脸识别、图像分割等。 PyQt(或PySide)是一个创建GUI应用程序的工具包&#xff0c;它是Python编程语言和Qt库的成功融合。Qt库是最强大的GUI库之一。Qt的快速…

【开放集目标检测】Grounding DINO

一、引言 论文&#xff1a; Grounding DINO: Grounding DINO: Marrying DINO with Grounded Pre-Training for Open-Set Object Detection 作者&#xff1a; IDEA 代码&#xff1a; Grounding DINO 注意&#xff1a; 该算法是在Swin Transformer、Deformable DETR、DINO基础上…

逆变器学习笔记(三)

DCDC电源芯片外围器件选型_dcdc的comp补偿-CSDN博客、 1.芯片的COMP引脚通常用于补偿网络&#xff1a; 芯片的COMP引脚通常用于补偿网络&#xff0c;在控制环路中发挥重要作用。COMP引脚接电容和电阻串联接地&#xff0c;主要是为了稳定控制环路、调整环路响应速度和滤波噪声…

java Lock接口

在 Java 中&#xff0c;Lock 接口的实现类ReentrantLock 类提供了比使用 synchronized 方法和代码块更广泛的锁定机制。 简单示例&#xff1a; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock;public class ReentrantLockExampl…

关闭vue3中脑瘫的ESLine

在创建vue3的时候脑子一抽选了ESLine,然后这傻卵子ESLine老是给我报错 博主用的idea开发前端 ,纯粹是用不惯vscode 关闭idea中的ESLine,这个只是取消红色波浪线, 界面中的显示 第二步,在vue.config.js中添加 lintOnSave: false 到这里就ok了,其他的我试过了一点用没有

阿里云 OSS - 开通到使用、服务端签名直传(前后端代码 + 效果演示)

目录 开始 OSS 相关术语须知 阿里云 OSS 开通 阿里云 OSS 使用 官方文档教程 实战开发 阿里云 OSS 自动配置 环境配置 实战开发 服务端签名直传 概述 代码实现 开始 OSS 相关术语须知 中文 英文 说明 存储空间 Bucket 存储空间是您用于存储对象&#xff08;Ob…

DB-GPT-PaperReading

DB-GPT: Empowering Database Interactions with Private Large Language Models 1. 基本介绍 DB-GPT 旨在理解自然语言查询,提供上下文感知响应,并生成高精度的复杂 SQL 查询,使其成为从新手到专家的用户不可或缺的工具。DB-GPT 的核心创新在于其私有 LLM 技术,该技术在…

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

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

ThinkPHP定时任务是怎样实现的?

接到一个需求&#xff1a;定时检查设备信息&#xff0c;2分钟没有心跳的机器&#xff0c;推送消息给相关人员&#xff0c;用thinkphp5框架&#xff0c;利用框架自带的任务功能与crontab配合来完成定时任务。 第一步&#xff1a;分析需求 先写获取设备信息&#xff0c;2分钟之…

力扣双指针算法题目:快乐数

目录 1.题目 2.思路解析 3.代码展示 1.题目 . - 力扣&#xff08;LeetCode&#xff09; 2.思路解析 题目意思是将一个正整数上面的每一位拿出来&#xff0c;然后分别求平方&#xff0c;最后将这些数字的平方求和得到一个数字&#xff0c;如此循环&#xff0c;如果在此循环中…

【做一道算一道】和为 K 的子数组

给你一个整数数组 nums 和一个整数 k &#xff0c;请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续非空序列。 示例 1&#xff1a; 输入&#xff1a;nums [1,1,1], k 2 输出&#xff1a;2 示例 2&#xff1a; 输入&#xff1a;nums [1,2,3],…

前端面试题8

基础知识 解释一下什么是跨域问题&#xff0c;以及如何解决&#xff1f; 跨域问题是由于浏览器的同源策略限制了从一个源加载的网页脚本访问另一个源的数据。解决方法包括使用JSONP、CORS&#xff08;跨源资源共享&#xff09;、设置代理服务器等。 描述一下事件冒泡和事件捕获…

Flutter-实现悬浮分组列表

在本篇博客中&#xff0c;我们将介绍如何使用 Flutter 实现一个带有分组列表的应用程序。我们将通过 CustomScrollView 和 Sliver 组件来实现该功能。 需求 我们需要实现一个分组列表&#xff0c;分组包含固定的标题和若干个列表项。具体分组如下&#xff1a; 水果动物职业菜…

BigDecimal(double)和BigDecimal(String)有什么区别?BigDecimal如何精确计数?

BigDecimal(double)和BigDecimal(String)的区别 double是不精确的&#xff0c;所以使用一个不精确的数字来创建BigDecimal&#xff0c;得到的数字也是不精确的。如0.1这个数字&#xff0c;double只能表示他的近似值。所以&#xff0c;当我们使用new BigDecimal(0.1)创建一个Bi…

golang验证Etherscan上的智能合约

文章目录 golang验证Etherscan上的智能合约为什么要验证智能合约如何使用golang去验证合约获取EtherscanAPI密钥Verify Source Code接口Check Source Code Verification Status接口演示示例及注意事项网络问题无法调用Etherscan接口&#xff08;最重要的步骤&#xff09; golan…

归并排序的实现(递归与非递归)

概念 基本思想&#xff1a;归并排序&#xff08;MERGE-SORT&#xff09;是建立在归并操作上的一种有效的排序算法,该算法是采用分治法&#xff08;Divide andConquer&#xff09;的一个非常典型的应用。将已有序的子序列合并&#xff0c;得到完全有序的序列&#xff1b;即先使…

揭秘Conda:Python开发者必备的包管理神器

conda 简介 Conda 是一个开源的包管理系统和环境管理系统&#xff0c;用于安装和管理软件包以及创建和维护不同的软件环境。 它最初是为 Python 语言设计的&#xff0c;但现在已经支持多种编程语言&#xff0c;包括 R、Ruby、Lua、Scala 等。 1、Anaconda&#xff1a;是一个…