我在 sql server 的证书(本地计算机)\个人中安装了通配符证书。我们使用的是 Windows 2008R2 server 和 2008 R2 SQL。证书由 StartCom 颁发。有了证书,一切都正常(我在 IIS 中使用过它),但它没有出现在 sql 配置管理器协议下拉列表中。所以我按照微软的文章:
http://support2.microsoft.com/kb/316898
并在注册表中添加了证书指纹。重新启动了 SQL 服务。
然后我尝试使用 SMSS 连接到 SQL 服务器,但出现错误:
“已成功与服务器建立连接,但在登录前握手期间发生错误。(提供程序:SSL 提供程序,错误:0 - 证书的 CN 名称与传递的值不匹配。)(Microsoft SQL Server,错误:-2146762481)”
因此问题显然出在通配符证书上,因为它颁发给 *.domain.com,而服务器名称是 server.domain.com。
通过这篇文章,微软说“SQL Server 2008 R2 和 SQL Server 2008 R2 Native Client 支持通配符证书。”
http://technet.microsoft.com/en-us/library/ms189067(v=sql.105).aspx
所以问题是:Sql 2008 r2 支持还是不支持通配符证书。如果支持,那么有问题吗?为什么我会收到此错误?
因此,在尝试使用通配符证书几天后,我们生成了带有主机名的证书,5 分钟后我们就享受了加密连接。但仍然有一个问题……sql 2008 r2 是否可以使用通配符证书?
答案1
我花了很多时间尝试,而且大部分都是错误,才让它工作,但 SQL Server 确实支持通配符证书。我不确定我的所有步骤是否都是必要的,但跳过任何步骤对我来说都是失败的。
创建一个自签名证书,其通用名称与 Windows 服务器名称相同。
makecert -r -pe -n "CN=HOSTNAME" -b 01/01/2015 -e 01/01/2025 -eku 1.3.6.1.5.5.7.3.1 -ss my -sr localMachine -sky exchange -sp "Microsoft RSA SChannel Cryptographic Provider" -sy 12
自签名证书现在将出现在 SQL Server 配置管理器下拉列表中。使用自签名证书配置 SQL Server 加密选项。重新启动 SQL Server 并测试。
获取通配符 SSL 证书的证书哈希。
certutil -store "my" "*.domain.com"
编辑注册表并将证书条目替换为通配符 SSL 证书的证书哈希。重新启动 SQL Server 并测试。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL*version_revision*.MSSQLSERVER\MSSQLServer\SuperSocketNetLib\
当我最初尝试不先创建自签名证书时,SQL Server 就无法启动。