【发布时间】:2021-10-16 23:43:51
【问题描述】:
我正在尝试终止 Kubernetes 集群中 netty 网络服务器中的 TLS。
我正在使用cert-manager 来管理我网站的证书
这是结果
kubernetes get secret websitesslcert-staging -o yaml
apiVersion: v1
data:
tls.crt: REDACTED=
tls.key: REDACTED=
kind: Secret
metadata:
annotations:
cert-manager.io/alt-names: mysite.com
cert-manager.io/certificate-name: websitesslcert-staging
cert-manager.io/common-name: mysite.com
cert-manager.io/ip-sans: ""
cert-manager.io/issuer-group: cert-manager.io
cert-manager.io/issuer-kind: ClusterIssuer
cert-manager.io/issuer-name: letsencrypt-staging
cert-manager.io/uri-sans: ""
creationTimestamp: "2021-10-17T00:00:00Z"
name: websitesslcert-staging
namespace: default
resourceVersion: "123456"
uid: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
type: kubernetes.io/tls
kubernetes.io/tls 的格式描述为in the Kubernetes docs。
公钥/私钥对必须事先存在。公钥 --cert 的证书必须是 .PEM 编码的(Base64 编码的 DER 格式),并匹配给定的私钥作为--key。私钥 必须采用通常所说的 PEM 私钥格式, 未加密。在这两种情况下,PEM 的初始行和最后一行 (例如,--------BEGIN CERTIFICATE----- 和 --------END CERTIFICATE---- 用于证书)不包括在内。
我有一个必须terminate TLS 的 Java (Netty) 应用程序。 在本地,我可以复制秘密(“tls.crt”和“tls.key”)并将它们写入文件,但是我无法在本地服务器 Netty 4 中使用它们来接受 TLS 连接。
ChannelPipeline p = channel.pipeline();
SslContext sslCtx = SslContextBuilder.forServer(tlsKeyFile, tlsCertFile).build();
p.addLast("ssl", sslCtx.newHandler(channel.alloc()));
导致错误:
Execution error (CertificateException) at io.netty.handler.ssl.PemReader/readCertificates (PemReader.java:98).
found no certificates in input stream
将 --------BEGIN CERTIFICATE----- 和 --------END CERTIFICATE---- 添加到文件中会导致
Execution error (CertificateParsingException) at sun.security.x509.X509CertImpl/parse (X509CertImpl.java:1826).
signed overrun, bytes = 919
我应该如何处理这个问题,从 Netty 读取我的证书?
【问题讨论】:
标签: java ssl ssl-certificate netty