use*_*458 5 entity-framework-core .net-core
当尝试使用 Entity Framework Core 连接到 MSSQL 数据库时,我在 Mac OS High Sierra(最新版本)10.13.5 中看到异常:
SqlException:已成功与服务器建立连接,但在登录前握手期间发生错误。(提供商:SSL 提供商,错误:31 - 加密(ssl/tls)握手失败)
我已更新到最新版本的.NET core:
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]
Run Code Online (Sandbox Code Playgroud)
在快速谷歌搜索后,我发现了一些类似的异常,但在安装了最新版本的 .NET core 的最新版本的 OSX 上没有发现任何异常。
这有可能是最新版本中的错误吗?我已经在 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>
Run Code Online (Sandbox Code Playgroud)
对于任何登陆这里寻找解决方案的人。以下是对我有用的解决方案。
数据库: 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
Run Code Online (Sandbox Code Playgroud)
dotnet ef database update
Run Code Online (Sandbox Code Playgroud)
与服务器成功建立连接,但在登录前握手期间发生错误。(提供商:SSL 提供商,错误:31 - 加密(ssl/tls)握手失败)
主要问题是 AWS 通过其根证书使用 SSL 安全连接,并且 dotnet ef 工具无法验证或下载根证书。
因此您需要手动下载并安装证书并将TrustServerCertificate标记为true。
下载并安装根证书
修改SQL连接字符串
TrustServerCertificate=true就是这样。现在再次执行相同的操作,应该不会出现此错误。
| 归档时间: |
|
| 查看次数: |
8252 次 |
| 最近记录: |