第2章:OpenSSL 安装与编译——Linux、Windows、macOS 下的部署
说实话,搞 OpenSSL 的第一步不是学命令,而是先把它装对地方。我记得刚入行那会儿,直接在服务器上 apt install openssl 就开工了,结果后来要调 DTLS 特性,发现系统自带的版本压根不支持——那叫一个尴尬。所以这一章咱们就把三种主流系统下的安装和源码编译捋清楚。
2.1 包管理器安装:省心但有坑
大部分人图省事,都用包管理器装。我不拦你,但你得知道装的是哪个版本。
| 系统 | 包管理器命令 | 默认版本(2025年常见) | 备注 |
|---|---|---|---|
| Ubuntu/Debian | sudo apt install openssl libssl-dev |
3.0.x 或 1.1.1 | libssl-dev 是开发头文件,必装 |
| CentOS/RHEL 8+ | sudo dnf install openssl openssl-devel |
3.0.x | openssl-devel 对应开发包 |
| Fedora | sudo dnf install openssl openssl-devel |
3.1.x 甚至 3.2 | 比较激进,版本较新 |
| macOS (Homebrew) | brew install openssl |
3.x | 系统自带 LibreSSL,别混淆 |
| Windows (Chocolatey) | choco install openssl |
3.x 或 1.1.1 | 需管理员权限 |
我曾经在 Ubuntu 20.04 上直接 apt 装 OpenSSL 1.1.1,后来项目要求支持 TLS 1.3 的 early data,发现 1.1.1 虽然支持 TLS 1.3,但 early data 需要 1.1.1 以上且特定编译选项。最后只能手动编译 3.0。所以关键需求先确认,别躲懒。
2.2 源码编译:完全掌控
什么时候必须走源码编译?
- 需要特定补丁或自定义编译选项(比如禁用某算法、启用某硬件加速)。
- 生产环境要求锁定版本并审计源代码。
- 系统包管理器里版本太老,你又不想换系统源。
2.2.1 通用步骤
下载源码我通常去 官网 或 GitHub releases。以 OpenSSL 3.0.15 为例(写稿时最新 LTS):
cd /tmp
wget https://www.openssl.org/source/openssl-3.0.15.tar.gz
tar xzf openssl-3.0.15.tar.gz
cd openssl-3.0.15
配置、编译、安装三步走。我个人习惯把安装目录放 /opt/openssl-3.0.15,方便多版本共存:
./Configure --prefix=/opt/openssl-3.0.15 \
--openssldir=/opt/openssl-3.0.15/ssl \
shared \
enable-ec_nistp_64_gcc_128 \
linux-x86_64
make -j$(nproc)
make install
配置参数说明:
--prefix:安装根目录,二进制、库、配置文件都放这里。--openssldir:SSL 配置文件、证书、随机种子位置,不设则默认$prefix/ssl。shared:编译动态库(.so / .dylib),我建议加上,不然链接麻烦。enable-ec_nistp_64_gcc_128:64 位平台下启用椭圆曲线优化,能快不少。linux-x86_64:指定目标平台。macOS 用darwin64-x86_64-cc,Windows 用VC-WIN64A。
装完后把
/opt/openssl-3.0.15/bin 加到 PATH 前面,然后用 openssl version -a 确认。
项目中的 Makefile 可以通过 export PKG_CONFIG_PATH=/opt/openssl-3.0.15/lib/pkgconfig 来指定链接版本。
2.2.2 Windows 下的特别处理
Windows 下官方推荐用 Visual Studio 编译。我踩过坑——记得用「适用于 VS 的 x64 本机工具命令提示符」打开 PowerShell,别用普通 cmd。
# 在 x64 Native Tools Command Prompt 中
perl Configure VC-WIN64A --prefix=C:\OpenSSL --openssldir=C:\OpenSSL\ssl shared
nmake
nmake install
装完把 C:\OpenSSL\bin 加到系统 PATH,重启终端即可。如果要用静态库,shared 那行去掉,但链接时得带 libcrypto.lib 和 libssl.lib。
2.2.3 macOS:别跟系统冲突
macOS 自带了 LibreSSL(不是 OpenSSL),你用 openssl version 看到的可能是 LibreSSL 3.x。如果需要真 OpenSSL,建议编译后安装到独立目录,别动 /usr 或 /usr/local 里的系统库,否则升级 macOS 时可能炸。
./Configure --prefix=/usr/local/openssl-3.0.15 \
--openssldir=/usr/local/openssl-3.0.15/ssl \
shared \
darwin64-x86_64-cc
make -j$(sysctl -n hw.logicalcpu)
make install
然后配置环境变量(写进 ~/.zshrc):
export PATH="/usr/local/openssl-3.0.15/bin:$PATH"
export LDFLAGS="-L/usr/local/openssl-3.0.15/lib"
export CPPFLAGS="-I/usr/local/openssl-3.0.15/include"
2.3 验证安装
不管用哪种方式,装完后跑一下这几个命令确认:
openssl version -a
openssl engine -t
openssl list -cipher-commands | head -20
重点看编译时间(built on)、平台、启用的引擎。比如看到 engine: (rdrand) Intel RDRAND engine 说明硬件随机数生成器已启用。
每换一个版本,我会建个文本文件记下
openssl version -a 的输出和编译参数,方便以后排查问题时对照。你想想看,两年前编译的参数谁还记得?
2.4 知识结构总览
下面这张图把三种安装路径和关键决策点串起来了,你可以对照着选最适合自己场景的方式。
拿到一个正常运行的环境后,我们才能开始后面的诊断和调优。这一章的内容不算难,但细节多——编译参数错了、路径没配好,后续排错会多花几倍时间。我个人建议,如果是新服务器,先花 10 分钟走一遍源码编译,把环境握在自己手里,后面省心。