在SQLServer 2019中,有没有办法并行安装多个SSL证书?
我有以下情况:服务器所属的部门被出售,因此注册了新的 DNS 别名,*.oldcompany.com
现在调用的所有内容也都有一个新的 DNS 别名*.newcompany.com
。我们的 SQL-Server 现在具有以下名称,全部指向同一服务器/实例:
老公司 | 新公司 |
---|---|
app1.oldcompany.com | app1.newcompany.com |
app2.oldcompany.com | app2.newcompany.com |
app3.oldcompany.com | app3.newcompany.com |
到目前为止,一切都很简单,没有问题,让我们请求一个包含所有这些 DNS 名称的 SSL 证书Subject Alternative Name
...但现在出现了棘手的问题:
对于旧名称,由旧公司负责,对于新名称,由新公司负责,两者都有自己不同的 CA 和证书链,因此我最终得到一个用于 DNS 别名app1.oldcompany.com
、和 的证书,app2.oldcompany.com
以及app3.oldcompany.com
另一个用于app1.newcompany.com
、app2.newcompany.com
和的证书app3.newcompany.com
。
我设法使用 SQLServer 2019 配置管理器安装新公司的证书,如果连接字符串包含新的 DNS 别名之一,则一切正常,这两个选项Encrypt=False
或Encrypt=True
都可以使用,无需TrustServerCertificate=True
,但如果连接字符串包含旧的别名,Encrypt=True
仅与 一起使用TrustServerCertificate=True
。
有没有办法同时注册这两个证书?
不。
证书设置存储在注册表中
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\Your Instance Name Here\MSSQLServer\SuperSocketNetLib
名为 的密钥中Certificate
。这是一个REG_SZ
且仅允许一个指纹值,因此无法指定多个证书。另请参阅文档。理论上这可能是受支持的,因为 TLS 和 TDS 都有一个选项来指定您用于连接的主机名,但目前不支持。
您唯一的选择是获取“主题备用名称”字段中包含两个名称的单个证书。许多公共 CA 都提供此选项,并且使用私有 Microsoft AD CA 也可以轻松实现。
如果您需要由不同 CA 签署单个证书,那么这是不可能的,除非您可以让一个 CA 签署另一个 CA 的根证书,或者让两个 CA 交叉签署可以颁发您的最终证书的中间 CA 证书。
我还没有使用 sqlserver 进行测试,但是您有机会可以使用 haproxy 到 MITM 连接来解决您的双证书问题。
这将终止具有“错误”名称的传入证书,并将其重新建立为 sqlserver 已安装的证书名称。
haproxy 前端需要证书和密钥。
对于 haproxy 后端,您需要添加主机标头并设置 sni 以匹配 sqlserver。您还需要参考相关的 ca 证书。
请参阅https://www.slideshare.net/slideshow/haproxy-as-egress-controller/192888584 有一个关联的视频,但在了解 TLS 详细信息之前有很多内容,所有这些您都可以忽略。
这会降低性能(SSL 重新终止步骤)并添加另一个基础设施组件/证书来管理,但它可能允许您保留两个 DNS 名称。