Если всё делать по стандартному фэн-шую, то никаких отличий от
обыкновенных 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.