C# 当我使用localhost connect时,如果我使用IP,它不会';t连接

C# 当我使用localhost connect时,如果我使用IP,它不会';t连接,c#,grpc,C#,Grpc,我在同一台计算机上运行服务器和客户端进行测试。如果在客户机中我使用地址localhost,它可以工作,但是如果我使用计算机“192.16.1.33”的IP,它会失败。错误消息如下: D0725 20:25:53.870862 Grpc.Core.Internal.NativeExtension gRPC native library loaded successfully. D0725 20:25:53.872652 0 T:\src\github\grpc\workspace_csha

我在同一台计算机上运行服务器和客户端进行测试。如果在客户机中我使用地址localhost,它可以工作,但是如果我使用计算机“192.16.1.33”的IP,它会失败。错误消息如下:

    D0725 20:25:53.870862 Grpc.Core.Internal.NativeExtension gRPC native library loaded successfully.
D0725 20:25:53.872652 0 T:\src\github\grpc\workspace_csharp_ext_windows_x64\src\core\ext\filters\client_channel\lb_policy_registry.cc:39: registering LB policy factory for "grpclb"
D0725 20:25:53.872779 0 T:\src\github\grpc\workspace_csharp_ext_windows_x64\src\core\ext\filters\client_channel\lb_policy_registry.cc:39: registering LB policy factory for "cds_experimental"
D0725 20:25:53.872871 0 T:\src\github\grpc\workspace_csharp_ext_windows_x64\src\core\ext\filters\client_channel\lb_policy_registry.cc:39: registering LB policy factory for "eds_experimental"
D0725 20:25:53.872962 0 T:\src\github\grpc\workspace_csharp_ext_windows_x64\src\core\ext\filters\client_channel\lb_policy_registry.cc:39: registering LB policy factory for "lrs_experimental"
D0725 20:25:53.873053 0 T:\src\github\grpc\workspace_csharp_ext_windows_x64\src\core\ext\filters\client_channel\lb_policy_registry.cc:39: registering LB policy factory for "priority_experimental"
D0725 20:25:53.873118 0 T:\src\github\grpc\workspace_csharp_ext_windows_x64\src\core\ext\filters\client_channel\lb_policy_registry.cc:39: registering LB policy factory for "weighted_target_experimental"
D0725 20:25:53.873181 0 T:\src\github\grpc\workspace_csharp_ext_windows_x64\src\core\ext\filters\client_channel\lb_policy_registry.cc:39: registering LB policy factory for "xds_routing_experimental"
D0725 20:25:53.873249 0 T:\src\github\grpc\workspace_csharp_ext_windows_x64\src\core\ext\filters\client_channel\lb_policy_registry.cc:39: registering LB policy factory for "pick_first"
D0725 20:25:53.873311 0 T:\src\github\grpc\workspace_csharp_ext_windows_x64\src\core\ext\filters\client_channel\lb_policy_registry.cc:39: registering LB policy factory for "round_robin"
D0725 20:25:53.873377 0 T:\src\github\grpc\workspace_csharp_ext_windows_x64\src\core\ext\filters\client_channel\resolver\dns\c_ares\dns_resolver_ares.cc:504: Using ares dns resolver
I0725 20:25:55.903532 0 T:\src\github\grpc\workspace_csharp_ext_windows_x64\src\core\ext\filters\client_channel\subchannel.cc:1033: Connect failed: {"created":"@1595701555.902000000","description":"OS Error","file":"T:\src\github\grpc\workspace_csharp_ext_windows_x64\src\core\lib\iomgr\tcp_client_windows.cc","file_line":105,"os_error":"Unable to retrieve error string","syscall":"ConnectEx","wsa_error":10061}
I0725 20:25:55.904211 0 T:\src\github\grpc\workspace_csharp_ext_windows_x64\src\core\ext\filters\client_channel\subchannel.cc:970: Subchannel 0000016821801D70: Retry immediately
I0725 20:25:55.904411 0 T:\src\github\grpc\workspace_csharp_ext_windows_x64\src\core\ext\filters\client_channel\subchannel.cc:997: Failed to connect to channel, retryin
通道似乎已创建,因为它是子通道0000016821801D70,但由于某些原因无法从服务器获得响应

服务器的代码如下所示:

常量int miPort=5001

            var cacert = File.ReadAllText("Keys/ca.crt");
            var cert = File.ReadAllText("Keys/server.crt");
            var key = File.ReadAllText("Keys/server.key");

            var keypair = new KeyCertificatePair(cert, key);
            var sslCreds = new SslServerCredentials(new List<KeyCertificatePair>
                                {
                                    keypair
                                }, cacert, false);

            Server server = new Server()
            {
                Services = { Gestor.BindService(new GestorAplicacionesService()) },
                //Ports = { new ServerPort("0.0.0.0", miPort, sslCreds) },
                Ports = { new ServerPort("localhost", miPort, sslCreds) },
            };
            server.Start();
            Console.WriteLine("Started server on port " + miPort);
            server.ShutdownTask.Wait();
证书可以工作,因为使用localhost它可以工作,但这是我使用OpenSSL创建自签名证书的脚本:

# Generate valid CA
openssl genrsa -passout pass:1234 -des3 -out ca.key 4096
openssl req -passin pass:1234 -new -x509 -days 365 -key ca.key -out ca.crt -subj  "/C=SP/ST=Spain/L=Valdepenias/O=Test/OU=Test/CN=Root CA"

# Generate valid Server Key/Cert
openssl genrsa -passout pass:1234 -des3 -out server.key 4096
openssl req -passin pass:1234 -new -key server.key -out server.csr -subj  "/C=SP/ST=Spain/L=Valdepenias/O=Test/OU=Server/CN=localhost"
openssl x509 -req -passin pass:1234 -days 365 -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt

# Remove passphrase from the Server Key
openssl rsa -passin pass:1234 -in server.key -out server.key

# Generate valid Client Key/Cert
openssl genrsa -passout pass:1234 -des3 -out client.key 4096
openssl req -passin pass:1234 -new -key client.key -out client.csr -subj  "/C=SP/ST=Spain/L=Valdepenias/O=Test/OU=Client/CN=localhost"
openssl x509 -passin pass:1234 -req -days 365 -in client.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out client.crt

# Remove passphrase from Client Key
openssl rsa -passin pass:1234 -in client.key -out client.key




pause
我已尝试使用2个服务器证书。当我在同一台计算机上运行客户机时,它会起作用,但当我在客户机上使用IP时,它就不起作用了

后来我尝试了另一个服务器证书,使用IP作为公共名称,但我仍然无法连接到服务器


我读到的是,在证书服务器中,为IP创建证书与为名称创建证书有点不同。对于证书,您可以添加替代名称(这是创建通配符或多域证书的方式)或IP地址列表

如果
[alt\u names]
正确,请检查OpenSSL的配置。有关更多信息,请参阅

要确保您的证书用于域名或ip地址,请使用命令
openssl x509-in client.crt-text-noout
,在该命令的输出中,您将看到以下内容:

        X509v3 extensions:
            X509v3 Subject Alternative Name:
                IP Address:127.0.0.1

如果以“DNS:”而不是“IP地址”开头,则需要更新证书的创建。

是否引用了任何文件?我认为发生的情况是服务器程序由于异常而退出,并且没有返回响应。由于服务器无法访问文件,出现异常。我将检查链接。但这让我想知道,如果我想从另一台计算机访问,我想localhost不能用作公共名称。因此,我尝试了我的计算机名,我在服务器中使用windows 10,我在windows中尝试了计算机名(它不在域中)。名称是Server01。但是已经创建了一个通用名为Server01的证书,但它也不起作用。这是您用
[alt\u names]
解决的问题,在这里您可以输入多个dns和ip地址,在您的情况下是ip 127.0.0.1、名称“localhost”和您的计算机名。有关如何从命令行添加这些可选名称的信息,请参阅。另外,我忘记提到的一点是,您必须确保您的证书安装在运行程序的证书存储中,请尝试
个人
受信任的根证书
。只有使用此处存在的证书签名的证书才允许使用SAN。当我运行服务器时,如果我尝试与浏览器连接,我会收到一条消息,告知它不是专用连接。如果我停止服务器并尝试与浏览器连接,我会收到一条消息说找不到地址。所以我认为服务器是正确的。但是,如果我尝试连接gRPC客户端,我会得到相同的错误。
        X509v3 extensions:
            X509v3 Subject Alternative Name:
                IP Address:127.0.0.1