Что такое самоподписанный сертификат?
Самоподписанный сертификат — это 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 или при локальной разработке. Главное — понимать ограничения в доверии.