当前位置: 首页 > 知识库问答 >
问题:

如何使用HTTPS和我自己的证书将Grpc(netStandard 2.0)与Grpc.Asp.NetCore服务器(. NET 5.0)连接?[复制]

窦夜洛
2023-03-14

我在客户端得到这个异常:

Grpc。core . RPC exception:' Status(Status code = " Unavailable ",Detail= "无法连接到所有地址",DebugException="Grpc。core . internal . coreerrordetailexception:{ " created ":" @ 1606620349.107000000 "," description ":"未能选取子通道"," file ":" T:\ src \ github \ grpc \ workspace _ cs harp _ ext _ windows _ x86 \ src \ core \ ext \ filters \ client _ channel \ client _ channel . cc "," file_line":4166," referenced _ errors ":[{ " created ":" @ 16066620349.101

客户渠道:

        private Channel GetChannel()
    {
        return new Channel(
            _settings.FileServiceUri
            , CertificatePEM == null ? ChannelCredentials.Insecure :
                new SslCredentials(
                    CertificatePEM
                    , new KeyCertificatePair(CertificatePEM, File.ReadAllText("Syrilium.FileUpdater.cer.key"))
                )
            , new[] {
                new ChannelOption(ChannelOptions.MaxReceiveMessageLength,int.MaxValue),
                new ChannelOption(ChannelOptions.MaxSendMessageLength,int.MaxValue),
                }
            );
    }

服务器配置:

        public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .UseServiceProviderFactory(new AutofacServiceProviderFactory())

            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.ConfigureKestrel(kestrelOptions =>
                {
                    var sslCertificate = LoadSSLCertificate();
                    kestrelOptions.ListenAnyIP(/*IPAddress.Parse("127.0.0.1"),*/ 5001
                       , listenOptions =>
                       {
                           listenOptions.UseHttps(
                             sslCertificate,
                              httpsOptions =>
                              {
                                  //httpsOptions.SslProtocols = SslProtocols.Tls12;
                                  httpsOptions.ClientCertificateMode = ClientCertificateMode.AllowCertificate;
                                  httpsOptions.ClientCertificateValidation = (certificate, chain, errors) =>
                                  {
                                      return true /*certificate.Thumbprint.Equals(_clientThumbprint, StringComparison.OrdinalIgnoreCase)*/;
                                  };
                              }
                             );
                           listenOptions.Protocols = HttpProtocols.Http2;
                       }
                       );

                });

                webBuilder.UseStartup<Startup>();
            });

当我刚刚移除

listenOptions.UseHttps...

在服务器上并使用

ChannelCredentials.Insecure

在客户端,它是有效的。

如何让这两个与HTTPS和我自己的证书进行通信?这只是在这些最新版本的库上工作的客户端和服务器的一个简单示例。

我接到一个电话

   httpsOptions.OnAuthenticate = (ctx, auth) => {     };

服务,但我不知道,如果有什么有用的我可以用它做什么?握手失败。

共有1个答案

沈永新
2023-03-14

我在这里写解决方案后,评论包含解决方案,因为谁阅读评论...

问题是.net 5.0客户端速度更快,客户端无法连接,因为服务器尚未准备好接受连接。在开发客户机和服务器时,最好使用两个共享项目的解决方案,以便您可以使用visual studio的两个实例同时调试这两个解决方案。您可以使用多个VS实例打开同一个解决方案,但是您将开始遇到不同的问题,例如在中间窗口和输出窗口中。

 类似资料:
  • 问题内容: 我已经开始为API编写包装,该包装要求所有请求都通过HTTPS进行。我不想在开发和测试它时向实际的API发出请求,而是希望在本地运行自己的服务器来模拟响应。 我对如何生成创建HTTPS服务器并向其发送请求所需的证书感到困惑。 我的服务器看起来像这样: Pem文件是使用以下命令生成的: 一个请求看起来像这样: 通过此设置,我得到了,所以我认为我需要为该请求添加一个选项。 所以我的问题是我

  • 我的连接代码如下所示: 干杯,马尔辛

  • 我已经准备好了用于在我的 AWS ELB 上终止外部 HTTPS 连接。我现在尝试使用带有自签名证书的 HTTPS 来保护 EC2 上的 ELB 和后端 NGINX 服务器之间的连接。我已经按照文档进行操作,但是通过HTTPS访问服务器会导致408 HTTP超时。我似乎无法获得任何调试信息来确定故障所在。 < li >我已经确认安全组允许EC2上的ELB和NGINX之间的连接。 < li >我已经

  • 我必须使用在HTTPs上运行的rest服务。制作人给了我证书和方法参数。您能告诉我如何使用该服务以及如何使用代码中的证书吗。我使用的是Spring4和Java8。请分享代码片段。

  • 我们的应用程序可以使用Active Directory用户和组。我们在端口389上使用LDAP进行Active Directory操作。现在,我们的一个客户机希望我们添加一个使用LDAP+SSL进行Active Directory通信的选项。 他们告诉我们,他们在域上安装了一个本地CA,并对LDAP使用自签名证书。他们还告诉我们,他们会提供证书,不需要相互信任,我们应该使用Windows证书存储。

  • 获取未定义id的错误。如果我使用,它工作得很好。这是客户端代码: 下面是我自己的代码: 我做错了什么? 如果我使用以下代码: