OpenSSL 3.3.0 + OQS QUIC 编译部署指南

Linux 环境中构建启用 QUIC 与 Open Quantum Safe (OQS) 算法支持的 OpenSSL 3.3.0。


📦 依赖安装


📦 RHEL/CentOS 系列依赖安装

适用于 RHEL, CentOS, RockyLinux, AlmaLinux 等:

1
2
sudo dnf groupinstall -y "Development Tools"
sudo dnf install -y git cmake ninja-build perl-core python3 openssl-devel perl-CPAN

如使用 CentOS 7,建议使用 devtoolset 安装 GCC 9+:

1
2
3
4
sudo yum install -y perl-CPAN
sudo yum install -y centos-release-scl
sudo yum install -y devtoolset-9
scl enable devtoolset-9 bash
1
2
3
# Ubuntu/Debian 系统
sudo apt update
sudo apt install -y git cmake ninja-build build-essential perl python3 cpanminus

🧱 准备工作目录

1
2
export BUILD_PATH=$HOME/build-openssl-oqs
mkdir -p $BUILD_PATH && cd $BUILD_PATH

🔧 步骤一:构建带 QUIC 支持的 OpenSSL

1
2
3
4
5
6
7
8
9
10
perl -MCPAN -e shell
install IPC/Cmd.pm

cd $BUILD_PATH
git clone --depth=1 --recursive -b openssl-3.3.0-quic1 https://github.com/quictls/openssl.git
cd openssl

./config --prefix=/usr/local/quictls
make -j$(nproc)
make -j$(nproc) install

🔒 步骤二:构建并安装 liboqs(量子加密算法)

1
2
3
4
5
6
7
8
9
10
11
cd $BUILD_PATH
git clone --depth=1 --recursive https://github.com/open-quantum-safe/liboqs
mkdir liboqs/build && cd liboqs/build

cmake -G"Ninja" .. \
-DCMAKE_INSTALL_PREFIX=/usr/local/oqs \
-DBUILD_SHARED_LIBS=ON \
-DOPENSSL_ROOT_DIR=/usr/local/quictls

ninja
ninja install

🧩 步骤三:构建并安装 oqs-provider 插件

1
2
3
4
5
6
7
8
9
10
11
cd $BUILD_PATH
git clone --depth=1 --recursive https://github.com/open-quantum-safe/oqs-provider.git
mkdir oqs-provider/build && cd oqs-provider/build

cmake .. \
-DOPENSSL_ROOT_DIR=/usr/local/quictls \
-DCMAKE_INSTALL_PREFIX=/usr/local/oqs-provider \
-DCMAKE_PREFIX_PATH=/usr/local/oqs

make -j$(nproc)
make install

⚙️ 步骤四:配置 OpenSSL 加载 oqs provider

创建配置文件 /etc/ssl/openssl-quic.cnf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
openssl_conf = openssl_init

[openssl_init]
providers = provider_sect
ssl_conf = ssl_sect

[provider_sect]
default = default_sect
oqs = oqs_sect

[default_sect]
activate = 1

[oqs_sect]
activate = 1
module = /usr/local/quictls/lib64/ossl-modules/oqsprovider.so

[ssl_sect]
system_default = system_default_sect

[system_default_sect]

🧪 验证安装

设置环境变量

1
2
3
export OPENSSL_CONF=/etc/ssl/openssl-quic.cnf
export OPENSSL_MODULES=/usr/local/quictls/lib64/ossl-modules
export LD_LIBRARY_PATH=/usr/local/quictls/lib64:$LD_LIBRARY_PATH

验证 provider 是否加载

1
2
3
OPENSSL_CONF=/etc/ssl/openssl-quic.cnf \
LD_LIBRARY_PATH=/usr/local/quictls/lib64:$LD_LIBRARY_PATH \
/usr/local/quictls/bin/openssl list -providers

输出应包含:

1
2
3
Providers:
default
oqs

查看支持的算法:

1
2
3
OPENSSL_CONF=/etc/ssl/openssl-quic.cnf \
LD_LIBRARY_PATH=/usr/local/quictls/lib64:$LD_LIBRARY_PATH \
/usr/local/quictls/bin/openssl list -public-key-algorithms

🧹 卸载(可选)

1
2
sudo rm -rf /usr/local/quictls /usr/local/oqs /usr/local/oqs-provider
sudo rm /etc/ssl/openssl-quic.cnf

📌 附录:自动配置环境(可选)

将以下内容添加到 .bashrc.zshrc

1
2
3
export OPENSSL_CONF=/etc/ssl/openssl-quic.cnf
export OPENSSL_MODULES=/usr/local/quictls/lib64/ossl-modules
export LD_LIBRARY_PATH=/usr/local/quictls/lib64:$LD_LIBRARY_PATH

本指南适用于开发和测试基于 OpenSSL + OQS 的后量子加密通信(例如 TLS/QUIC)。


🛠️ Systemd 服务配置示例(环境变量)

如果你希望使用带 OQS 的 OpenSSL 与 NGINX 或其他服务集成,需在 systemd unit 文件中配置环境变量:

例如编辑 /etc/systemd/system/nginx.service.d/openssl-oqs.conf

例如编辑 /lib/systemd/system/nginx.service.d/openssl-oqs.conf

1
2
3
4
[Service]
Environment="OPENSSL_CONF=/etc/ssl/openssl-quic.cnf"
Environment="OPENSSL_MODULES=/usr/local/quictls/lib64/ossl-modules"
Environment="LD_LIBRARY_PATH=/usr/local/quictls/lib64:$LD_LIBRARY_PATH"

然后重新加载并重启:

1
2
3
sudo systemctl daemon-reexec
sudo systemctl daemon-reload
sudo systemctl restart nginx

🌐 NGINX TLS 配置:支持 OQS KEM Group(ssl_ecdh_curve)

编辑 nginx.conf 或对应 TLS server 配置段:

1
ssl_ecdh_curve X25519MLKEM768:SecP384r1MLKEM1024:SecP256r1MLKEM768:X25519:P-384:P-256;

确保 NGINX 启动环境带有正确的 OpenSSL 路径与配置。

注意:需使用编译时链接 quictls OpenSSL 的 NGINX 版本,或者通过动态链接指定库路径。