在 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 我的想法和问题:
- 我发现要更新 Header 但是,必须重新编译 PHP
并使用官方 Docker php:7.2-apache 图像,我不确定如何
继续(或者如果开始是个好主意)。我该如何进行?
- 我不确定是不是因为这个问题,我会尝试使用更新的
库版本 - 1.1.1i(或更新版本)
- 作为最后的手段,我可能会将我的基本映像更改为 ubuntu:20.04 并手动安装 PHP,但我觉得这可能有点矫枉过正 - 并且会花费很多时间。这值得吗?
电子邮件和数据库连接都必须有效。
我终于恢复到 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 中也提到)
使用官方 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 我的想法和问题:
- 我发现要更新 Header 但是,必须重新编译 PHP 并使用官方 Docker php:7.2-apache 图像,我不确定如何 继续(或者如果开始是个好主意)。我该如何进行?
- 我不确定是不是因为这个问题,我会尝试使用更新的 库版本 - 1.1.1i(或更新版本)
- 作为最后的手段,我可能会将我的基本映像更改为 ubuntu:20.04 并手动安装 PHP,但我觉得这可能有点矫枉过正 - 并且会花费很多时间。这值得吗?
电子邮件和数据库连接都必须有效。
我终于恢复到 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 中也提到)