文章目录
-
- [openssl3.2 - update debian12's default openssl to openssl3.2](#openssl3.2 - update debian12's default openssl to openssl3.2)
- 概述
- 笔记
- 回到debian12自带的openssl版本
- 从源码编译安装最新版的openssl
- 配置ssl访问
- END
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 😛