Ответ
TLS/SSL сертификат — это цифровой документ, который выполняет две основные функции: аутентификацию (подтверждает, что сервер действительно тот, за кого себя выдает) и шифрование (обеспечивает безопасный канал для обмена данными).
Он связывает доменное имя, хост или организацию с криптографическим публичным ключом.
Основные компоненты сертификата:
- Публичный ключ: Используется для шифрования данных, отправляемых на сервер.
- Информация о владельце (Subject): Доменное имя (
Common Name
), организация, страна и т.д. - Цифровая подпись УЦ (CA): Удостоверяющий центр (например, Let's Encrypt, DigiCert) подписывает сертификат своим приватным ключом, подтверждая его подлинность. Это создает цепочку доверия.
- Срок действия: Даты начала и окончания действия сертификата.
Пример генерации самоподписанного сертификата в Go:
// ВАЖНО: В реальных приложениях всегда обрабатывайте ошибки!
// Здесь они опущены для краткости.
package main
import (
"crypto/rand"
"crypto/rsa"
"crypto/x509"
"crypto/x509/pkix"
"math/big"
"time"
)
func main() {
certTemplate := &x509.Certificate{
SerialNumber: big.NewInt(2023),
Subject: pkix.Name{
Organization: []string{"My Awesome Company"},
Country: []string{"RU"},
CommonName: "localhost",
},
NotBefore: time.Now(),
NotAfter: time.Now().AddDate(1, 0, 0),
KeyUsage: x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature,
ExtKeyUsage: []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth},
DNSNames: []string{"localhost"},
}
// Генерируем приватный ключ
privKey, _ := rsa.GenerateKey(rand.Reader, 4096)
// Создаем сам сертификат, подписывая его собственным приватным ключом
certBytes, _ := x509.CreateCertificate(rand.Reader, certTemplate, certTemplate, &privKey.PublicKey, privKey)
// Теперь certBytes и privKey можно сохранить в .pem файлы и использовать в веб-сервере
}
Применение в бэкенде:
- HTTPS: Защита трафика между клиентом и веб-сервером.
- gRPC: Обеспечение безопасного соединения между микросервисами.
- mTLS (Mutual TLS): Двусторонняя аутентификация, когда и клиент, и сервер проверяют сертификаты друг друга.