我已经使用 ACM 创建了证书。现在,我想使用 kubernetes 创建 TLS 密钥,以便我可以使用该密钥来配置 Ingress 资源。
我正在尝试使用创建 TLS 密钥kubectl create secret tls fsi-secret --cert=fsi.chain.pem --key=fsi.key.pem
然而它返回一个错误说error: failed to load key pair tls: failed to parse private key
私钥是使用密码创建的,因此在阅读了一点内容之后,我决定使用未加密的私钥,因此我执行了以下步骤:
openssl rsa -in fsi.key.pem -out fsi.key.decrypted.pem -passin pass: abcdefgxxxx
上述步骤生成了原始私钥的未加密版本。接下来,我尝试了create secret
上述命令,只是将 --key 更改为使用未加密的密钥:
kubectl create secret tls fsi-secret --cert=fsi.chain.pem --key=fsi.key.decrypted.pem
然而,这导致了 error: failed to load key pair tls: private key does not match public key
。
我正在创建这个 tls 密钥以便在入口资源定义中使用它。
任何帮助,将不胜感激。
答案1
您应该检查的一件事是证书的链顺序,因为第一个证书将根据私钥进行检查。因此,您的证书如下所示:
-----BEGIN MY CERTIFICATE-----
-----END MY CERTIFICATE-----
-----BEGIN INTERMEDIATE CERTIFICATE-----
-----END INTERMEDIATE CERTIFICATE-----
-----BEGIN INTERMEDIATE CERTIFICATE-----
-----END INTERMEDIATE CERTIFICATE-----
-----BEGIN ROOT CERTIFICATE-----
-----END ROOT CERTIFICATE-----
将确保订单正确。
您可以在下面找到有关该主题的更多深入资料:
如果情况仍然不是这样,请告知我们并更新您的问题。
答案2
从根证书和中间证书创建 Kubernetes 机密时遇到了此问题。
问题是由于我的连接证书文件存在错误。
我使用以下命令连接根证书和中间证书:
cat root-certificate.crt intermediate-certificate.pem > bundled-certificate.crt
当我运行下面的命令来生成秘密时:
kubectl create secret tls myapp-tls --key=my-cert-private.key --cert=bundled-certificate.crt --namespace production --dry-run=client -o yaml > myapp_bundle_cert.yaml
我收到错误:
error: tls: private key does not match public key
以下是我修复的方法:
当我检查连接的证书文件时,我发现有一个重叠部分,如下所示:
-----END CERTIFICATE----------BEGIN CERTIFICATE-----
我所要做的就是修复格式:
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
之后,当我运行命令时:
kubectl create secret tls myapp-tls --key=my-cert-private.key --cert=bundled-certificate.crt --namespace production --dry-run=client -o yaml > myapp_bundle_cert.yaml
它工作得很好。