.NET Core SqlException:登录前握手期间发生错误

时间:2018-06-18 00:41:34

标签: .net-core entity-framework-core

我在尝试使用Entity Framework Core连接到MSSQL数据库时,在Mac OS High Sierra(最新版本)10.13.5中看到异常:

  

SqlException:已成功建立连接   服务器,但在登录前握手期间发生错误。   (提供商:SSL提供商,错误:31 - 加密(ssl / tls)握手   失败)

我已更新到最新版本的.NET核心:

dotnet --version: 2.1.300

dotnet --info: .NET Core SDK (reflecting any global.json):
 Version:   2.1.300
 Commit:    adab45bf0c

Runtime Environment:
 OS Name:     Mac OS X
 OS Version:  10.13
 OS Platform: Darwin
 RID:         osx.10.13-x64
 Base Path:   /usr/local/share/dotnet/sdk/2.1.300/

Host (useful for support):
  Version: 2.1.0
  Commit:  caa7b7e2ba

.NET Core SDKs installed:
  1.0.4 [/usr/local/share/dotnet/sdk]
  2.0.0 [/usr/local/share/dotnet/sdk]
  2.1.300 [/usr/local/share/dotnet/sdk]

我在快速谷歌搜索后发现了一些类似的例外,但最新版本的OSX安装了最新版本的.NET核心没有任何内容。

这是否有可能是最新版本中的错误?我在Windows上使用相同的源代码进行了测试,没有任何问题。

以下是我在项目文件中的引用:

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.Hosting" Version="2.1.0" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="2.0.2" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="2.0.2" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.0.2" />
    <PackageReference Include="System.Security.Cryptography.OpenSsl" Version="4.5.0" />
  </ItemGroup>

1 个答案:

答案 0 :(得分:2)

供任何登陆此处寻求解决方案的人使用。以下是对我有用的解决方案。

环境

数据库:Microsoft SQL Server 2019-托管在Amazon Web Services(AWS)上

.Net Core: .Net Core SDK v3.1.401

操作系统:macOS Catalina 10.15.5(19F101)

正在执行的动作

我试图通过以下命令迁移EF Core模型并更新数据库

dotnet ef migrations add initDBMigration --context myDBContext
dotnet ef database update

引发错误

已成功与服务器建立连接,但是在登录前握手期间发生错误。 (提供程序:SSL提供程序,错误:31-加密(ssl / tls)握手失败)

解决方案

主要问题是AWS通过其根证书使用SSL安全连接,并且dotnet ef工具无法验证或下载根证书。

因此,您需要手动下载并安装证书,并将TrustServerCertificate标记为true。

下载并安装根证书

  1. 转到Using SSL/TLS to Encrypt a Connection to a DB Instance
  2. 下载您所在区域的根证书,或者,如果不确定,请下载全局根证书(适用于所有区域)。直接链接到Global Root Cert(有效期至2024年8月22日,星期四)
  3. 通过双击.pem文件(已下载)安装证书。您也可以通过“钥匙串访问”打开它
  4. 确保将“钥匙串:”选择为“系统”
  5. 单击“添加”以安装证书。

Add Certificate Dialog

修改SQL连接字符串

  1. 导航到您的连接字符串
  2. 确保它具有TrustServerCertificate=true

就是这样。现在,再次执行相同的操作,它应该不会出现此错误。