TLS для службы GRPC, работающей за Nginx с использованием Golang - PullRequest
0 голосов
/ 30 ноября 2018

У меня есть приложение для флаттера (на основе дротиков) и сервер GoLang, использующий GRPC.

Я хотел защитить его, поэтому я попытался настроить Ngninx с помощью certbot (я новичок в этом), но бот требует вызова, когда он подключается к веб-службе (для домена)) для ответа http, который мой сервис не дает.Можно запустить и GRPC, и HTTP-сервер на одном и том же порту, но я не мог понять, как настроить Nginx для этого.

Затем я попытался настроить TLS для моей службы, используя autocertно выполнение этого с acme требует того же ответа веб-службы, и без этого я должен дать ручные сертификаты и пропустить небезопасную проверку, которая пока недоступна в dart (доступны только две опции secure и insecure).И тестирование autocert на локальном компьютере тоже не помогает, так как оно даже не создает локальные сертификаты (по крайней мере, для меня).

Я также читал о вызове DNS, который требует записи TXT DNS, но яЯ не уверен, попросит ли я ставить новую запись TXT при каждом обновлении.

В любом случае, я в основном не понимаю, как двигаться дальше.Я подключаюсь к GRPC к актуальным мобильным приложениям и не нашел много уроков или вопросов по этому поводу нигде.Мой сервер GoLang также взаимодействует с другими внутренними микросервисами, поэтому поддержка TLS также будет означать повторное развертывание всех других служб с включенным флагом защиты.

Любая помощь в отношении того, что мне следует сделать для защиты моего соединения GRPC с приложениями,было бы удивительно!

Соответствующие документы:

Извиняюсь, если это глупый вопрос, но я застрял на этом неделю.

1 Ответ

0 голосов
/ 06 мая 2019

Просто отправляю то, что я в итоге делал для моей установки. Nginx поддерживает GRPC с версией 1.3.10+, но требует много ручной работы и задания cron для автоматического обновления сертификатов, и в нем не было документации для практических рекомендаций.

Я закончилиспользуя вместо этого Traefik , я задокументировал весь процесс и почему я выбрал Traefik в своем блоге здесь

Короче говоря, Traefik позволил упростить настройку иочень подробная документация GRPC для начала.Другим плюсом было то, что он работает внутри самого докера, поэтому мог легко проверить на моем 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

Единственной проблемой было выяснение настроек Google Cloud для провайдера (dnsChallenge), которые довольно сложно найти и настроить, если выполнятьпервый раз!Подробнее о настройке traefik с GRPC здесь

...