Что такое самоподписанный сертификат?
Самоподписанный сертификат — это TLS/SSL-сертификат, который подписан тем же субъектом, чья личность удостоверяется. В отличие от сертификатов, выданных Центрами Сертификации (CA), самоподписанные сертификаты по умолчанию не доверяются браузерами и клиентами.
Когда использовать самоподписанные сертификаты
- Среды разработки
- Внутренние тестовые и staging-системы
- Внутрисетевые сервисы, например, в Kubernetes
⚠️ Не используйте самоподписанные сертификаты в продакшене, если сервис доступен из интернета.
Как сгенерировать самоподписанный сертификат с помощью OpenSSL
openssl req -x509 -newkey rsa:4096 -sha256 -nodes -keyout key.pem -out cert.pem -days 365 -subj "/CN=my-service.local"
Создастся два файла:
key.pem
: приватный ключcert.pem
: самоподписанный сертификат
Использование самоподписанных сертификатов в Kubernetes
- Создайте TLS-секрет:
kubectl create secret tls my-tls-secret --key key.pem --cert cert.pem
- Используйте в Ingress или в поде:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: "true"
spec:
tls:
- hosts:
- my-service.local
secretName: my-tls-secret
rules:
- host: my-service.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-service
port:
number: 80
Доверие к самоподписанному сертификату
Сертификат нужно вручную установить как доверенный на клиенте:
curl --cacert cert.pem https://my-service.local
Или добавить его в хранилище доверенных сертификатов системы.
Заключение
Самоподписанные сертификаты — удобный способ зашифровать внутреннее взаимодействие между сервисами. Особенно актуально в Kubernetes или при локальной разработке. Главное — понимать ограничения в доверии.