自签名证书 - 无法让 SQL Server 客户端信任它

时间:2021-01-21 21:33:40

标签: sql-server

我已经为我的 SQL Server 2014 SP3 服务器创建了一个用于 TLS 1.2 的自签名证书。

尝试连接另一台计算机时出现错误

<块引用>

证书链由不受信任的机构颁发

但是,我已将自签名证书导入到该计算机上的受信任根证书颁发机构中……但无济于事。我仍然收到错误。

我是否遗漏了一些明显的东西来完成这项工作?

1 个答案:

答案 0 :(得分:0)

证书中需要包含一些属性才能使其正常工作。这是我在运行内部 SQL Server 时使用的一个过程...

在服务器上:

  • 在 Run-As-Administrator PowerShell 提示符下运行以下 PowerShell 脚本。
  • 在“管理机器证书”> 个人 > 证书 > $name > 所有任务 > 管理私钥...
    • 添加用于运行具有 READ 权限的 SQL Server 服务的相同 Windows 帐户。
      • 警告:它希望默认添加完全控制。
  • 在 SQL Server 配置管理器中
    • 在 $instanceName 的协议中 > 属性
      • 在“证书”选项卡上,选择您的证书的友好名称。
        • 如果它不可见,则说明权限或密钥属性不正确。
      • 在标记选项卡上,将强制加密设置为是。
    • 在 SQL Server 服务中,右键单击您的 SQL Server 实例 > 重新启动。

在客户端:

  • 导入 .crt 文件:
    • 右键单击 .crt 文件并选择安装证书
    • 选择:当前用户
    • 选择:将所有证书放入以下存储区
    • 选择:受信任的根证书颁发机构
  • 在 SQL Server Management Studio 中:
    • 在“连接到服务器”对话框中,展开“选项”
      • 在连接属性选项卡上勾选加密连接
    • 在登录选项卡上,服务器名称必须与 -DnsName 参数中列出的名称或 IP 地址之一匹配。
      • 如果找不到匹配项,您将收到“SQL 提供程序,错误:0 - 目标主体名称不正确。”
      • SQL 登录可以使用与 -DnsName 参数匹配的任何名称或 IP 地址。
      • 如果您使用的是 Windows 身份验证,您可能只能使用短主机名或与您的目录匹配的完全限定名称进行连接。 IP 地址连接可能会失败,并显示“登录来自不受信任的域,无法用于集成身份验证。”

连接后,右键单击服务器节点 > 属性,然后单击“查看连接属性”。在“连接”>“加密”中,它应该说“是”。

$3years = [DateTime]::UtcNow.AddYears(3)
$enhancedKeyUsageServerAuthentication = @("2.5.29.37={text}1.3.6.1.5.5.7.3.1")
$name = $env:COMPUTERNAME.ToLower()
$fqdn = "$($name).example.com"
$ip = '192.168.0.79' # for example
$cert = New-SelfSignedCertificate `
    -CertStoreLocation 'cert:\LocalMachine\My' `
    -DnsName $fqdn,$name,$ip,"localhost","127.0.0.1" `
    -FriendlyName "$($name)-sql-server" `
    -Hash 'SHA256' `
    -KeyAlgorithm 'RSA' `
    -KeyExportPolicy ExportableEncrypted `
    -KeySpec KeyExchange `
    -KeyFriendlyName "$($name)-sql-server" `
    -KeyLength 2048 `
    -KeyUsage DigitalSignature,KeyEncipherment,DataEncipherment `
    -NotAfter $3years `
    -Provider 'Microsoft RSA SChannel Cryptographic Provider' `
    -Subject $name `
    -TextExtension $enhancedKeyUsageServerAuthentication `
    -Type SSLServerAuthentication

$cert | Export-Certificate -Type CERT -FilePath $name-sql-server.crt