SQL Linux/Kubernetes 上的 Server 2017 -- 设置 TLS 安全

SQL Server 2017 on Linux/Kubernetes -- Set up TLS Security

尝试在本文之后的我的 MSSQL 连接上配置 TLS:https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-encrypted-connections?view=sql-server-2017

服务器端配置看起来非常简单,容器环境略有不同(例如,systemctl 不存在,所以我 kill/respawn pod):

systemctl stop mssql-server 
cat /var/opt/mssql/mssql.conf 
/opt/mssql/bin/mssql-conf set network.tlscert /var/opt/mssql/ssl/mssql.pem 
/opt/mssql/bin/mssql-conf set network.tlskey /var/opt/mssql/ssl/mssqlprivkey.key
/opt/mssql/bin/mssql-conf set network.tlsprotocols 1.2 
/opt/mssql/bin/mssql-conf set network.forceencryption 0 
systemctl start mssql-server 

所以我从我的 Windows CA 中取出我的 PFX,并将密钥和客户端证书提取到密钥和 pem 文件中,将它们添加到永久存储的位置(/var/opt),运行 命令(见上文)和 sql 恢复了。

我在另一台机器上安装了 mssql-tools 并在信任锚中配置它以信任我的 CA。

但是,在尝试测试连接时 (sqlcmd -N -S tcp:1.1.1.1,1433 -U user -P password),出现错误:SSL Provider: [error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed:subject name does not match host name]

当我将连接字符串更改为 DNS 名称时,它有效 (sqlcmd -N -S tcp:mssql.mydomain.com,1433 -U user -P password) -- 即使 IP 地址在证书。

为什么使用 IP 的安全连接不起作用?我错过了什么?

不同的 TLS 客户端工具以不同的方式处理 IP 地址主题备用名称类型。大多数 Microsoft 工具完全忽略 iPAddress 名称类型,并要求将 IP 地址列为 dNSName 名称类型。尝试将 IP 地址添加到 SAN 扩展作为 dNSName 名称类型,它应该可以工作。