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

Jos*_*eph 8 sql-server ssl

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

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

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

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

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

select * from sys.dm_exec_connections
Run Code Online (Sandbox Code Playgroud)

实际上,列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
         ...
Run Code Online (Sandbox Code Playgroud)

当前的操作系统是Windows 10 Home.

我错过了什么?

小智 43

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

  • 这在生产中通常被认为是不安全的。 (14认同)

Mea*_*her 5

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

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

在此输入图像描述

而不是127.0.0.1(或你在那里的任何东西)把CN放在证书上,这个连接应该工作.


Jos*_*eph 5

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

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