openssl3.2 - update debian12‘s default openssl to openssl3.2

文章目录

openssl3.2 - update debian12's default openssl to openssl3.2

概述

在debian12虚拟机中编译了openssl3.2(openssl3.2 - 编译)

只做openssl3.2的实验没问题, 但是用SSH连接就不行了. 原因在于系统中的openssl还是旧版.

bash 复制代码
lostspeed@debian12d4x64:~$ apt show openssl
Package: openssl
Version: 3.0.11-1~deb12u2
Priority: optional
Section: utils
Maintainer: Debian OpenSSL Team <pkg-openssl-devel@alioth-lists.debian.net>
Installed-Size: 2,346 kB
Depends: libc6 (>= 2.34), libssl3 (>= 3.0.9)
Suggests: ca-certificates
Homepage: https://www.openssl.org/
Tag: implemented-in::c, interface::commandline, protocol::ssl, role::program,
 scope::utility, security::cryptography, security::integrity,
 use::checking
Download-Size: 1,419 kB
APT-Sources: http://mirrors.tuna.tsinghua.edu.cn/debian bookworm/main amd64 Packages
Description: 安全套接字层工具箱 - 加密工具
 本软件包是 OpenSSL 项目对应用于在互联网上进行安全通信的 SSL 和 TLS 加密协议
 的一个实现。
 .
 它包含了通用命令行工具 /usr/bin/openssl,主要用于各类加密操作,例如:
  * 创建 RSA、DH 和 DSA 密钥选项;
  * 创建 X.509 证书、CSR 和 CRL;
  * 计算消息摘要;
  * 对密文的加密和解密;
  * 测试 SSL/TLS 客户端和服务端;
  * 处理 S/MIME 签名和加密的邮件。

lostspeed@debian12d4x64:~$ openssl version -a
OpenSSL 3.2.0 23 Nov 2023 (Library: OpenSSL 3.2.0 23 Nov 2023)
built on: Sat Jan 20 13:03:36 2024 UTC
platform: linux-x86_64
options:  bn(64,64)
compiler: gcc -fPIC -pthread -m64 -Wa,--noexecstack -Wall -O0 -g -DOPENSSL_USE_NODELETE -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_BUILDING_OPENSSL
OPENSSLDIR: "/usr/local/openssl_3d2/common"
ENGINESDIR: "/usr/local/openssl_3d2/lib64/engines-3"
MODULESDIR: "/usr/local/openssl_3d2/lib64/ossl-modules"
Seeding source: os-specific
CPUINFO: OPENSSL_ia32cap=0xfffa32034f8bffff:0x18405f5ef1bf27eb
lostspeed@debian12d4x64:~$ 

从以上命令可以看出:

  • debian12系统中看到的openssl还是3.0.11-1~deb12u2
  • 但是我自己编译后, 可以在本地运行的openssl是最新的稳定版 3.2.0

今天查了一下资料, 准备将debian12系统中的openssl也换成最新版的openssl3.2

笔记

查看libssl-dev也是旧版

bash 复制代码
lostspeed@debian12d4x64:~$ apt show libssl-dev
Package: libssl-dev
Version: 3.0.11-1~deb12u2
Priority: optional
Section: libdevel
Source: openssl
Maintainer: Debian OpenSSL Team <pkg-openssl-devel@alioth-lists.debian.net>
Installed-Size: 12.6 MB
Depends: libssl3 (= 3.0.11-1~deb12u2)
Suggests: libssl-doc
Homepage: https://www.openssl.org/
Tag: devel::lang:c, devel::library, implemented-in::TODO, implemented-in::c,
 protocol::ssl, role::devel-lib, security::cryptography
Download-Size: 2,430 kB
APT-Sources: http://mirrors.tuna.tsinghua.edu.cn/debian bookworm/main amd64 Packages
Description: Secure Sockets Layer toolkit - development files
 This package is part of the OpenSSL project's implementation of the SSL
 and TLS cryptographic protocols for secure communication over the
 Internet.
 .
 It contains development libraries, header files, and manpages for libssl
 and libcrypto.

lostspeed@debian12d4x64:~$ 

回到debian12自带的openssl版本

bash 复制代码
sudo apt update
sudo apt install openssl libssl-dev

现在查看openssl版本, 已经是linux自带的旧版本.

但是环境变量(OPENSSLDIR, ENGINESDIR, MODULESDIR)还是自己编译的新版的路径

bash 复制代码
openssl version -a
OpenSSL 3.0.11 19 Sep 2023 (Library: OpenSSL 3.2.0 23 Nov 2023)
built on: Sat Jan 20 13:03:36 2024 UTC
platform: linux-x86_64
options:  bn(64,64)
compiler: gcc -fPIC -pthread -m64 -Wa,--noexecstack -Wall -O0 -g -DOPENSSL_USE_NODELETE -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_BUILDING_OPENSSL
OPENSSLDIR: "/usr/local/openssl_3d2/common"
ENGINESDIR: "/usr/local/openssl_3d2/lib64/engines-3"
MODULESDIR: "/usr/local/openssl_3d2/lib64/ossl-modules"
Seeding source: os-specific
CPUINFO: OPENSSL_ia32cap=0xfffa32034f8bffff:0x18405f5ef1bf27eb

到现在为止, 就回到了debian12自带的openssl环境.

从源码编译安装最新版的openssl

bash 复制代码
sudo apt update
sudo apt install build-essential checkinstall zlib1g-dev

mkdir /home/lostspeed/openssl
cd /home/lostspeed/openssl

# 现在最新版本为3.2.1了, 不过为了自己学习openssl, 还是下载3.2.0版本
wget --no-check-certificate https://www.openssl.org/source/openssl-3.2.0.tar.gz

tar -xf openssl-3.2.0.tar.gz

cd openssl-3.2.0/

./config --debug --prefix=/usr/local/ssl --openssldir=/usr/local/ssl shared zlib

# 指定用和CPU数量一样的线程数来干活(锦上添花, 直接用make就可以)
make -j$(nproc)

make test

sudo make install

# openssl3.2 已经安装到了 /usr/local/ssl, 看一下
lostspeed@debian12d4x64:~/openssl/openssl-3.2.0$ ls -l /usr/local/ssl
总计 68
drwxr-xr-x 2 root root  4096  2月 6日 12:38 bin
drwxr-xr-x 2 root root  4096  2月 6日 12:38 certs
-rw-r--r-- 1 root root   412  2月 6日 12:38 ct_log_list.cnf
-rw-r--r-- 1 root root   412  2月 6日 12:38 ct_log_list.cnf.dist
drwxr-xr-x 3 root root  4096  2月 6日 12:38 include
drwxr-xr-x 5 root root  4096  2月 6日 12:38 lib64
drwxr-xr-x 2 root root  4096  2月 6日 12:38 misc
-rw-r--r-- 1 root root 12328  2月 6日 12:38 openssl.cnf
-rw-r--r-- 1 root root 12328  2月 6日 12:38 openssl.cnf.dist
drwxr-xr-x 2 root root  4096  2月 6日 12:38 private
drwxr-xr-x 4 root root  4096  2月 6日 12:39 share

配置openssl库选项, 配置目录在 /etc/ld.so.conf.d

bash 复制代码
lostspeed@debian12d4x64:~/openssl/openssl-3.2.0$ ls -l /etc/ld.so.conf.d
总计 16
-rw-r--r-- 1 root root  38 2023年 3月18日 fakeroot-x86_64-linux-gnu.conf
-rw-r--r-- 1 root root  44 2022年 9月23日 libc.conf
-rw-r--r-- 1 root root  91  1月20日 14:59 openssl.conf
-rw-r--r-- 1 root root 100  9月30日 16:31 x86_64-linux-gnu.conf

里面有我以前失败实验创建的openssl.conf, 删掉.

bash 复制代码
sudo rm /etc/ld.so.conf.d/openssl.conf 

建立编辑新的openssl库配置文件

bash 复制代码
sudo vi /etc/ld.so.conf.d/openssl-3.2.0.conf

# 添加库路径
/usr/local/ssl/lib64

# 关闭保存
:wq

# 重新载入so
sudo ldconfig -v

可以看到自己编译的openssl.so已经被载入了

bash 复制代码
/usr/local/ssl/lib64: (from /etc/ld.so.conf.d/openssl-3.2.0.conf:1)
	libssl.so.3 -> libssl.so.3
	libcrypto.so.3 -> libcrypto.so.3

配置路径

先备份一下

bash 复制代码
sudo cp /etc/environment /etc/environment.bk
bash 复制代码
# 这个文件在我这默认是空的
# 但是直接看PATH变量是有内容的
echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

编辑配置文件

bash 复制代码
sudo vi /etc/environment

# 添加如下内容
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games:/snap/bin:/usr/local/ssl/bin"

比较$PATH和添加的内容, 可以发现, 多添加了一些路径, 如下:

bash 复制代码
$PATH                 /usr/local/bin:          /usr/bin:      /bin:/usr/local/games:/usr/games

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games:/snap/bin:/usr/local/ssl/bin"

现在看openssl版本还是旧的.

将opessl的预安装文件改名

bash 复制代码
sudo mv /usr/bin/c_rehash /usr/bin/c_rehash.bk

# 用openssl看版本时, 用的就是下面的旧openssl
sudo mv /usr/bin/openssl /usr/bin/openssl.bk

更新环境变量

bash 复制代码
sudo source /etc/environment

这时, 再看openssl版本, 已经是新版的. 而且用的openssl位置, 也是自己源码编译安装后的位置.

bash 复制代码
lostspeed@debian12d4x64:~/openssl/openssl-3.2.0$ openssl version -a
OpenSSL 3.2.0 23 Nov 2023 (Library: OpenSSL 3.2.0 23 Nov 2023)
built on: Tue Feb  6 04:26:44 2024 UTC
platform: linux-x86_64
options:  bn(64,64)
compiler: gcc -fPIC -pthread -m64 -Wa,--noexecstack -Wall -O0 -g -DOPENSSL_USE_NODELETE -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_BUILDING_OPENSSL -DZLIB
OPENSSLDIR: "/usr/local/ssl"
ENGINESDIR: "/usr/local/ssl/lib64/engines-3"
MODULESDIR: "/usr/local/ssl/lib64/ossl-modules"
Seeding source: os-specific
CPUINFO: OPENSSL_ia32cap=0xfffa32034f8bffff:0x18405f5ef1bf27eb
lostspeed@debian12d4x64:~/openssl/openssl-3.2.0$ which openssl
/usr/local/ssl/bin/openssl
lostspeed@debian12d4x64:~/openssl/openssl-3.2.0$ 

确认更新后的环境变量

bash 复制代码
echo "$PATH" | tr ':' '\n'

/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/sbin
/bin
/usr/local/games
/usr/games
/snap/bin
/usr/local/ssl/bin

可以看到自己编译安装的openssl路径, 已经在PATH变量值的尾巴上.

确认现在系统中用的openssl位置和版本

bash 复制代码
lostspeed@debian12d4x64:~/openssl/openssl-3.2.0$ which openssl
/usr/local/ssl/bin/openssl
lostspeed@debian12d4x64:~/openssl/openssl-3.2.0$ type openssl
openssl 已被录入哈希表 (/usr/local/ssl/bin/openssl)
lostspeed@debian12d4x64:~/openssl/openssl-3.2.0$ openssl version
OpenSSL 3.2.0 23 Nov 2023 (Library: OpenSSL 3.2.0 23 Nov 2023)
lostspeed@debian12d4x64:~/openssl/openssl-3.2.0$ 

重启开机后, 发现环境变量不好使, 必须自己手工执行一下才行.

将环境变量开机启动.

bash 复制代码
cd /etc
sudo cp ./profile ./profile.bk
sudo vi ./profile

# 在export PATH 上面加一行改掉, 将openssl路径加上去.
if [ "$(id -u)" -eq 0 ]; then
  PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
else
  # 将这句话改为包含openssl路径, 要改的和上面手工运行的环境变量文件(/etc/environment)内容相同
  PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games:/snap/bin:/usr/local/ssl/bin"
fi
export PATH

# :wq
#重新开机启动

这回开机重启后, 进入桌面, 可以正常运行自己编译安装好的openssl.

配置ssl访问

如果只能在虚拟机桌面操作, 那太难受了, 配置为可以用SSH客户端远程访问.

最好是升级openssl之前, 就将ssh访问配好.
debian12.4配置

然后按照这篇笔记, 升级到openssl3.2

运行ssh --version时, 会出现下面的报错.

bash 复制代码
lostspeed@debian12d4x64:/$ ssh --version
OpenSSL version mismatch. Built against 300000a0, you have 30200000

此时, 只需要运行以下一句话就能搞定.

bash 复制代码
sudo mv /etc/ld.so.cache /etc/ld.so.cache_bak

此时, 再将SSH配置执行执行一下. 确认SSH配置的没问题.

bash 复制代码
sudo systemctl start ssh
sudo systemctl enable ssh
sudo systemctl status ssh

然后确定debian12所在的IP.

bash 复制代码
ip addr

然后去win10主机上, 先ping通debian12, 然后用SSH连接, 搞定.

重启后, 运行openssl3.2, 发现so用的是旧版本.

做软连接, 替换掉/usr/lib/x86_64-linux-gnu中的openssl so

bash 复制代码
cd /usr/lib/x86_64-linux-gnu
sudo mv ./libssl.so.3 ./libssl.so.3_bk
sudo ln -s /usr/local/ssl/lib64/libssl.so.3 /usr/lib/x86_64-linux-gnu/libssl.so.3

sudo mv ./libcrypto.so.3 ./libcrypto.so.3.bk
sudo ln -s /usr/local/ssl/lib64/libcrypto.so.3 /usr/lib/x86_64-linux-gnu/libcrypto.so.3

现在openssl是新版的了.

现在看看ssh

bash 复制代码
ssh -V
OpenSSL version mismatch. Built against 300000a0, you have 30200000

看看重新配置一下ssh行不行

bash 复制代码
sudo systemctl start ssh
sudo systemctl enable ssh
sudo systemctl status ssh

没报错.

重新启动试试.

查看ssh状态, 失败

重新用上面3条语句配置试试.

不行啊

bash 复制代码
lostspeed@debian12d4x64:~$ sudo systemctl start ssh
Job for ssh.service failed because the control process exited with error code.
See "systemctl status ssh.service" and "journalctl -xeu ssh.service" for details.
bash 复制代码
lostspeed@debian12d4x64:~$ ssh -V
OpenSSL version mismatch. Built against 300000a0, you have 30200000

好像必须要从源码编译ssh才行.

已经从源码编译安装配置了openSSH(debian12 - openssh-9.6.P1的编译安装)

debian12重启后, 已经可以从win10用SSH客户端链接debian12 😛

END

相关推荐
许野平8 天前
OpenSSL:生成 DER 格式的 RSA 密钥对
服务器·网络·openssl·rsa·pem·der
Xnah_9 天前
ubuntu 20.4 安装 openssl 3.x
ubuntu·openssl
redwingz15 天前
openssl签名报错
openssl·random
Anlige25 天前
PHP实现OPENSSL的EVP_BytesToKey
开发语言·php·openssl·evp
cooldream20091 个月前
升级 OpenSSL 的详细步骤(解决 SSH 漏洞的前提)
运维·ssh·openssl
年薪丰厚1 个月前
如何手动安装libcrypto.so.10和libssl.so.10这两个库?
openssl·libcrypto.so.10·libssl.so.10
恋喵大鲤鱼2 个月前
openssl(1) command
openssl
pzs02212 个月前
openssl的使用
openssl
小亦小亦_空中接力2 个月前
openssl+keepalived安装部署
openssl·keepalived
摸鱼手会滑2 个月前
源码编译安装python3.12没有ssl模块,python3.12 ModuleNotFoundError: No module named ‘_ssl‘
ssl·openssl·python3