macOS中openssl命令显示LibreSSL版本的原因咨询
macOS中openssl命令显示LibreSSL版本的原因咨询
嗨,这事儿我太熟了!其实是苹果在macOS的某个版本开始,就把系统默认自带的「openssl」替换成了LibreSSL——但它还是沿用了openssl这个命令名和路径/usr/bin/openssl,所以你才会碰到这种“名不符实”的情况。
给你拆解一下你遇到的几个现象:
- 为什么
openssl version显示LibreSSL?因为/usr/bin/openssl这个二进制文件本身就是LibreSSL编译来的,只是名字没改成libressl而已,本质是苹果换了底层实现。 - 为什么
ls /usr/bin/ | grep libressl找不到相关文件?因为系统根本没单独提供libressl这个命令,直接把LibreSSL打包成了openssl的名字来用。 - 为什么
man openssl显示的是OpenSSL的手册?这是因为LibreSSL作为OpenSSL的分支,兼容大部分OpenSSL的命令和参数,系统也就沿用了原有的OpenSSL手册页,或者说手册内容是兼容两者的,所以看起来像是OpenSSL的文档。
如果你确实想用真正的OpenSSL(比如需要某些LibreSSL不支持的特性),可以通过Homebrew来安装:
- 先装Homebrew(如果还没装的话)
- 执行
brew install openssl - 安装完成后,把Homebrew版OpenSSL的路径加到你的shell配置文件里(比如
~/.zshrc或者~/.bashrc):# Intel芯片的macOS export PATH="/usr/local/opt/openssl/bin:$PATH" # M系列芯片的macOS export PATH="/opt/homebrew/opt/openssl/bin:$PATH" - 执行
source ~/.zshrc(或者对应的配置文件)刷新环境变量,再敲openssl version就能看到真正的OpenSSL版本了。
简单来说就是:macOS系统自带的openssl是“披着OpenSSL外壳的LibreSSL”,而你以为的“真正OpenSSL”可能还没加到系统优先调用的路径里~
备注:内容来源于stack exchange,提问作者FP34024




