已成功与服务器建立连接,但登录过程中发生错误。目标主体名称不正确

Nih*_*mar 6 c# encryption ssl kerberos sql-server-2008-r2

我使用 openssl 创建了三个证书

  1. 根CA证书
  2. 服务器证书
  3. 客户证书

服务器端配置:

我在服务器计算机上安装了 server.cer(个人文件夹)和 RootCA(信任根证书颁发机构文件夹)。然后我将服务器证书附加到 MSSSQL(SQL 配置管理器 -> MSSQL 属性 -> 证书下拉列表)。将“强制加密”设置为“否”并重新启动服务。

客户端配置:

我安装了client.cer(个人文件夹)和RootCA(信任根证书颁发机构文件夹)。

以下是创建 RootCA(CertAuthority) 以及 server.cert 和 client.crt 的步骤:

openssl genrsa -des3 -out CertAuthority.key 4096
openssl req -new -x509 -days 3650 -key CertAuthority.key -out CertAuthority.crt
openssl req -new -sha256 -key CertAuthority.key -out server.csr
openssl x509 -req -days 3650 -in server.csr -CA CertAuthority.crt -CAkey CertAuthority.key -set_serial 01 -out server.crt
openssl req -new -sha256 -key CertAuthority.key -out client.csr
openssl x509 -req -days 3650 -in client.csr -CA CertAuthority.crt -CAkey CertAuthority.key -set_serial 01 -out client.crt
Run Code Online (Sandbox Code Playgroud)

创建 CertAuthority.crt 时给出的详细信息

Common Name : asia.com
Country : IN
Run Code Online (Sandbox Code Playgroud)

其余字段留空

创建 server.crt 时给出的详细信息

Common Name : Myserver.asia.com
Country : IN
Run Code Online (Sandbox Code Playgroud)

其余字段留空

创建 Client.crt 时给出的详细信息

Common Name : Myclient.asia.com
Country : IN
Run Code Online (Sandbox Code Playgroud)

其余字段留空

这是我用于 sqlclient 的连接字符串

Data Source=Myserver;Initial Catalog=MyDB;User ID=sa;Password=;Connect Timeout=30;Encrypt=True;TrustServerCertificate=False
Run Code Online (Sandbox Code Playgroud)

每当我尝试使用“ Use Encryption For Data=True ”作为Encrypt 和 TrustServerCertificate属性的替代方法通过 SQLOLEDB 提供程序进行连接时,我都能够成功建立 SSL 连接。

但是通过使用 SqlConnection 我收到以下错误: 已成功与服务器建立连接,但在登录过程中发生错误。(提供程序:SSL 提供程序,错误:0 - 目标主体名称不正确。)

有人可以在这方面帮助我吗?谢谢

arn*_*nav 9

为连接字符串添加此参数:TrustServerCertificate=true

  • 如果我添加此参数,那么它将适用于我不想要的所有证书。即,如果客户端具有由同一 CA 签名的任何证书,那么它将起作用。我希望客户端只有拥有正确的 CA 证书才能进行通信。 (2认同)