带SSL的MSSQL:目​​标主体名称不正确

时间:2016-06-09 19:09:05

标签: sql-server ssl

我在Microsoft SQL Server 2012 Express Edition上成功配置了SSL,以加密通过Internet建立的数据库的外部网络连接。出于网络上内部客户端的性能原因,我不想强​​制使用SSL,而是让客户选择是否使用SSL。我通过以下步骤将强制加密设置为

  • Sql Server配置管理器
  • Sql Server网络配置
  • (MYSQLSERVERNAME)
  • 的协议
  • 右键单击:属性
  • 标志标签。

当我尝试与Microsoft Sql Server Management Studio建立加密连接时,检查选项>上的加密连接选项连接属性我收到以下错误。

  

已成功与服务器建立连接,但在登录过程中发生错误。 (provider:SSL Provider,error:0 - 目标主体名称不正确。)(Microsoft SQL Server,错误:-2146893022)

令人惊讶的是,如果我在Sql Server配置管理器上选择强制加密,而我在Microsoft Sql上未选择加密连接 Server Management Studio我可以连接到数据库。如果我执行查询:

select * from sys.dm_exec_connections

实际上 encrypt_option 列为TRUE。

证书是使用Openssl生成的,这是信息:

Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 2 (0x2)
    Signature Algorithm: sha256WithRSAEncryption
        Validity
            Not Before: Jun  9 15:53:18 2016 GMT
            Not After : Jun  9 15:53:18 2018 GMT
        Subject: C=US, ST=State, L=Location, O=Testing, OU=Development, CN=JOSEPH-ASUS
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                ...
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Subject Key Identifier: 
                DB:7F:58:DC:F7:D9:90:2A:DF:0E:31:84:5C:49:68:E7:61:97:D8:41
            X509v3 Authority Key Identifier: 
                keyid:C9:5C:79:34:E0:83:B2:C7:26:21:90:17:6A:86:88:84:95:19:88:EA

            X509v3 Basic Constraints: 
                CA:FALSE
            X509v3 Key Usage: 
                Key Encipherment, Data Encipherment
            X509v3 Extended Key Usage: 
                TLS Web Server Authentication
            Netscape Comment: 
                OpenSSL Generated Certificate
            X509v3 Subject Alternative Name: 
                DNS:alternatename1, DNS:alternatename2, IP Address:192.168.1.100, IP Address:192.191.1.101, IP Address:192.168.1.103
    Signature Algorithm: sha256WithRSAEncryption
         ...

目前的操作系统是Windows 10 Home。

我缺少什么?

4 个答案:

答案 0 :(得分:5)

当我做类似的事情时,我收到了这个错误。我还从OpenSSL创建了一个证书并将其导入SQL Server。我还使用SQL Server Management Studio尝试验证是否需要证书的客户端副本。当我这样做时,我得到了上述错误。

解决方案就是在连接窗口中我没有使用证书上的CN:

enter image description here

而不是127.0.0.1(或者你拥有的任何东西)将CN放在证书上,这个连接应该可以工作。

答案 1 :(得分:2)

使用OpenSSL生成的证书正常工作。在我的情况下,问题是在证书上运行MSSQL的帐户的权限,我通过以下步骤解决了这个问题:

  • 打开 SQL Server配置管理器
  • 找到用于运行MSSQL实例的帐户(MSSQL实例属性上的登录选项卡)。
  • 打开 MMC 控制台并添加证书(本地计算机)管理单元。
  • 搜索证书商店,右键单击证书并选择所有任务 - > 管理私钥......
  • 权限设置为运行MSSSQL的同一帐户。

答案 2 :(得分:0)

我遇到了同样的问题,并通过将TrustServerCertificate=True;添加到连接字符串来解决。

答案 3 :(得分:0)

尝试通过sqlcmd连接到需要Windows集成身份验证(选项-E)但意外使用Azure Active Directory身份验证(选项-G)的服务器时出现此错误。选择正确的标志为我修好了。请注意,这相当于在连接字符串中包含Trusted_Connection=True