我的 DDEV-Local 项目访问 Internet 上服务器上的外部 SOAP API,例如“SOAP-ERROR: Parsing WSDL: Couldn't load from ...”。在升级到 DDEV v1.13 之前我没有遇到任何问题。问题可能出在哪里?
(SOAP 只是客户端 API 或通过 https 的 curl 请求可能失败的一个示例。大多数对不安全服务器的 https 客户端请求都会失败。)
我遇到了一种情况,即 TLS 版本不是问题,但curl: (35) error:141A318A:SSL routines:tls_process_ske_dhe:dh key too small
在尝试访问旧网站的内容时看到 curl 错误。
对我来说,问题不在于 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
DDEV-Local v1.13+ web 容器使用 Debian 10 Buster,它有一个更新的 OpenSSL 库,默认情况下不允许 TLS v1.0(这是过时的、不安全的,并且很快就会被 web 浏览器禁止)。但是,当然,有些服务器仍在使用 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