猿问

使用 Golang 在 Nginx 后面运行的 GRPC 服务的 TLS

我有一个 flutter 应用程序(基于 dart)和一个使用 GRPC 的 GoLang 服务器。

我想保护它,所以我尝试设置Ngninxcertbot我是新手),但是机器人需要一个挑战,它连接到 Web 服务(对于域)以获得 http 响应,而我的服务没有给。可以在同一端口上同时运行 GRPC 和 HTTP 服务器,但我不明白如何设置Nginx

然后我尝试使用 acme 为我的服务本身设置 TLS,autocert但使用 acme 需要相同的 Web 服务响应,否则我必须提供手动证书并跳过目前在 dart 中不可用的不安全验证(只有两个选项可用secureinsecure). 在本地进行测试autocert也无济于事,因为它甚至不会创建本地证书(至少对我而言)。

我还阅读了有关需要 DNS TXT 记录的 DNS 质询,但我不确定它是否会要求我在每次续订时都提供新的 TXT 记录。

无论如何,我对如何推进这一点感到很困惑。我将 GRPC 连接到实际的移动应用程序,但在任何地方都找不到很多与此相关的教程或问题。我的 GoLang 服务器还与其他内部微服务交互,因此使其支持 TLS 也意味着重新部署启用安全标志的所有其他服务。

任何关于我应该如何保护我的 GRPC 连接到应用程序的帮助,都会很棒!


梵蒂冈之花
浏览 196回答 1
1回答

繁花不似锦

只是发布我最终为我的设置所做的事情。Nginx确实支持 1.3.10+ 版本的 GRPC,但需要大量手动工作和 cron 作业来自动更新证书,并且它缺少操作方法文档。简而言之,Traefik 允许更简单的设置和非常详细的 GRPC 文档来开始。另一个优点是它在 docker 本身内部运行,因此可以轻松地在我的 mac 上测试我在服务器上部署的相同版本。它提供了自动证书续订和 DNS 质询,我可以轻松验证域。TOML反向代理端 TLS 终止的示例文件,用于 GRPC 和普通 REST 服务,支持http(对于较旧的应用程序) & https.defaultEntryPoints = ["http", "https"]logLevel = "INFO"[traefikLog][accessLog]  filePath = "/var/log/access.log"  format = "json"[entryPoints]  [entryPoints.http]  address = ":80"  [entryPoints.https]  address = ":443"    [entryPoints.https.tls][api][file][acme]email = "admin@example.com"storage = "acme.json"entryPoint = "https"acmeLogging = true  [acme.dnsChallenge]    provider = "gcloud"  [[acme.domains]]    main = "*.example.com"    sans = ["www.example.com"][backends]  [backends.foo]    [backends.foo.servers.server1]    url = "h2c://127.0.0.1:3000"  [backends.bar]    [backends.bar.servers.server1]    url = "http://127.0.0.1:3001"[frontends]  [frontends.foo]  backend = "foo"    [frontends.foo.routes.server1]    rule = "Host:foo.example.com"  passHostHeader = true  passTLSCert = false  [frontends.bar]  backend = "bar"    [frontends.bar.routes.server1]    rule = "Host:bar.example.com"  passHostHeader = true  passTLSCert = false唯一的问题是弄清楚提供商 ( dnsChallenge) 的 Google Cloud 设置,如果是第一次这样做,很难找到和设置!
随时随地看视频慕课网APP

相关分类

Go
我要回答