docker PHP容器安装sqlserver扩展,,SSL routines:ssl_choose_client_version:unsupported protocol

完整错误信息

Uncaught PDOException: SQLSTATE[08001]: [Microsoft][ODBC Driver 17 for SQL Server]SSL Provider: [error:1425F102:SSL routines:ssl_choose_client_version:unsupported protocol]

场景描述

这个错误是
我在用docker pull php:7.2-fpm部署PHP环境把sqlserver 安装好后
pdo连接sqlserver报出的错误

本以为是因为odbc 没有安装好。。。
后Google查找解决了
原文

解决方法

下面是Google翻译出来的原文将就看

您列出的SQL Server版本包括TLS 1.2支持,因此您现在已经是客户端问题,这是正确的。之所以这样

RUN apt-get update -yqq \
&& apt-get install -y --no-install-recommends openssl \ 
&& sed -i 's,^\(MinProtocol[ ]*=\).*,\1'TLSv1.0',g' /etc/ssl/openssl.cnf \
&& sed -i 's,^\(CipherString[ ]*=\).*,\1'DEFAULT@SECLEVEL=1',g' /etc/ssl/openssl.cnf\
&& rm -rf /var/lib/apt/lists/*

错误的原因是因为rm -rf /var/lib/apt/lists/*删除了apt使用的回购数据,因此在安装php-fpm之后,Dockerfile中跟随它的安装均无效。但是无论如何,Debian 9上的openssl.cnf在Debian 9中没有MinProtocol和CipherString条目,因此这些命令不会做任何事情。您可以尝试手动添加它们-在Debian 9和10之间,openssl.cnf不会有太大变化,除了以下更改之外:

  • ess_cert_id_alg = sha1[tsa_config1]标题下添加
  • openssl_conf = default_conf在顶部附近添加
  • 最后添加以下内容:
[default_conf]
ssl_conf = ssl_sect
[ssl_sect]
system_default = system_default_sect

[system_default_sect]
MinProtocol = TLSv1.0
CipherString = DEFAULT@SECLEVEL=1

请注意,MinProtocol和CipherString通常设置为TLSv1.2DEFAULT@SECLEVEL=2。

你可能感兴趣的:(docker)