微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决在 Docker php:7.2-apache 上升级 OpenSSL 以连接到 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 作为标题

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,但我觉得这可能是 Overkill - 并且会花费很多时间。这值得吗?

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

解决方法

我最终恢复到 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 片段。

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 链接中提到)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。