.net - 为什么 C# Google.Cloud.Firestore 库无法连接到企业 MITM 防火墙?

标签 .net ssl google-cloud-firestore firewall windows-server-2008-r2

图书馆的具体错误信息

CompletedListGrpc.Core.RpcException: Status(StatusCode=Unavailable, Detail="Connect Failed")

  • 我特别提到这个图书馆:https://github.com/googleapis/google-cloud-dotnet/tree/master/apis/Google.Cloud.Firestore
  • 我特别遇到 google-cloud-firestore 服务的问题(尽管该问题可能发生在另一个依赖库中,也许是身份验证)
  • 有问题的防火墙是 Palo Alto Networks。它具有安装在企业工作站上且受信任的企业证书。防火墙本质上充当 MITM 来解密流量,以便更深入地分析 TLS 流量。

当为 firestore.googleapis.com 禁用防火墙 MITM 功能时,库工作正常。当启用 MITM 功能时,它不起作用。

子问题:

1) 库代码是否有硬编码证书检查? (我没找到)

参见 https://github.com/googleapis/google-cloud-dotnet/blob/master/apis/Google.Cloud.Firestore.V1/Google.Cloud.Firestore.V1/FirestoreClient.cs#L550 ~550 行

public static gaxgrpc::ServiceEndpoint DefaultEndpoint { get; } = new gaxgrpc::ServiceEndpoint("firestore.googleapis.com", 443);
  • 硬编码证书没有意义,因为证书会更新,有时旧证书会被撤销。
  • grpc 是非常标准的,除了 Google 使用之外共享(参见 https://grpc.io/)。
  • 假设 grpc 不包含下游依赖项的显式证书是合理的
  • 如果 firestore 打算断言证书,可以合理地假设这行代码连同 URL 一起完成

2a) .Net Framework 是否自动信任 Windows 信任库中的证书?是否需要任何代码才能使这项工作正常进行?

.Net Framework 似乎可以与 Windows 证书存储一起使用 - 请参阅 https://learn.microsoft.com/en-us/dotnet/framework/wcf/feature-details/working-with-certificates

2b) 也许证书只受信任但交互用户而不是整个机器,因此服务帐户看不到该证书 - 我会检查一下...

3) 如果这是“连接失败”的原因,库是否会出现关于证书的特定错误?

最佳答案

这可能只是 Windows 证书存储配置错误。也许您运行该软件的帐户无权访问正确的根 CA。不管是什么原因,有一种常见的 .Net 方法可以手动批准证书。

1) 首先,尝试绕过检查的测试。见https://stackoverflow.com/a/2675183/887092

ServicePointManager
    .ServerCertificateValidationCallback += 
    (sender, cert, chain, sslPolicyErrors) => true;

不要让此代码保留在生产中,仅使用它来查看此路径是否可行。

2) 接下来自定义此函数以手动检查根 CA 的特定证书和相关证书。强烈建议使用一个库来帮助你,但你可以让它与核心 .net 库一起工作。

参见 C# / .NET - How to allow a "custom" Root-CA for HTTPS in my application (only)?

结论

如果这个答案不起作用,我会删除它。

关于.net - 为什么 C# Google.Cloud.Firestore 库无法连接到企业 MITM 防火墙?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57471956/

相关文章:

c# - 如何使用 Office Open XML SDK 2.0 获取列标题列表?

ruby - 使用 http 协议(protocol)访问启用了 SSL 的 Google Apps 提要

Android SSL 证书固定与改造

Firebase Firestore : Insufficient permissions to write

firebase - 如何使用 Ionic 4 删除 Firebase Cloud Firestore 中的元素数组

c# - ocelot api网关中的System.InvalidOperationException

c# - 自定义字节序列化器

.net - 通过powershell在iis中限制IP地址和域

iOS MDM 证书到期

javascript - 在多个组件中重用 firebase 对象实例