我正在嘗試在 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 檔案中描述了 kubernetes.io/tls的格式。
公鑰/私鑰對必須事先存在。--cert 的公鑰證書必須是 .PEM 編碼(Base64 編碼的 DER 格式),并與 --key 的給定私鑰匹配。私鑰必須采用通常稱為 PEM 私鑰格式的未加密形式。在這兩種情況下,PEM 的初始行和最后一行(例如,--------BEGIN CERTIFICATE----- 和 -------END CERTIFICATE---- 用于證書)是不包含。
我有一個必須終止 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 讀取我的證書?
uj5u.com熱心網友回復:
結果證明,yaml 輸出中的證書是 base64 編碼的。base64 --decode顯示檔案內容。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/325591.html
上一篇:什么決定了密碼套件?
