Ошибка диспетчера сертификатов kubernetes: цепочка сертификатов искажена или повреждена
У меня есть менеджер сертификатов для подписания сертификата с эмитентом частного центра сертификации. секрет частного CA настроен правильно, и перед добавлением секрета TLS я проверил цепочку с помощью команды проверки OpenSSL, и все они правильно проверяют корень. Но когда то же самое делается с диспетчером сертификатов, сертификат не подписывается, и я получаю сообщение об ошибке «Сообщение: запрос сертификата не выполнен и будет повторен: ошибка подписи сертификата: цепочка сертификатов неверна или нарушена».
Вот yaml для эмитента сертификата
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: my-ca-issuer
namespace: default
spec:
ca:
secretName: my-tls-secret
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: cert-test
namespace: default
spec:
secretName: my-tls-secret
issuerRef:
name: my-ca-issuer
kind: ClusterIssuer
commonName: cert-test.com
renewBefore: 12h # Renew the certificate when it's 12 hours from expiration
my-tls-secret находится в пространстве имен диспетчера сертификатов
эмитент CA проверяет правильность
kubectl get clusterissuers -o wide
NAME READY STATUS AGE
my-ca-issuer True Signing CA verified 27h
секрет my-tls был создан с помощью этой команды
kubectl create secret generic my-tls-secret --from-file=tls.crt=cert-chain.pem --from-file=tls.key=myca.key --from-file=ca.crt=ca-chain.pem -n cert-manager
Любые подсказки о том, почему цепочка с диспетчером сертификатов искажена, тогда как проверка openssl не имеет никаких проблем с цепочкой
openssl crl2pkcs7 -nocrl -certfile ca-chain.pem | openssl pkcs7 -print_certs -noout
subject=C = US, ST = TX, L = Austin, O = org, CN = app-TLS-Sub-CA
issuer=C = US, ST = TX, L = Austin, O = org, CN = Issuing-Sub-CA
subject=C = US, ST = TX, L = Austin, O = org, CN = Issuing-Sub-CA
issuer=C = US, ST = TX, L = Austin, O = org, CN = Root
subject=C = US, ST = TX, L = Austin, O = org, CN = Root
issuer=C = US, ST = TX, L = Austin, O = org, CN = Root
2 ответа
Судя по вашим комментариям , проблема сохраняется даже после обеспечения правильного порядка и объединения сертификатов.
[ Kubernetes Cluster ]
|
[ cert-manager ]
| \
| [ Increased Log Verbosity ]
|
[ my-ca-issuer ClusterIssuer ]
| \
| [ Check CA Permissions ]
|
[ my-tls-secret (CA secret) ]
| \
| [ Verify Certificate Chain Formatting ]
|
[ cert-test Certificate ]
|
[ CertificateRequest Debugging ]
Хотя OpenSSL может проверить цепочку,в контексте Kubernetes это может интерпретироваться по-другому. Это может быть связано с тем, как обрабатывается анализ сертификатов.
Рассмотрите возможность использования такого инструмента, какkubectl describe
наCertificate
иCertificateRequest
ресурсы, чтобы получить больше подсказок.
kubectl describe certificate cert-name -n default
kubectl describe certificaterequest -n default
kubectl describe clusterissuer my-ca-issuer
Иногда файлы сертификатов могут содержать скрытые символы или проблемы с форматированием, которые трудно обнаружить. Убедитесь, что файлы PEM не содержат посторонних символов или неправильных окончаний строк. Вы можете использовать такие инструменты, какcat -v
или текстовый редактор с видимостью скрытых символов для проверки файлов.
Убедитесь, что центр сертификации, представленныйmy-tls-secret
имеет необходимые разрешения для подписи сертификатов. Некоторым центрам сертификации может быть разрешено подписывать только определенные типы или уровни сертификатов. Это особенно актуально, поскольку в иерархии ЦС имеется несколько уровней.
Увеличьте детализацию журналаcert-manager
чтобы получить более подробную информацию о том, что происходит в процессе подписания.
kubectl get deployments -n cert-manager
kubectl edit deployment <cert-manager-deployment-name> -n cert-manager
spec:
containers:
- args:
- --v=4 # This sets log verbosity to level 4
...
На всякий случай проблема может быть связана с глубиной вашей цепочки сертификатов. Хотя это и не распространено, некоторые системы имеют ограничения на глубину цепочки, которую они могут обрабатывать. Если возможно, протестируйте более простую цепочку (меньшее количество уровней), чтобы увидеть, сохраняется ли проблема.
Похоже, что проблема может быть связана с форматом или содержимым цепочки сертификатов в секрете my-tls-secret. Вы должны убедиться, что цепочка в tls.crt правильно упорядочена и содержит все необходимые промежуточные сертификаты.
Попробуйте объединить сертификаты в правильном порядке: сначала листовой сертификат, затем промежуточные сертификаты (если есть) и последним корневой сертификат. Затем обновите my-tls-secret, указав правильно упорядоченную цепочку.
Так:
kubectl create secret generic my-tls-secret --from-file=tls.crt=combined-chain.pem --from-file=tls.key=myca.key --namespace=cert-manager
Затем объедините сертификаты:
cat leaf-cert.pem intermediate-cert.pem root-cert.pem > combined-chain.pem
Дайте мне знать, как это происходит!