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

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

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

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

PS: По поводу golang.org/x/crypto/acme/autocert оставлю для себя к изучению в дальнейшем, так как разобралась что оно генерирует сертификаты с помощью известного сервиса letsencrypt.org по выдаче бесплатных сертификатов.
  • Вопрос задан
  • 1140 просмотров
Решения вопроса 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
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы