[英]TLS for GRPC service running behind Nginx using Golang
我有一个使用GRPC的flutter应用程序(基于飞镖)和GoLang服务器。
我想保护它,所以我尝试建立Ngninx
与certbot
(我是新在此),但机器人需要在其连接到Web服务(域)的HTTP响应一个挑战,我的服务没有按不给。 可以在同一端口上同时运行GRPC和HTTP服务器,但是我不明白如何为此设置Nginx
。
然后,我尝试使用autocert
为我的服务本身设置TLS,但是使用acme进行此操作需要相同的Web服务响应,而没有该操作,我必须提供手动证书并跳过不安全的验证,这在dart中暂时不可用(只有两个选项) secure
和insecure
)。 在本地测试自动autocert
也无济于事,因为它甚至不创建本地证书(至少对我而言)。
我还读到有关DNS挑战的信息,该挑战需要DNS TXT记录,但是我不确定是否会要求我在每次续订时都提出新的TXT记录。
无论如何,我对如何继续前进感到困惑。 我将GRPC连接到实际的移动应用程序,却在任何地方都找不到很多关于此的教程或问题。 我的GoLang服务器还与其他内部微服务进行交互,因此使其支持TLS还意味着在启用安全标记的情况下重新部署所有其他服务。
关于如何保护我的GRPC与应用程序的连接的任何帮助,都将是惊人的!
相关文档:
抱歉,这是一个愚蠢的问题,但是我已经坚持了一个星期。
只是发布我最终为设置所做的事情。 Nginx确实支持1.3.10+版的GRPC,但是需要大量的手动工作和cron作业来自动更新证书,并且缺少有关如何操作的文档。
我最终使用了Traefik ,我记录了整个过程以及为什么我在这里的博客文章中选择了Traefik
简而言之,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设置,如果是dnsChallenge
,则很难找到和设置! 在此处阅读有关使用GRPC配置traefik的更多信息
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.