证书和 Service Broker
本主题介绍 SQL Server 如何将证书用于 Service Broker 远程安全机制。Service Broker 远程安全机制是指涉及多个 SQL Server 实例且使用对话安全模式或传输安全模式的操作。
概述
Service Broker 远程安全机制将实例外部的操作映射到 SQL Server 数据库主体。然后,该操作在该数据库主体的安全上下文中继续执行,使用普通的 SQL Server 权限检查。例如,当一个消息到达使用对话安全模式的会话中时,Service Broker 使用该消息中的信息标识该会话远程端的数据库主体。然后,SQL Server 会验证该主体是否有权连接到承载目标服务的数据库,以及是否有权向目标服务发送消息。
SQL Server 使用证书来验证远程数据库的身份,并且使用证书来标识操作的本地数据库主体。因此,在 SQL Server 中安装证书将会在持有该证书的私钥的数据库中建立信任声明。请小心管理您安装的证书及创建的远程服务绑定。
![]() |
---|
只能安装来自可信来源的证书。请勿分发私钥。 |
SQL Server 收到的信息必须能够用本地数据库主体所拥有的证书中的公钥进行解密,才能验证远程服务器的身份。如果 SQL Server 可以成功地解密信息,这表示远程数据库包含与本地证书中的公钥相对应的私钥。SQL Server 验证远程数据库的身份后,远程数据库即可在本地数据库主体所拥有的权限下进行活动。
对于传输安全模式,每个数据库都必须信任另一数据库。传输安全模式可以使用证书或 Windows 身份验证。有关传输安全模式的详细信息,请参阅 Service Broker 传输安全性。
对于对话安全模式,对话的发起方必须信任目标方,并且必须能够验证目标的身份。但是,目标可能允许不提供标识信息的发起方与其连接。在这种情况下,发起方在承载目标服务的数据库中使用 public 角色。对话安全模式始终使用证书。有关对话安全模式的详细信息,请参阅 Service Broker 对话安全设置。
SQL Server 不通过证书为 Service Broker 安全性提供自动配置方法。
证书要求
证书必须满足下列要求才能用于 Service Broker 安全性:
密钥模块必须小于 2048。
证书总长度必须小于 32 千字节 (KB)。
必须指定主题名称。
必须指定有效日期。
密钥长度必须为 64 位的倍数。
用 Transact-SQL 语句 CREATE CERTIFICATE 创建的自签名证书满足上述列表中的要求。从文件加载的证书可能不满足这些要求。
证书存储在 SQL Server 中时,必须用数据库的主密钥加密该证书。Service Broker 无法使用只用密码加密的证书。此外,该数据库的主密钥必须用该实例的服务密钥加密。否则,Service Broker 无法打开主密钥。
为使 SQL Server 能够使用证书来发起一个会话,证书必须标记为 ACTIVE FOR BEGIN_DIALOG。默认情况下,证书标记为 ACTIVE FOR BEGIN_DIALOG。但是,您可以选择在更新某个服务的安全配置时暂时停用证书。有关详细信息,请参阅 CREATE CERTIFICATE (Transact-SQL) 和 ALTER CERTIFICATE (Transact-SQL)。