Ubuntu22.04(AzureVM)连接SQLServer遇SSL证书验证失败求助
问题原因
这是因为ODBC Driver 18 for SQL Server默认强制开启SSL证书验证,但Ubuntu 22.04系统中缺少SQL Server所使用的DigiCert根证书,导致验证失败。而Windows系统默认预装了微软相关的根证书,所以不会出现这个问题。
解决方法
方法一:临时禁用证书验证(仅测试环境使用)
修改PDO连接的DSN,添加TrustServerCertificate=Yes参数跳过证书验证:
<?php $dsn = 'sqlsrv:server=hogehoge;TrustServerCertificate=Yes'; $user = 'user'; $password = 'password'; $dbh = new PDO($dsn, $user, $password); $sql = "select * from user"; foreach ($dbh->query($sql) as $row) { echo $row['id'] . ' ' . $row['name'] . "<br>"; } $dbh = null; ?>
方法二:安装根证书(生产环境推荐)
通过以下步骤在Ubuntu系统中安装所需的根证书:
- 下载DigiCert全球根证书:
wget https://cacerts.digicert.com/DigiCertGlobalRootCA.crt.pem
- 将证书复制到系统信任证书目录:
sudo cp DigiCertGlobalRootCA.crt.pem /usr/local/share/ca-certificates/
- 更新系统证书缓存:
sudo update-ca-certificates
- 重启PHP相关服务(根据你的Web服务器选择):
- 若使用Apache:
sudo systemctl restart apache2
- 若使用PHP-FPM(替换为你的实际PHP版本,比如php8.0-fpm):
sudo systemctl restart php8.1-fpm
内容的提问来源于stack exchange,提问作者ssa
相关产品推荐
相关产品推荐

