【问题标题】:Upgrade OpenSSL on Docker php:7.2-apache to connect to smtp.gmail [closed]在 Docker php:7.2-apache 上升级 OpenSSL 以连接到 smtp.gmail [关闭]
【发布时间】:2021-05-17 08:49:25
【问题描述】:

使用官方 Docker php:7.2-apache 映像,我们将 Symfony 4.2 应用程序移至容器。
然后,我们的数据库连接 (SQL Server ODBC 17) 遇到了(看似)OpenSsl 的第一个问题。

SQLSTATE [08001, 10054]: [Microsoft][ODBC Driver 17 for SQL Server]TCP Provider: Error code 0x2746
SQLSTATE [08001, 10054]: [Microsoft][ODBC Driver 17 for SQL Server]Client unable to establish connection

我们的原始服务器在带有 Openssl 1.1.1f for PHP 的 Ubuntu 20.04 上运行,Docker 映像在带有 Openssl 1.1.1d 2019(默认安装)的 Debian 10 上。
所以我手动安装了 1.1.1f 版本(因为包 repo 上的最后一个稳定版本是 1.1.1d)

RUN rm /usr/bin/openssl
RUN cd /usr/local/src && wget https://www.openssl.org/source/openssl-1.1.1f.tar.gz && tar -xf openssl-1.1.1f.tar.gz
RUN cd /usr/local/src/openssl-1.1.1f && ./config && make && make install
RUN ln -s /usr/local/bin/openssl /usr/bin/openssl && ldconfig

与数据库的连接正常但是我们现在无法将 SwiftMailer 连接到我们的 gmail 帐户。

Swift_TransportException: Connecn could not be established with host smtp.gmail.com :stream_socket_client(): SSL operation failed with code 1. OpenSSL Error messages: error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed 

此 gmail 连接适用于 OpenSSL 1.1.1d - 所以我检查并发现 PHP 仍然使用 1.1.1d 作为 Header 库

OpenSSL support => enabled
OpenSSL Library Version => OpenSSL 1.1.1f  2020
OpenSSL Header Version => OpenSSL 1.1.1d  2019

所以我对 OpenSSL 的想法和问题:

  • 我发现要更新 Header 但是必须重新编译 PHP 并使用官方 Docker php:7.2-apache 图像,我不知道如何 继续(或者如果它甚至是一个好主意开始)。我应该怎么做?
  • 我不确定是不是因为这个问题,我会尝试使用更新的 库版本 - 1.1.1i(或更高版本)
  • 作为最后的手段,我可​​能会将我的基本映像更改为 ubuntu:20.04 并手动安装 PHP,但我觉得这可能是矫枉过正 - 并且会花费大量时间。这值得吗?

电子邮件和数据库连接都必须有效。

【问题讨论】:

    标签: php docker openssl gmail debian


    【解决方案1】:

    我最终恢复到 1.1.1d 并在此处应用了此修复

    https://github.com/microsoft/msphpsql/issues/1021
    从问题:

    这是目前的解决方法:

    修改 /etc/ssl/openssl.cnf 配置文件如下(仅供参考) Debian 10 中 OpenSSL 1.1.1 的问题):

    将最后一行从 CipherString = DEFAULT@SECLEVEL=2 更改为 CipherString = DEFAULT@SECLEVEL=1

    我无需降级即可连接到 SQL Server 2017 或 2014 OpenSSL。

    也有适用的 Dockerfile sn-p。

    RUN apt-get update -yqq \
        && apt-get install -y --no-install-recommends openssl \
        && sed -i -E 's/(CipherString\s*=\s*DEFAULT@SECLEVEL=)2/\11/' /etc/ssl/openssl.cnf \
        && rm -rf /var/lib/apt/lists/*
    

    请注意,因为它可能会引发安全问题(也在 github 链接中提及)

    【讨论】:

      猜你喜欢
      • 2020-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多