如何从cert-manager获取公钥

89次阅读
没有评论

问题描述

需要从bash中获取cert-manager的公钥。他可以在Kubernetes secrets中看到私钥,但不知道如何获取可以安全共享的公钥。

解决方案

请注意以下操作注意版本差异及修改前做好备份。
有三种方法可以获取公钥,它们应该返回相同的输出。如果不是,则可能出现问题。
以下所有操作假设使用Unix风格的shell,并且已安装jq、base64和openssl。假设密钥存储在cert-certname中,网站(假设此密钥保护的是一个网站)位于https://example.com

方案1

kubectl get secret cert-certname -o json  | jq -r '.data."tls.crt"' | base64 -d > tls.crt
openssl x509 -inform pem -in tls.crt -pubkey -noout

在上面的示例中,我们首先使用kubectl get secret命令获取cert-certname的密钥,并将其输出为JSON格式。然后,使用jq命令提取出tls.crt字段的值,并使用base64命令进行解码。接下来,将解码后的内容保存到tls.crt文件中。最后,使用openssl命令读取tls.crt文件,并输出公钥。

方案2

kubectl get secret cert-certname -o json  | jq -r '.data."tls.key"' | base64 -d > tls.key
openssl rsa -in tls.key -pubout

在这个示例中,我们使用与方案1相同的步骤,只是提取的是tls.key字段的值,并将解码后的内容保存到tls.key文件中。然后,使用openssl命令读取tls.key文件,并输出公钥。

方案3

openssl s_client -connect example.com:443 | openssl x509 -pubkey -noout

在这个示例中,我们使用openssl命令直接连接到example.com的443端口,并输出公钥。

请注意,方案1和方案2会在您的磁盘上创建包含密钥的文件,使用后应该删除它们。并且绝对不要将它们放入git或类似的版本控制中。

正文完