【问题标题】:Mongo server and openssl binary show different openssl versionsMongo 服务器和 openssl 二进制文件显示不同的 openssl 版本
【发布时间】:2020-10-02 06:52:42
【问题描述】:

在 CentOS 7 上安装 mongodb 后,我遇到了 openssl 版本的问题。系统上安装的版本是 1.0.2k-fips,而在 mongod 启动期间会打印 1.0.1e-fips。这到底是怎么可能的,有没有办法告诉 mongo 服务器使用 1.0.2 版本?

https://i.stack.imgur.com/KMbwt.png

【问题讨论】:

  • 这意味着 MongoDB 是使用静态链接的 OpenSSL 编译的,并且间接表明您已通过手动编译而不是使用打包安装来安装 MongoDB。你是怎么安装的?
  • 我按照 mongo 文档中的说明进行操作:docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat 在 yum.repos.d 中创建文件并运行“yum install -y mongodb-org”。这是否意味着 mongo 带有无法更改的预定义、静态链接的 openssl 版本?是否有可以运行 openssl 1.0.2 的 mongo 版本或我可以检查的地方?

标签: mongodb ssl openssl centos tls1.2


【解决方案1】:

这似乎是一个 RHEL peculiarity

MongoDB 与 OpenSSL 动态链接,应使用系统 OpenSSL 库。您可以通过运行来验证这一点

ldd `which openssl`
ldd `which mongod`

这两个命令应该显示对系统范围的libssllibcrypto 的引用。

我认为发生的事情是 RedHat 将 OpenSSL 从 1.0.1e 更新到 1.0.2k,但出于兼容性目的在部分代码中保留了“1.0.1e”标签。

【讨论】:

    【解决方案2】:

    确实,MongoDB使用系统 OpenSSL 库,可以通过ldd 进行验证。

    版本错误信息的问题是因为不久前(RHEL 6.x 版本),RedHat changed SSLeay() function 报告构建时间版本而不是运行-时间:

    由于某些应用程序对 OpenSSL 版本执行了不正确的版本检查,因此会屏蔽 OpenSSL 的实际运行时版本,而是报告构建时版本。因此,无法使用 SSLeay() 函数检测当前运行的 OpenSSL 版本。

    MongoDB 使用这个确切的函数来报告 OpenSSL 版本,here

    因此,当您使用 MongoDB 包并看到 1.0.1e-fips 而系统 OpenSSL 版本为 1.0.2k-fips 时,这仅意味着构建该包的系统具有较旧的 OpenSSL 版本,但实际运行时版本是您的系统一,1.0.2k-fips

    【讨论】:

    • 所以我实际上是在尝试创建 mongodb + openssl docker 容器。首先,我将 mongod 和 mongo 复制到 /usr/bin 中。此时我的图像上没有 openssl 二进制文件,但 mongo 启动时没有错误(照常打印 1.0.1)。如果我然后将 openssl 复制到 /usr/bin 中,我会提到版本不匹配。如果这只是 SSLeay 功能问题,当 openssl 二进制文件不存在时,mongo 不应该崩溃吗?这是否意味着我根本不需要二进制文件,或者它是一个错误,稍后它实际上会尝试访问它时会出错?据我了解二进制定义系统openssl版本
    猜你喜欢
    • 1970-01-01
    • 2014-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-28
    • 1970-01-01
    • 2022-10-16
    • 2022-08-22
    相关资源
    最近更新 更多