在 macOS 10.15.6 上使用 Homebrew 安装的 OpenSSL 似乎停留在版本 @1.1,是否可以获取最新版本?

在 macOS 10.15.6 上使用 Homebrew 安装的 OpenSSL 似乎停留在版本 @1.1,是否可以获取最新版本?

我正在使用 macOS 10.15.6 Catalina 和 Homebrew(最新版本 2.5.1)。当我这样做时,我注意到我的已安装公式列表中brew list有一个。[email protected]

我不记得我是否曾经openssl手动安装过或者它是否附带其他公式,但我肯定从未@1.1自己明确选择过该版本。

当我openssl version这样做时,它说LibreSSL 2.8.3

当我brew install openssl这样做时它说:

警告:[电子邮件保护]1.1.1g 已安装且为最新版本
要重新安装 1.1.1g,请运行brew reinstall [email protected]

相反,我尝试了brew install libressl。安装成功,但现在我openssl version仍旧提示LibreSSL 2.8.3

但是如果我这样做,它会/usr/local/opt/libressl/bin/openssl versionLibreSSL 3.1.4哪个版本似乎更新。所以现在显然安装了两个版本,但“默认”版本仍然是旧版本。

两个问题:

  1. 我只想使用最新的 openssl(或 libressl)。运行时openssl我希望它调用可用的最新版本。我可以或应该以某种方式删除该@1.1版本并只安装最新的 openssl 吗?或者像我一样安装 libressl,但我希望它是默认的,而不是旧的。

  2. 考虑到 @1.1 版本可能出于某种原因而存在,这是否意味着依赖于该特定版本的其他软件将不再工作?这感觉有点糟糕,例如,如果我碰巧有两个软件,每个软件都依赖于不同的特定版本,该怎么办?我可以指示依赖于旧 openssl 版本的软件使用该旧版本的特定路径,同时仅保持openssl(没有明确路径)为最新版本吗?

答案1

MacOS 包含一个旧版本的openssl,这是路径中的默认版本,也是您将看到的版本(尝试which openssl查看您的计算机上会选择哪一个)。

Homebrew 安装[email protected]/opt,这意味着您需要从那里明确调用它,并且如果您想将编译的其他程序链接到它,则需要设置库路径等。

libressl 也一样。

我只想使用最新的 openssl(或 libressl)。

我猜是二进制文件吧?一种方法是将您自己的$HOME/bin目录添加到 shell 中的前面PATH(无论如何我都推荐这样做),然后openssl在其中创建一个调用您要使用的版本的 shell 脚本。当您这样做时,您不会弄乱任何其他东西。

这是否意味着依赖该特定版本的其他软件将不再运行?

确实如此。这就是为什么你不应该替换 MacOS 自带的那个。

我可以指示依赖旧 openssl 版本的软件使用该旧版本的特定路径吗?

如果您以相反的方式执行此操作(在终端中使用不同的 PATH),那么您从终端外部调用的任何内容都不会中断,首先。


回答评论中的问题:

  1. 我有~/.profile一个

    export PATH=$HOME/bin:$PATH
    

    在里面。

  2. 这个答案即:创建一个~/bin/openssl文件

    #!/bin/bash
    exec /usr/local/opt/libressl/bin/openssl "$@"
    

在里面。别忘了chmod a+x ~/bin/openssl

环境将被传递,重定向将应用。通配符将在第一次调用时解析,但以解析后的形式传递。

相关内容