在 Docker php:7.2-apache 上升级 OpenSSL 以连接到 smtp.gmail

Upgrade OpenSSL on Docker php:7.2-apache to connect to smtp.gmail

使用官方 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

我们的原始服务器在 Ubuntu 20.04 上运行,Openssl 1.1.1f for PHP,Docker 图像在 Debian 10 上,Openssl 1.1.1d 2019(默认安装) .
所以我手动安装了 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 我的想法和问题:

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

我终于恢复到 1.1.1d 并在此处应用此修复程序

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

This is a workaround for now:

Modify /etc/ssl/openssl.cnf config file as follows (fyi see known issues with OpenSSL 1.1.1 in Debian 10):

Change the last line from CipherString = DEFAULT@SECLEVEL=2 to CipherString = DEFAULT@SECLEVEL=1

I can connect to SQL Server 2017 or 2014 without the need to downgrade OpenSSL.

也有适用的 Dockerfile 片段。

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

小心 因为它可能会引发安全问题(在 github link 中也提到)