[英]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.