[英].NET Core: How to disable TLS/SSL for gRpc communication between service and client?
[英]gRPC SSL communication for .NET Framework to .NET Core Server
我可以将 C# 完整 .NET 框架客户端与 C# .NET 核心客户端一起使用吗?
你能带我举一些例子吗? 如果可以做到或无法做到,我找不到任何地方。
Detail: I made an example using .NET Framework client with Grpc C# Github as the reference and .NET Core client with this example from Grpc dotnet as a the reference. 我能够建立一个不安全的沟通渠道
new Channel("127.0.0.1", 5000, ChannelCredentials.Insecure)
以及ASP.NET核心服务器中5000打开的Non-Https端口。
当我尝试与
var channel = new Channel("127.0.0.1", 5001, new SslCredentials());
到 ASP.NET Core ServerI 中的 Https 端口 5000
如何使用安全通道进行通信。 我想使用相同的 pfx + 密码组合。
在这里查看我的问题和答案。 我创建了一个可能有用的基本示例: https://github.com/angelagyang/GRPCProtobufExample
您可以通过创建KeyCertificatePair
来配置客户端证书以传递到SslCredentials
。 您将需要三个 PEM 编码的字符串:
这是一个示例设置:
var keyCertPair = new KeyCertificatePair(clientsslcert.pem, privatekey.pem);
var channelCreds = new SslCredentials(serversslcert.pem, keyCertPair);
出于测试目的,我发现这些测试 PEM 很有帮助。 我使用OpenSSL将 PFX 转换为 PEM 格式。 此外, 这篇文章更多地讨论了不同的 PEM 字符串以及为什么客户端需要显式信任服务器。
我发布这个答案是为了让下一个人寻找解决方案。 在我在这里和这里工作之后,我已经在类似的用例问题中发布了我的解决方案
- 以下是从我自己的答案中复制的。
是否超过SSL,需要在ASP.NET核心服务器中开启Http2。 所以在appsettings.json中,这样做。
"Kestrel": {
"EndpointDefaults": {
"Protocols": "Http2"
}
不安全的 .NET 框架客户端 + ASP.NET 核心服务器
StartUp
class ConfigureServices(IApplicationBuilder app)
中的app.UseHttpsRedirection()
和app.UseHsts()
) ;var channel = new Channel("localhost", 5001, ChannelCredentials.Insecure);
安全 SSL 连接 .NET 框架客户端 + ASP.NET 核心服务器
通过在客户端中使用相同的服务器证书 in.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 核心项目,这将有所不同。
我使用以下命令将 pfx + 密码组合转换为certificate.pem
文件。
openssl pkcs12 -in "<DiskLocationOfPfx>\ProjectName.pfx" -out "<TargetLocation>\certifcate.pem" -clcerts
这将提示输入 pfx 密码。 使用上述secrets.json
中的密码。
为要生成的certificate.pem
提供一些密码(至少 4 个字母)。
复制此cerificate.pem
供 gRPC .NET 框架客户端访问和使用
SslCredentials secureCredentials = new SslCredentials(File.ReadAllText("<DiskLocationTo the Folder>/certificate.pem"))
var channel = new Channel("localhost", 5001, secureCredentials);
请注意,我使用的端口 5001 是我的 ASP.NET 核心应用程序的 SSL 端口。
生产场景
使用来自证书签名机构的有效证书,并在 ASP.NET 核心服务器和 .NET 框架客户端中分别使用相同的证书作为pfx
和pem
。
我对这个答案很幸运。 像 OP 一样,我还没有让它远程工作。 请记住,IIS 还不支持 gRPC,因此您还需要找到替代托管方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.