alina-maslo
@alina-maslo
мечтательница

GOLANG приложение и свои сертификаты?

Как сделать echo веб-приложение, и чтобы создавались свои локальные сертификаты?

Знаю, что с помощью crypto/x509, я просто не могу найти рабочие примеры.

PS: По поводу golang.org/x/crypto/acme/autocert оставлю для себя к изучению в дальнейшем, так как разобралась что оно генерирует сертификаты с помощью известного сервиса letsencrypt.org по выдаче бесплатных сертификатов.
  • Вопрос задан
  • 126 просмотров
Решения вопроса 2
Tyranron
@Tyranron
Если всё делать по стандартному фэн-шую, то никаких отличий от обыкновенных OpenSSL туториалов то и нет:

0. Если нет уже готового CA (Certificate Authority), то генерируем новый: ecdsa.GenerateKey() + x509.CreateCertificate() (self-signed).

1. Генерируем приватный ключ PK (Private Key) для своего сертификата: ecdsa.GenerateKey().

2. Генерим запрос на создание сертификата CSR (Certificate Signing Request): x509.CreateCertificateRequest(). В качесте CN (Common Name) указываем тот адрес, по которому будем стучаться к приложению. Если таких адресов предполагается несколько, то используем SAN расширение в шаблоне сертификата.

3. Берем CA и выпускаем себе сертификат по сгенерированному CSR: x509.CreateCertificate().

4. Используем сертификат для TLS: http.ServeTLS().

Приватный ключ и сертификат (и свой, и CA) сохраняем в любую желаемую директорию в файловой системе. Права к приватным ключам при этом выставляем 0600. Если это дело всё разовое, то можно и во временную директорию (os.TempDir()), чтобы не мусорить.

Если это только чтобы поиграться, и не предполагается выстраивание своей PKI (Public Key Infrastructure), то можно и не париться с CA/CSR, а сразу выпускать self-signed сертификат с нужными Вам CN/SAN. То есть, остается только нулевой шаг.

Если у нас приложение пырится во внешний мир не "голым", а прикрыто каким-то проксирующим сервером (например, Nginx), что, в принципе, есть даже рекомендуемой практикой, то сертификат можно подключать для нашего хоста прямо там, а приложение оставить себе без TLS. В этом случае Nginx будет расшифровывать трафик у себя и в приложение пробрасывать уже незашифрованный трафик. Подобное называется терминацией TLS.
Если же мы хотим, чтобы между прокси-сервером и нашим приложением продолжал ходить зашифрованный трафик, то прокси-серверу нужно в настройках скормить наш CA сертификат, либо отключить проверку CA.
Ответ написан
alina-maslo
@alina-maslo Автор вопроса
мечтательница
Отвечу сама себе.

Реализовано в этом проекте:
github.com/josvazg/webca
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы
Boomstarter Москва
от 110 000 до 160 000 руб.
TechOps Москва
от 3 000 до 4 500 usd.
2Reallife Москва
от 100 000 до 130 000 руб.