在 DDEV-Local v1.13+ 中,我遇到了针对外部站点的 API 失败(SSL/TLS 错误)

In DDEV-Local v1.13+ I get API failures (SSL/TLS errors) against external sites

我的 DDEV-Local 项目访问互联网服务器上的外部 SOAP API,例如 "SOAP-ERROR: Parsing WSDL: Couldn't load from ..."。在升级到 DDEV v1.13 之前,我没有遇到任何问题。这可能是什么问题?

(SOAP 只是客户端 API 或通过 https 的 curl 请求可能会失败的一个示例。大多数 https 客户端对不安全服务器的请求都会失败。)

DDEV-Local v1.13+ web 容器使用 Debian 10 Buster,它有一个更新的 OpenSSL 库,默认情况下不允许 TLS v1.0(它已经过时,不安全,很快就会被禁止)网络浏览器)。但是,当然,还有一些服务器仍在使用 TLS 1.0。

允许 TLS 1.0 的配置位于 /etc/ssl/openssl.cnf 的 Web 容器中:MinProtocol = TLSv1.2。如果在更新相关服务器之前需要将其更改为 TLSv1.0,则可以在 DDEV-Local 中使用自定义 Dockerfile 来完成。

在您的项目中添加一个 .ddev/web-build/Dockerfile,如下所示:

ARG BASE_IMAGE
FROM $BASE_IMAGE
RUN sed -i 's/TLSv1.2/TLSv1.0/g' /etc/ssl/openssl.cnf

请注意,如果您完全可以控制服务器,您确实希望更新服务器,因为您需要使用受支持的 TLS 版本。

感谢 Andreas Hoffmeyer 提供完整的解决方案。

在 DDEV 1.15.2 中,我遇到了类似的问题并且需要对 TLS 1.1 的支持:

ARG BASE_IMAGE
FROM $BASE_IMAGE
RUN sed -i 's/TLSv1.2/TLSv1.1/g' /etc/ssl/openssl.cnf

我遇到过 TLS 版本不是问题但在尝试访问旧站点内容时看到 curl 错误 curl: (35) error:141A318A:SSL routines:tls_process_ske_dhe:dh key too small

对我来说,问题不在于 TLS 版本,而在于 CipherString 安全级别。将 CipherString = DEFAULT@SECLEVEL=2 减少到 CipherString = DEFAULT@SECLEVEL=1 解决了问题:

ARG BASE_IMAGE
FROM $BASE_IMAGE
RUN sed -i 's/DEFAULT@SECLEVEL=2/DEFAULT@SECLEVEL=1/g' /etc/ssl/openssl.cnf