我发布此答案是为了让下一个人寻找解决方案。
在我得到它之后,我在类似的用例问题中发布了我的解决方案 here 和 here
-- 以下是我自己的回答。
无论是否通过 SSL,您都需要在 ASP.NET Core 服务器中开启 Http2。所以在 appsettings.json 中,这样做。
"Kestrel": {
"EndpointDefaults": {
"Protocols": "Http2"
}
不安全的 .NET Framework 客户端 + ASP.NET Core 服务器
- ASP.NET 核心服务器
- 删除
StartUp
类ConfigureServices(IApplicationBuilder app)
中的app.UseHttpsRedirection()
和app.UseHsts()
;
- 在开发过程中公开不安全的端口,通常为 80 或 5000。
- 使用下面的代码在 .NET Framework 客户端中创建不安全的通道。
var channel = new Channel("localhost", 5001, ChannelCredentials.Insecure);
安全 SSL 连接 .NET Framework 客户端 + ASP.NET Core 服务器
我通过在客户端中使用 .pem 格式的相同服务器证书使其与 SSL 端口一起使用。
SslCredentials secureCredentials = new SslCredentials(File.ReadAllText("certificate.pem"));
var channel = new Channel("localhost", 5001, secureCredentials);
稍微解释一下。 VS 2019 中的 ASP.NETCore 模板使用开发证书
pfx 文件位于%AppData%\ASP.NET\Https\ProjectName.pfx
和
密码=%AppData%\Microsoft\UserSecrets\{UserSecretsId}\secrets.json {:Kestrel:Certificates:Development:Password} Value
您可以从ProjectName.csproj
获取UserSecretsId
id。这对于每个 ASP.NET Core 项目都是不同的。
我使用以下命令将 pfx + 密码组合转换为 certificate.pem
文件。
openssl pkcs12 -in "<DiskLocationOfPfx>\ProjectName.pfx" -out "<TargetLocation>\certifcate.pem" -clcerts
这将提示输入 pfx 密码。使用上面secrets.json
的密码。
为要生成的certificate.pem
提供一些密码(至少 4 个字母)。
复制此cerificate.pem
供 gRPC .NET Framework 客户端访问和使用
SslCredentials secureCredentials = new SslCredentials(File.ReadAllText("<DiskLocationTo the Folder>/certificate.pem"))
var channel = new Channel("localhost", 5001, secureCredentials);
请注意,我使用的端口 5001 是我的 ASP.NET Core 应用程序的 SSL 端口。
适用于生产场景
使用来自证书签名机构的有效证书,并在 ASP.NET Core Server 和 .NET Framework 客户端中分别使用与 pfx
和 pem
相同的证书。