SQL Server 的证书要求

本文介绍 SQL Server 的证书要求,以及如何检查证书是否满足这些要求。

SQL Server 加密的证书要求

若要将 TLS 用于 SQL Server 加密,需要预配满足以下条件的证书(三种数字类型之一):

  • 该证书必须位于本地计算机证书存储或 SQL Server 服务帐户证书存储中。 建议使用本地计算机证书存储,因为它可避免在 SQL Server 启动帐户更改时重新配置证书。

  • SQL Server 服务帐户必须拥有访问 TLS 证书所必需的权限。 有关详细信息,请参阅将 SQL Server 数据库引擎配置为使用加密连接

  • 当前系统时间必须晚于证书的“有效起始时间”属性的值,并早于“有效截止时间”属性的值。 有关详细信息,请参阅过期的证书

    注意

    该证书必须用于服务器身份验证。 这就要求,证书的“增强型密钥使用”属性必须指定“服务器身份验证(1.3.6.1.5.5.7.3.1)”。

  • 必须使用 AT_KEYEXCHANGEKeySpec 选项创建该证书。 这需要一个使用旧加密存储提供程序来存储私钥的证书。 证书的密钥使用属性 (KEY_USAGE) 通常还包括密钥加密 (CERT_KEY_ENCIPHERMENT_KEY_USAGE) 和数字签名 (CERT_DIGITAL_SIGNATURE_KEY_USAGE)。

  • 证书的“使用者”属性必须指明,证书公用名称 (CN) 与服务器计算机的主机名或完全限定的域名 (FQDN) 相同。 使用主机名时,必须在证书中指定 DNS 后缀。 如果 SQL Server 是在故障转移群集中运行,证书公用名称必须与虚拟服务器的主机名或 FQDN 一致,并且必须在故障转移群集的所有节点上都预配证书。 例如,如果你有一个双节点群集,节点名称分别为 test1.*<your company>*.comtest2.*<your company>*.com,并且又拥有名为 virtsql 的虚拟服务器,则你需要在两个节点上为 virtsql.*<your company>*.com 安装证书。 有关 SQL 群集的详细信息,请参阅安装故障转移群集前的准备工作

  • 连接到可用性组侦听程序时,为故障转移群集中的每个参与服务器节点预配的证书还应包含证书的“使用者可选名称”中设置的所有可用性组侦听程序的列表。 有关详细信息,请参阅侦听器和 TLS/SSL 证书。 有关 SQL Always On 的详细信息,请参阅连接到 Always On 可用性组侦听程序

  • 使用者可选名称”应包含客户端可能用于连接到 SQL Server 实例的所有名称。 如果使用可用性组,使用者可选名称应包括 localhost 和已创建的侦听器的 NetBIOS 和完全限定的域名(FQDN)。

客户端必须能够验证服务器所用证书的所有权。 如果客户端具有对服务器证书进行签名的证书颁发机构所颁发的公钥证书,则不需要进一步的配置。 Microsoft Windows 包含多个证书颁发机构所颁发的公钥证书。 如果服务器证书由公共或专用证书颁发机构进行签名,而客户端没有该机构颁发的公钥证书,则必须在要连接到 SQL Server 的每个客户端上安装对服务器证书进行签名的证书颁发机构所颁发的公钥证书。

重要

如果计算机存储中存在证书,但该证书仅满足上述列表中的某些要求,并且手动配置为供 SQL Server 配置管理器或通过注册表项使用,则 SQL Server 将不会启动。 选择另一个满足所有要求的证书,或删除 SQL Server 使用的证书,直到可以预配满足要求的证书或使用自行生成的证书,如 SQL Server 生成的自签名证书中所述。

检查证书是否满足要求

在 SQL Server 2019 (15.x) 及更高版本中,SQL Server 配置管理器会在配置阶段自动验证所有证书要求。 如果 SQL Server 在你配置证书后成功启动,则表明 SQL Server 可以使用该证书。 但是,某些客户端应用程序可能仍对可用于加密的证书具有其他要求,根据所使用的应用程序,可能会遇到不同的错误。 在这种情况下,需要查看客户端应用程序的支持文档,了解有关该主题的详细信息。

可以使用下列方法之一来检查用于 SQL Server 的证书的有效性:

  • sqlcheck 工具sqlcheck 是一种命令行工具,它检查当前计算机和服务帐户设置,并向“控制台”窗口生成一个有助于排查各种连接错误的文本报告。 输出包含有关证书的以下信息:

    Details for SQL Server Instance: This Certificate row in this section provides more details regarding the certificate being used by SQL Server (Self-generated, hard-coded thumbprint value, etc.).
    
    Certificates in the Local Computer MY Store: This section shows detailed information regarding all the certificates found in the computer certificate store.
    

    有关该工具的功能的详细信息及下载说明,请参阅欢迎使用 CSS_SQL_Networking_Tools wiki

  • certutil 工具:certutil.exe 是作为证书服务的一部分安装的命令行程序。 可以使用 certutil.exe 转储和显示证书信息。 使用 -v 选项获取详细信息。 有关详细信息,请参阅 certutil

  • 证书管理单元:还可以使用“证书管理单元”窗口查看有关计算机上各种证书存储中的证书的详细信息。 但此工具不显示 KeySpec 信息。 有关如何使用 MMC 管理单元查看证书的详细信息,请参阅操作指南:使用 MMC 管理单元查看证书

详细信息

过期的证书

SQL Server 仅在配置时检查证书的有效性。 例如,不能在 SQL Server 2019 (15.x) 及更高版本上使用 Configuration Manager 来预配过期的证书。 如果证书在已预配后过期,则 SQL Server 会继续运行,而不会出现任何问题。 但是,某些客户端应用程序(如 Power BI)会检查每个连接上证书的有效性,如果 SQL Server 实例配置为使用过期的证书进行加密,则会引发错误。 建议不要将过期的证书用于 SQL Server 加密。