Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用于.NET Framework到.NET核心服务器的gRPC SSL通信_C#_.net_Asp.net Core_Protocol Buffers_Grpc - Fatal编程技术网

C# 用于.NET Framework到.NET核心服务器的gRPC SSL通信

C# 用于.NET Framework到.NET核心服务器的gRPC SSL通信,c#,.net,asp.net-core,protocol-buffers,grpc,C#,.net,Asp.net Core,Protocol Buffers,Grpc,我可以将C#完整的.NET Framework客户端与带有安全通道的C#.NET核心客户端一起使用吗 你能给我举几个例子吗?我找不到任何地方,如果这可以做到或不能做到 详情: 我使用.NET Framework客户端和.NET核心客户端制作了一个示例,其中Grpc C#Github作为参考,Grpc dotnet的这个示例作为参考。 我能够建立一个不安全的沟通渠道 新频道(“127.0.0.1”,5000,ChannelCredentials.unsecure) 以及ASP.NET核心服务器中于

我可以将C#完整的.NET Framework客户端与带有安全通道的C#.NET核心客户端一起使用吗

你能给我举几个例子吗?我找不到任何地方,如果这可以做到或不能做到

详情: 我使用.NET Framework客户端和.NET核心客户端制作了一个示例,其中Grpc C#Github作为参考,Grpc dotnet的这个示例作为参考。 我能够建立一个不安全的沟通渠道

新频道(“127.0.0.1”,5000,ChannelCredentials.unsecure)

以及ASP.NET核心服务器中于5000年打开的非Https端口

当我试图与你联系时

var通道=新通道(“127.0.0.1”,5001,新SslCredentials())

到ASP.NET核心服务器i中的Https端口5000

如何使用安全通道进行通信。我想使用相同的pfx+密码组合。

我运气不错。像OP一样,我还没有让它远程工作。请记住,IIS还不支持gRPC,因此您还需要找到其他托管方法。

我很幸运。像OP一样,我还没有让它远程工作。请记住,IIS还不支持gRPC,因此您还需要找到其他托管方法。

请检查。我创建了一个可能有用的基本示例:

您可以通过创建一个传递到
SslCredentials
来配置客户端证书。您将需要三个PEM编码字符串:

  • PEM编码的客户端证书链
  • PEM编码私钥
  • PEM编码的服务器SSL证书
  • 以下是一个示例设置:

    var keyCertPair = new KeyCertificatePair(clientsslcert.pem, privatekey.pem); 
    var channelCreds = new SslCredentials(serversslcert.pem, keyCertPair);
    
    出于测试目的,我发现。我曾经将PFX转换为PEM格式。此外,还将进一步讨论不同的PEM字符串以及为什么客户端需要显式信任服务器。

    请退出。我创建了一个可能有用的基本示例:

    您可以通过创建一个传递到
    SslCredentials
    来配置客户端证书。您将需要三个PEM编码字符串:

  • PEM编码的客户端证书链
  • PEM编码私钥
  • PEM编码的服务器SSL证书
  • 以下是一个示例设置:

    var keyCertPair = new KeyCertificatePair(clientsslcert.pem, privatekey.pem); 
    var channelCreds = new SslCredentials(serversslcert.pem, keyCertPair);
    

    出于测试目的,我发现。我曾经将PFX转换为PEM格式。此外,还将进一步讨论不同的PEM字符串,以及为什么客户端需要明确信任服务器。

    为了下一个寻找解决方案的人,我发布了这个答案。 我已经在类似的用例问题中发布了我的解决方案,所以在我让它工作并

    --下面是我自己的答案

    无论是否通过SSL,您都需要在ASP.NET核心服务器中打开Http2。因此,在appsettings.json中,执行此操作

    "Kestrel": {
        "EndpointDefaults": {
          "Protocols": "Http2"
        }
    
    不安全的.NET Framework客户端+ASP.NET核心服务器

    • ASP.NET核心服务器
    • 启动
      配置服务(IApplicationBuilder应用程序)
      中删除
      app.usehtseredirection()和
      app.UseHsts()
    • 暴露不安全的端口,在开发过程中通常为80或5000
    • 使用下面的代码在.NET Framework客户端中创建不安全的通道
    安全SSL连接.NET Framework客户端+ASP.NET核心服务器

    我通过在客户端使用相同服务器的.pem格式的证书来使用SSL端口

    SslCredentials secureCredentials=新的SslCredentials(File.ReadAllText(“certificate.pem”);
    var通道=新通道(“本地主机”,5001,安全凭证);
    
    一点解释。VS 2019中的ASP.NETCore模板使用开发证书 pfx文件位于
    %AppData%\ASP.NET\Https\ProjectName.pfx
    和 password=
    %AppData%\Microsoft\UserSecrets\{UserSecretsId}\secrets.json{:Kestrel:Certificates:Development:password}值
    您可以从
    ProjectName.csproj
    获取
    UserSecretsId
    id。这对于每个ASP.NET核心项目都是不同的

    我使用下面的命令将pfx+密码组合转换为
    certificate.pem
    文件

    openssl pkcs12 -in "<DiskLocationOfPfx>\ProjectName.pfx" -out "<TargetLocation>\certifcate.pem" -clcerts
    
    请注意,我使用的端口5001是ASP.NET核心应用程序的SSL端口

    用于生产场景


    使用来自证书签名机构的有效证书,并在ASP.NET核心服务器和.NET Framework客户端中分别使用与
    pfx
    pem
    相同的证书。

    我发布此答案是为了下一个寻找解决方案的人。 我已经在类似的用例问题中发布了我的解决方案,所以在我让它工作并

    --下面是我自己的答案

    无论是否通过SSL,您都需要在ASP.NET核心服务器中打开Http2。因此,在appsettings.json中,执行此操作

    "Kestrel": {
        "EndpointDefaults": {
          "Protocols": "Http2"
        }
    
    不安全的.NET Framework客户端+ASP.NET核心服务器

    • ASP.NET核心服务器
    • 启动
      配置服务(IApplicationBuilder应用程序)
      中删除
      app.usehtseredirection()和
      app.UseHsts()
    • 暴露不安全的端口,在开发过程中通常为80或5000
    • 使用下面的代码在.NET Framework客户端中创建不安全的通道
    安全SSL连接.NET Framework客户端+ASP.NET核心服务器

    我通过在客户端使用相同服务器的.pem格式的证书来使用SSL端口

    SslCredentials secureCredentials=新的SslCredentials(File.ReadAllText(“certificate.pem”);
    var通道=新通道(“本地主机”,5001,安全凭证);
    
    一点解释。VS 2019中的ASP.NETCore模板使用开发证书 pfx文件位于
    %AppData%\ASP.NET\Https\ProjectName.pfx
    和 password=
    %AppData%\Microsoft\UserSecrets\{UserSecretsId}\secrets.json{:Kestrel:Certificates:Development:password}值
    你可以