VCF私有云中自簽名證書(shū)配置全攻略:從原理到PAIS部署實(shí)踐
1. 項(xiàng)目概述與核心痛點(diǎn)最近在幫一個(gè)醫(yī)療信息化團(tuán)隊(duì)部署一套基于VMware Cloud FoundationVCF的私有AI服務(wù)Private AI Services 簡(jiǎn)稱(chēng)PAIS環(huán)境。這個(gè)環(huán)境主要用于處理一些敏感的醫(yī)療數(shù)據(jù)分析和模型訓(xùn)練比如輔助診斷影像分析、病歷文本挖掘等。由于數(shù)據(jù)隱私和安全合規(guī)的硬性要求整個(gè)服務(wù)必須運(yùn)行在內(nèi)網(wǎng)并且所有組件間的通信都需要啟用TLS加密。在預(yù)算和流程上暫時(shí)沒(méi)法走正規(guī)的CA證書(shū)頒發(fā)機(jī)構(gòu)渠道去申請(qǐng)受信證書(shū)所以自簽名證書(shū)就成了唯一的選擇。聽(tīng)起來(lái)很簡(jiǎn)單不就是生成個(gè)證書(shū)然后配上去嗎但實(shí)際操作下來(lái)從VCF的管理平面到PAIS的各個(gè)微服務(wù)組件再到客戶端連接這一路踩的坑簡(jiǎn)直能寫(xiě)滿一張A4紙。最典型的問(wèn)題就是你在瀏覽器或者用curl訪問(wèn)服務(wù)時(shí)那個(gè)經(jīng)典的“您的連接不是私密連接”或者“SSL certificate problem: self signed certificate”錯(cuò)誤。在PAIS這種復(fù)雜的、容器化、微服務(wù)架構(gòu)的環(huán)境里這個(gè)問(wèn)題會(huì)被放大因?yàn)樽C書(shū)需要在多個(gè)層級(jí)被信任VCF Manager、負(fù)載均衡器、Kubernetes Ingress Controller、以及跑在Pod里的各個(gè)服務(wù)本身。所以這篇指南的目的就是把我從生成證書(shū)開(kāi)始到最終讓PAIS所有服務(wù)都能被內(nèi)網(wǎng)客戶端無(wú)警告訪問(wèn)的完整過(guò)程、核心原理和那些“坑點(diǎn)”記錄下來(lái)。無(wú)論你是運(yùn)維工程師、架構(gòu)師還是開(kāi)發(fā)者只要你在處理VCF、PAIS或者任何類(lèi)似私有云環(huán)境下自簽名證書(shū)的配置希望這篇“避坑實(shí)錄”能幫你省下大量排查時(shí)間。2. 自簽名證書(shū)的核心原理與VCF/PAIS環(huán)境特殊性在開(kāi)始動(dòng)手之前我們必須搞清楚自簽名證書(shū)和受信CA簽發(fā)的證書(shū)本質(zhì)區(qū)別是什么以及這對(duì)VCF和PAIS意味著什么。2.1 自簽名證書(shū)的信任鏈問(wèn)題一個(gè)標(biāo)準(zhǔn)的TLS/SSL證書(shū)信任鏈?zhǔn)沁@樣的你的服務(wù)證書(shū)Server Certificate由一個(gè)中間CA證書(shū)Intermediate CA Certificate簽名而這個(gè)中間CA證書(shū)又由一個(gè)根CA證書(shū)Root CA Certificate簽名。你的操作系統(tǒng)或?yàn)g覽器里預(yù)置了這些受信的根CA證書(shū)列表。當(dāng)客戶端連接到你的服務(wù)時(shí)它會(huì)收到服務(wù)證書(shū)并沿著這個(gè)鏈向上驗(yàn)證直到找到一個(gè)它信任的根CA驗(yàn)證就通過(guò)了。自簽名證書(shū)則完全不同。它自己就是自己的根CA。也就是說(shuō)證書(shū)的“頒發(fā)者”Issuer和“主題”Subject通常是同一個(gè)。沒(méi)有任何公共的、預(yù)置的根CA為它背書(shū)。因此所有客戶端瀏覽器、curl、openssl、Java應(yīng)用等在默認(rèn)情況下都會(huì)拒絕信任它拋出安全警告。注意自簽名證書(shū)在加密能力上和CA簽發(fā)的證書(shū)沒(méi)有區(qū)別它同樣能提供強(qiáng)加密的HTTPS連接。問(wèn)題的核心 solely 在于“信任”。你必須手動(dòng)地將這個(gè)自簽名證書(shū)的根CA也就是證書(shū)本身或者你專(zhuān)門(mén)創(chuàng)建的CA證書(shū)安裝到每一個(gè)需要連接該服務(wù)的客戶端信任庫(kù)中。2.2 VCF與PAIS架構(gòu)下的證書(shū)層級(jí)在VCF環(huán)境中部署PAIS證書(shū)的配置涉及多個(gè)層面理解這個(gè)層級(jí)對(duì)排查問(wèn)題至關(guān)重要VCF管理平面這是入口。VCF Manager本身有一個(gè)管理界面可能還有NSX Manager、vCenter等。這些服務(wù)可能已經(jīng)使用了VCF內(nèi)置或你之前配置的證書(shū)。負(fù)載均衡器如NSX ALB/AviPAIS的入口流量通常由負(fù)載均衡器接收。你需要在這里配置一個(gè)包含私鑰和證書(shū)的SSL證書(shū)對(duì)象并將其綁定到虛擬服務(wù)Virtual Service。這個(gè)證書(shū)就是客戶端瀏覽器第一個(gè)會(huì)遇到的。Kubernetes IngressPAIS部署在由VCF管理的Kubernetes集群通常是Tanzu Kubernetes Grid上。外部流量通過(guò)負(fù)載均衡器后會(huì)到達(dá)Kubernetes的Ingress資源。Ingress Controller如Contour、NGINX也需要使用證書(shū)來(lái)終止TLS或者進(jìn)行TLS透?jìng)鳌AIS服務(wù)內(nèi)部PAIS本身由多個(gè)微服務(wù)組成如模型服務(wù)、數(shù)據(jù)服務(wù)、API網(wǎng)關(guān)等。這些服務(wù)之間通過(guò)Service Mesh如Istio或直接通過(guò)Kubernetes Service進(jìn)行通信。如果啟用了mTLS雙向TLS那么每個(gè)服務(wù)都需要自己的證書(shū)和信任庫(kù)。我們的核心工作就是確保第2層負(fù)載均衡器使用的自簽名證書(shū)其根CA被所有內(nèi)網(wǎng)客戶端信任。同時(shí)也要確保內(nèi)部服務(wù)間的證書(shū)信任如果涉及正確配置。3. 證書(shū)生成一步錯(cuò)步步錯(cuò)很多坑其實(shí)在生成證書(shū)的那一刻就埋下了。這里我推薦使用一個(gè)自建的私有CA來(lái)為所有服務(wù)簽發(fā)證書(shū)而不是為每個(gè)服務(wù)生成單獨(dú)的自簽名證書(shū)。這樣做有兩個(gè)巨大優(yōu)勢(shì)一是你只需要將這一個(gè)私有CA的根證書(shū)導(dǎo)入客戶端它簽發(fā)的所有證書(shū)都會(huì)被信任二是管理起來(lái)更規(guī)范。3.1 創(chuàng)建私有根CA首先我們創(chuàng)建自己的根CA。# 1. 創(chuàng)建用于存放CA的目錄 mkdir -p my_private_ca cd my_private_ca # 2. 生成根CA的私鑰使用強(qiáng)密碼保護(hù) openssl genrsa -aes256 -out ca.key 4096 # 系統(tǒng)會(huì)提示你輸入并驗(yàn)證密碼。請(qǐng)務(wù)必牢記此密碼。 # 3. 生成根CA的自簽名證書(shū)有效期為10年 openssl req -x509 -new -nodes -key ca.key -sha256 -days 3650 -out ca.crt -subj /CCN/STBeijing/LBeijing/OMyCompany/OUIT/CNMyPrivateRootCA關(guān)鍵參數(shù)解析-subj: 這里設(shè)置了證書(shū)的主題信息。CNCommon Name通常被用作CA的名稱(chēng)。在內(nèi)部環(huán)境你可以根據(jù)自己組織情況設(shè)置C國(guó)家、ST省、O組織等字段。特別注意對(duì)于現(xiàn)代瀏覽器和工具CN的作用在減弱更多依賴(lài)Subject Alternative NameSAN但根CA的CN仍然重要。-days 3650: 根CA證書(shū)有效期很長(zhǎng)設(shè)為10年減少維護(hù)頻率。-aes256: 加密私鑰增加安全性?,F(xiàn)在你得到了兩個(gè)核心文件ca.key加密的根CA私鑰和ca.crt根CA證書(shū)。ca.crt就是將來(lái)要導(dǎo)入到所有客戶端機(jī)器上的那個(gè)“信任根源”。3.2 為PAIS服務(wù)簽發(fā)證書(shū)假設(shè)我們的PAIS服務(wù)將通過(guò)域名pais.internal.mycompany.com來(lái)訪問(wèn)。現(xiàn)在用剛才創(chuàng)建的CA為它簽發(fā)證書(shū)。# 1. 創(chuàng)建服務(wù)私鑰不加密便于服務(wù)器自動(dòng)加載 openssl genrsa -out pais.internal.mycompany.com.key 2048 # 2. 創(chuàng)建證書(shū)簽名請(qǐng)求CSR openssl req -new -key pais.internal.mycompany.com.key -out pais.internal.mycompany.com.csr -subj /CCN/STBeijing/LBeijing/OMyCompany/OUPAIS/CNpais.internal.mycompany.com關(guān)鍵一步創(chuàng)建包含SAN的擴(kuò)展配置文件。這是現(xiàn)代TLS的強(qiáng)制要求尤其是Chrome等瀏覽器如果證書(shū)不包含SAN擴(kuò)展即使CN正確也會(huì)報(bào)錯(cuò)。創(chuàng)建一個(gè)文件pais.ext內(nèi)容如下authorityKeyIdentifierkeyid,issuer basicConstraintsCA:FALSE keyUsage digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment subjectAltName alt_names [alt_names] DNS.1 pais.internal.mycompany.com DNS.2 *.pais.internal.mycompany.com # 如果你需要通配符 # 如果有IP訪問(wèn)需求務(wù)必加上IP地址 # IP.1 10.1.1.100踩坑實(shí)錄1最初我只配置了CN沒(méi)有配SAN。結(jié)果Chrome和curl都報(bào)錯(cuò)“證書(shū)缺少主題備用名稱(chēng)(SAN)”。所以SAN擴(kuò)展現(xiàn)在是必須的DNS.1的值應(yīng)該和你要訪問(wèn)的域名完全一致。# 3. 使用根CA簽署CSR生成最終的服務(wù)端證書(shū) openssl x509 -req -in pais.internal.mycompany.com.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out pais.internal.mycompany.com.crt -days 365 -sha256 -extfile pais.ext參數(shù)解析-CAcreateserial: 首次簽署時(shí)創(chuàng)建序列號(hào)文件。-days 365: 服務(wù)證書(shū)有效期通常為1年需要建立續(xù)訂流程。-extfile pais.ext: 應(yīng)用我們剛才創(chuàng)建的擴(kuò)展配置文件注入SAN信息?,F(xiàn)在你得到了服務(wù)端所需的三個(gè)文件pais.internal.mycompany.com.key: 服務(wù)私鑰pais.internal.mycompany.com.crt: 服務(wù)證書(shū)由我們的私有CA簽名ca.crt: 根CA證書(shū)需要和服務(wù)器證書(shū)一起配置或單獨(dú)讓客戶端信任4. 在VCF/NSX ALB負(fù)載均衡器上配置證書(shū)這是客戶端接觸到的第一道關(guān)卡。我們以VMware NSX Advanced Load BalancerAvi為例它是VCF中常用的負(fù)載均衡解決方案。4.1 準(zhǔn)備證書(shū)文件在Avi中配置證書(shū)通常需要將私鑰和證書(shū)鏈合并成一個(gè)PEM格式的文件。證書(shū)鏈的順序是你的服務(wù)證書(shū)在前中間CA證書(shū)如果有在中間根CA證書(shū)在最后。因?yàn)槲覀冇玫氖亲越–A直接簽名所以鏈就是服務(wù)證書(shū) 根CA證書(shū)。# 將服務(wù)證書(shū)和根CA證書(shū)合并成鏈 cat pais.internal.mycompany.com.crt ca.crt pais_cert_chain.pem # 私鑰文件保持獨(dú)立或者也可以合并進(jìn)同一個(gè)文件Avi支持分開(kāi)上傳 # 對(duì)于Avi通常我們上傳兩個(gè)文件包含鏈的pem文件和獨(dú)立的私鑰key文件。4.2 在NSX ALB控制器上創(chuàng)建SSL證書(shū)對(duì)象登錄到NSX ALB控制器管理界面。導(dǎo)航到模板-安全-SSL/TLS證書(shū)。點(diǎn)擊創(chuàng)建。證書(shū)類(lèi)型選擇“證書(shū)”。格式選擇“PEM”。證書(shū)將pais_cert_chain.pem文件的內(nèi)容全部復(fù)制粘貼進(jìn)去。私鑰將pais.internal.mycompany.com.key文件的內(nèi)容復(fù)制粘貼進(jìn)去。為證書(shū)起一個(gè)名字例如ssl-pais-internal。點(diǎn)擊保存。踩坑實(shí)錄2粘貼證書(shū)和密鑰時(shí)務(wù)必確保格式完全正確沒(méi)有多余的空格、換行或不可見(jiàn)字符。特別是私鑰必須以-----BEGIN PRIVATE KEY-----開(kāi)頭以-----END PRIVATE KEY-----結(jié)尾。我曾經(jīng)因?yàn)閺腤indows記事本復(fù)制粘貼導(dǎo)致格式混亂Avi校驗(yàn)失敗排查了很久。4.3 將證書(shū)綁定到虛擬服務(wù)找到負(fù)責(zé)PAIS入口流量的虛擬服務(wù)Virtual Service。編輯該虛擬服務(wù)。在SSL/TLS配置部分啟用SSL。在SSL證書(shū)下拉框中選擇你剛剛創(chuàng)建的ssl-pais-internal。SSL配置文件根據(jù)安全要求選擇例如可以使用系統(tǒng)默認(rèn)的“System-Standard”或“System-Standard-PFS”。這決定了加密套件和協(xié)議版本。保存配置。此時(shí)負(fù)載均衡器層面已經(jīng)配置完成。但如果你直接用瀏覽器訪問(wèn)https://pais.internal.mycompany.com依然會(huì)看到安全警告因?yàn)槟愕碾娔X還不信任我們自建的根CAMyPrivateRootCA。5. 客戶端信任根CA證書(shū)這是讓警告消失的關(guān)鍵一步。你需要將ca.crt文件安裝到所有需要訪問(wèn)PAIS服務(wù)的客戶端機(jī)器的信任根證書(shū)存儲(chǔ)區(qū)。5.1 Windows系統(tǒng)將ca.crt文件復(fù)制到Windows客戶端。雙擊ca.crt文件會(huì)打開(kāi)證書(shū)查看器。點(diǎn)擊安裝證書(shū)。存儲(chǔ)位置選擇本地計(jì)算機(jī)需要管理員權(quán)限點(diǎn)擊下一步。選擇將所有的證書(shū)都放入下列存儲(chǔ)然后點(diǎn)擊瀏覽。選擇受信任的根證書(shū)頒發(fā)機(jī)構(gòu)點(diǎn)擊確定然后下一步。點(diǎn)擊完成。會(huì)彈出安全警告點(diǎn)擊“是”。安裝成功后重啟瀏覽器Chrome、Edge使用系統(tǒng)的證書(shū)存儲(chǔ)再次訪問(wèn)PAIS地址警告應(yīng)該消失顯示為安全的鎖標(biāo)志。5.2 macOS系統(tǒng)將ca.crt文件復(fù)制到Mac客戶端。雙擊ca.crt文件這會(huì)打開(kāi)“鑰匙串訪問(wèn)”應(yīng)用。在鑰匙串訪問(wèn)中確保左側(cè)選中的是“系統(tǒng)”鑰匙串需要輸入密碼。找到你剛剛導(dǎo)入的證書(shū)名稱(chēng)是MyPrivateRootCA雙擊打開(kāi)。在“信任”部分將“使用此證書(shū)時(shí)”設(shè)置為“始終信任”。關(guān)閉窗口輸入密碼保存更改。重啟Safari或Chrome訪問(wèn)。5.3 Linux系統(tǒng) (Ubuntu/CentOS)# 將根CA證書(shū)復(fù)制到系統(tǒng)CA存儲(chǔ)目錄 sudo cp ca.crt /usr/local/share/ca-certificates/MyPrivateRootCA.crt # 注意文件擴(kuò)展名必須是 .crt # 更新CA證書(shū)存儲(chǔ) sudo update-ca-certificates # 輸出應(yīng)顯示Adding debian:MyPrivateRootCA.pem # 驗(yàn)證證書(shū)是否被添加 openssl verify /usr/local/share/ca-certificates/MyPrivateRootCA.crt # 應(yīng)輸出/usr/local/share/ca-certificates/MyPrivateRootCA.crt: OK對(duì)于使用curl、wget等命令行工具系統(tǒng)更新后即可生效。對(duì)于Firefox瀏覽器它有自己的證書(shū)存儲(chǔ)需要單獨(dú)導(dǎo)入打開(kāi)Firefox設(shè)置 - 隱私與安全 - 查看證書(shū) - 證書(shū)機(jī)構(gòu) - 導(dǎo)入選擇ca.crt文件勾選“信任由此證書(shū)頒發(fā)機(jī)構(gòu)標(biāo)識(shí)的網(wǎng)站”確定。5.4 瀏覽器與命令行工具的差異Chrome/Edge/IE依賴(lài)操作系統(tǒng)的證書(shū)存儲(chǔ)。系統(tǒng)信任了它們就信任。Firefox使用自帶的NSS證書(shū)庫(kù)需要單獨(dú)導(dǎo)入。Java應(yīng)用使用獨(dú)立的cacerts信任庫(kù)。需要將根CA證書(shū)導(dǎo)入到JRE的cacerts中使用keytool命令。Pythonrequests庫(kù)默認(rèn)使用系統(tǒng)的CA包。在Linux上配置系統(tǒng)存儲(chǔ)后通常生效。也可以手動(dòng)指定verify參數(shù)為ca.crt的路徑。Docker Client如果Docker守護(hù)進(jìn)程配置了TLS客戶端也需要信任相應(yīng)的CA證書(shū)。踩坑實(shí)錄3團(tuán)隊(duì)里一位數(shù)據(jù)分析師的Python腳本調(diào)用PAIS API失敗報(bào)SSL錯(cuò)誤。檢查后發(fā)現(xiàn)他是在Windows的Anaconda環(huán)境里運(yùn)行而Anaconda可能使用了自帶的OpenSSL庫(kù)沒(méi)有讀取系統(tǒng)證書(shū)存儲(chǔ)。解決方法是在requests請(qǐng)求中顯式指定證書(shū)路徑requests.get(url, verify‘C:\path\to\ca.crt’)。所以在復(fù)雜環(huán)境下不能假設(shè)所有客戶端都自動(dòng)繼承了系統(tǒng)信任。6. PAIS Kubernetes Ingress與內(nèi)部服務(wù)配置負(fù)載均衡器處理了外部流量但流量進(jìn)入K8s集群后還需要經(jīng)過(guò)Ingress。如果PAIS的部署包如Helm Chart要求配置TLS證書(shū)通常指的是Ingress TLS。6.1 創(chuàng)建Kubernetes TLS Secret在部署PAIS的Kubernetes命名空間中我們需要?jiǎng)?chuàng)建一個(gè)包含證書(shū)和私鑰的Secret類(lèi)型為kubernetes.io/tls。# 假設(shè)你在部署PAIS的目錄下且已配置好kubectl上下文連接到TKG集群 kubectl create namespace pais-production # 創(chuàng)建TLS Secret kubectl create secret tls pais-tls-secret \ --namespacepais-production \ --certpais.internal.mycompany.com.crt \ --keypais.internal.mycompany.com.key重要這里使用的證書(shū)和私鑰必須與在負(fù)載均衡器上配置的證書(shū)是同一套。否則會(huì)出現(xiàn)“證書(shū)不匹配”的錯(cuò)誤。負(fù)載均衡器可能做SSL終止也可能做SSL透?jìng)?。如果是終止模式負(fù)載均衡器用一套證書(shū)Ingress可以用另一套甚至不用。但在我們的自簽名場(chǎng)景下為了簡(jiǎn)化通常讓負(fù)載均衡器做SSL終止然后將HTTP流量轉(zhuǎn)發(fā)給Ingress。這樣Ingress就不需要配置TLS了。具體采用哪種模式需要看PAIS的部署說(shuō)明和負(fù)載均衡器的配置。6.2 配置PAIS Helm Chart的Ingress TLS查看PAIS的Helm Chart的values.yaml文件通常會(huì)有Ingress相關(guān)的配置項(xiàng)ingress: enabled: true className: contour # 或 nginx取決于集群的Ingress Controller hosts: - host: pais.internal.mycompany.com paths: - path: / pathType: Prefix tls: - secretName: pais-tls-secret # 引用我們上面創(chuàng)建的Secret hosts: - pais.internal.mycompany.com在部署時(shí)通過(guò)--set參數(shù)或修改的values.yaml文件來(lái)啟用這些配置。6.3 服務(wù)網(wǎng)格如Istio的證書(shū)配置如果啟用如果PAIS部署在啟用了Istio服務(wù)網(wǎng)格的集群中并且開(kāi)啟了嚴(yán)格的mTLS模式那么證書(shū)配置會(huì)更復(fù)雜一層。你需要考慮入口網(wǎng)關(guān)Istio IngressGateway證書(shū)這相當(dāng)于替代了原生的Kubernetes Ingress。你需要將證書(shū)和私鑰配置到Istio的Gateway資源中方式也是通過(guò)創(chuàng)建Secret但Secret必須放在istio-system命名空間并且遵循Istio的命名規(guī)范如istio-ingressgateway-certs。內(nèi)部服務(wù)間通信證書(shū)Istio通常會(huì)通過(guò)其citadel組件自動(dòng)為每個(gè)服務(wù)簽發(fā)和管理證書(shū)。這些證書(shū)的根CA是Istio自帶的。關(guān)鍵點(diǎn)來(lái)了如果你有集群外的客戶端如另一個(gè)傳統(tǒng)VM上的應(yīng)用需要直接調(diào)用PAIS的某個(gè)內(nèi)部服務(wù)非通過(guò)入口網(wǎng)關(guān)并且該服務(wù)啟用了mTLS那么這個(gè)外部客戶端就需要信任Istio的根CA證書(shū)。你需要從Istio中提取這個(gè)根CA證書(shū)istio-system命名空間中的istio-ca-secret并將其安裝到外部客戶端上。踩坑實(shí)錄4我們有一個(gè)位于VCF外部的監(jiān)控系統(tǒng)需要調(diào)用PAIS的某個(gè)指標(biāo)接口。PAIS集群?jiǎn)⒂昧薎stio且策略為STRICT。直接調(diào)用一直失敗。后來(lái)發(fā)現(xiàn)是mTLS問(wèn)題。解決方案是要么為該監(jiān)控服務(wù)創(chuàng)建一個(gè)ServiceEntry并將其納入網(wǎng)格要么在目標(biāo)服務(wù)的DestinationRule中為該監(jiān)控系統(tǒng)的IP設(shè)置一個(gè)豁免策略使用trafficPolicy.tls.mode: DISABLE但后者安全性降低。最終我們選擇了為監(jiān)控系統(tǒng)安裝Istio的根CA證書(shū)并配置客戶端證書(shū)的方式實(shí)現(xiàn)了安全的mTLS通信。7. 常見(jiàn)問(wèn)題排查與調(diào)試技巧即使按照步驟操作你可能還是會(huì)遇到問(wèn)題。下面是一個(gè)快速排查清單和調(diào)試命令。7.1 問(wèn)題排查清單現(xiàn)象可能原因排查步驟瀏覽器顯示“不是私密連接”1. 根CA證書(shū)未安裝到客戶端。2. 證書(shū)域名不匹配SAN配置錯(cuò)誤。3. 證書(shū)已過(guò)期。1. 檢查客戶端證書(shū)存儲(chǔ)。2. 用openssl x509 -in cert.crt -text -noout查看證書(shū)詳情核對(duì)SAN和有效期。3. 檢查瀏覽器錯(cuò)誤代碼如NET::ERR_CERT_AUTHORITY_INVALID。curl報(bào)錯(cuò) “SSL certificate problem: self signed certificate”客戶端不信任自簽名CA。使用curl --cacert /path/to/ca.crt https://...指定CA證書(shū)。如果成功證明是信任問(wèn)題。curl報(bào)錯(cuò) “SSL certificate problem: certificate has expired”證書(shū)過(guò)期。檢查證書(shū)有效期openssl x509 -in cert.crt -enddate -nooutcurl報(bào)錯(cuò) “SSL certificate problem: unable to get local issuer certificate”證書(shū)鏈不完整。服務(wù)器沒(méi)有發(fā)送完整的證書(shū)鏈缺少中間CA或根CA。1. 用openssl s_client -connect host:port -showcerts查看服務(wù)器發(fā)送的完整鏈。2. 確保負(fù)載均衡器或服務(wù)器配置中包含了完整的證書(shū)鏈。訪問(wèn)負(fù)載均衡器VIP正常但訪問(wèn)Ingress域名報(bào)錯(cuò)1. DNS解析問(wèn)題。2. 負(fù)載均衡器到Ingress Controller的健康檢查或路由配置錯(cuò)誤。3. Ingress Controller未正確配置TLS或后端服務(wù)不可用。1.nslookup pais.internal.mycompany.com。2. 檢查負(fù)載均衡器虛擬服務(wù)的池Pool成員狀態(tài)和健康檢查。3. 檢查K8s Ingress資源狀態(tài)kubectl describe ingress name。4. 檢查Ingress Controller Pod日志。部分客戶端正常部分報(bào)錯(cuò)1. 客戶端系統(tǒng)/瀏覽器證書(shū)存儲(chǔ)未同步更新。2. 客戶端應(yīng)用如Java、Python使用了獨(dú)立的信任庫(kù)。3. 客戶端有代理或防火墻攔截導(dǎo)致證書(shū)驗(yàn)證行為不同。1. 確認(rèn)報(bào)錯(cuò)客戶端已正確安裝根CA證書(shū)并重啟了應(yīng)用。2. 檢查特定應(yīng)用的信任庫(kù)配置如Java的-Djavax.net.ssl.trustStore。3. 在報(bào)錯(cuò)客戶端上用openssl s_client進(jìn)行測(cè)試對(duì)比與正常客戶端的輸出差異。7.2 必備調(diào)試命令檢查證書(shū)詳細(xì)信息openssl x509 -in pais.internal.mycompany.com.crt -text -noout重點(diǎn)關(guān)注Subject尤其是CNIssuerValidity起止時(shí)間以及最重要的X509v3 Subject Alternative Name部分。模擬客戶端連接查看服務(wù)器發(fā)送的證書(shū)鏈openssl s_client -connect pais.internal.mycompany.com:443 -showcerts這個(gè)命令會(huì)打印出建立TLS連接的全過(guò)程包括服務(wù)器返回的所有證書(shū)。你可以看到證書(shū)鏈?zhǔn)欠裢暾约敖K端實(shí)體證書(shū)的SAN信息。驗(yàn)證證書(shū)鏈和信任# 使用系統(tǒng)CA存儲(chǔ)驗(yàn)證 openssl verify pais.internal.mycompany.com.crt # 使用指定的CA證書(shū)驗(yàn)證 openssl verify -CAfile ca.crt pais.internal.mycompany.com.crt檢查Kubernetes Secret內(nèi)容kubectl get secret pais-tls-secret -n pais-production -o yaml # 證書(shū)和密鑰是Base64編碼的可以解碼查看 kubectl get secret pais-tls-secret -n pais-production -o jsonpath{.data.tls\.crt} | base64 -d | openssl x509 -text -noout kubectl get secret pais-tls-secret -n pais-production -o jsonpath{.data.tls\.key} | base64 -d | openssl rsa -check -noout7.3 證書(shū)過(guò)期監(jiān)控與續(xù)訂自簽名證書(shū)最大的運(yùn)維負(fù)擔(dān)就是續(xù)訂。證書(shū)過(guò)期會(huì)導(dǎo)致服務(wù)突然中斷且錯(cuò)誤不明顯。記錄有效期將證書(shū)的過(guò)期日期記錄到日歷或監(jiān)控系統(tǒng)中。自動(dòng)化續(xù)訂腳本編寫(xiě)腳本自動(dòng)化證書(shū)續(xù)訂流程包括生成新CSR、用CA簽名、更新負(fù)載均衡器和K8s Secret。關(guān)鍵步驟更新Secret后需要重啟相關(guān)的Pod如Ingress Controller Pod以加載新證書(shū)??梢酝ㄟ^(guò)給Pod添加注解如kubectl annotate pod pod-name date$(date)來(lái)觸發(fā)滾動(dòng)更新。使用證書(shū)管理工具對(duì)于更復(fù)雜的環(huán)境可以考慮使用cert-manager這樣的Kubernetes原生證書(shū)管理工具。它可以集成私有CA如step-ca自動(dòng)為Ingress等資源簽發(fā)和輪換證書(shū)大大減輕管理壓力。雖然初始設(shè)置復(fù)雜但長(zhǎng)期來(lái)看是更優(yōu)解。整個(gè)配置過(guò)程從原理到實(shí)操最深的體會(huì)就是“細(xì)節(jié)決定成敗”。一個(gè)SAN字段的缺失、一個(gè)證書(shū)鏈的不完整、一個(gè)客戶端信任庫(kù)的遺漏都可能導(dǎo)致連接失敗。尤其是在VCF和PAIS這種多層級(jí)的云原生環(huán)境里清晰地理解流量路徑和每一層的安全邊界是成功配置自簽名TLS證書(shū)的關(guān)鍵。建議在正式部署前先在一個(gè)簡(jiǎn)單的測(cè)試環(huán)境中走通全流程記錄下每一步的命令和配置形成屬于你們團(tuán)隊(duì)的標(biāo)準(zhǔn)化操作手冊(cè)這會(huì)為后續(xù)的運(yùn)維和問(wèn)題排查帶來(lái)極大的便利。

相關(guān)新聞

本地部署情感對(duì)話AI:從環(huán)境搭建到API集成的完整實(shí)踐指南

本地部署情感對(duì)話AI:從環(huán)境搭建到API集成的完整實(shí)踐指南

這次我們來(lái)看一個(gè)名為“我將親自安慰你”的項(xiàng)目。這個(gè)名字聽(tīng)起來(lái)很特別,但它本質(zhì)上是一個(gè)專(zhuān)注于情感陪伴與對(duì)話的AI應(yīng)用。在技術(shù)層面,它通常意味著一個(gè)本地部署的、能夠進(jìn)行多輪情感化對(duì)話的語(yǔ)言模型或智能體。對(duì)于開(kāi)發(fā)者、AI愛(ài)好者或?qū)€(gè)性化聊天機(jī)器人…

2026/8/2 11:05:23 閱讀更多
Altium Designer原理圖標(biāo)題欄定制:從參數(shù)化設(shè)計(jì)到團(tuán)隊(duì)標(biāo)準(zhǔn)化

Altium Designer原理圖標(biāo)題欄定制:從參數(shù)化設(shè)計(jì)到團(tuán)隊(duì)標(biāo)準(zhǔn)化

1. 項(xiàng)目概述:為什么你需要一個(gè)專(zhuān)屬的Title Block?在電子設(shè)計(jì)領(lǐng)域,尤其是使用Altium Designer(簡(jiǎn)稱(chēng)AD)這類(lèi)EDA工具時(shí),原理圖不僅是電路邏輯的藍(lán)圖,更是團(tuán)隊(duì)協(xié)作、設(shè)計(jì)歸檔和項(xiàng)目管理的核心文檔。…

2026/8/2 11:05:23 閱讀更多
速賣(mài)通AI圖片翻譯API集成實(shí)戰(zhàn)

速賣(mài)通AI圖片翻譯API集成實(shí)戰(zhàn)

問(wèn)題引入在速賣(mài)通平臺(tái)上,跨國(guó)銷(xiāo)售的最大挑戰(zhàn)之一就是商品圖片的多語(yǔ)言適配。當(dāng)一位賣(mài)家準(zhǔn)備將200款冬季外套推向西班牙、法國(guó)、德國(guó)和日本市場(chǎng)時(shí),他面臨的困境非常具體:每款產(chǎn)品需要4-6張主圖,總計(jì)超過(guò)1000張圖片需要翻譯和調(diào)整?!?/p>

2026/8/2 11:05:23 閱讀更多
Unity游戲開(kāi)發(fā)中MVC框架的實(shí)踐指南:從理論到代碼實(shí)現(xiàn)

Unity游戲開(kāi)發(fā)中MVC框架的實(shí)踐指南:從理論到代碼實(shí)現(xiàn)

1. 項(xiàng)目概述:為什么Unity開(kāi)發(fā)者需要關(guān)注MVC? 如果你在Unity社區(qū)里混跡過(guò)一段時(shí)間,或者面試過(guò)一些Unity相關(guān)的崗位,大概率會(huì)聽(tīng)到過(guò)“MVC框架”這個(gè)詞。它就像一個(gè)傳說(shuō)中的武林秘籍,人人都說(shuō)好,但真正能把它在…

2026/8/2 12:25:40 閱讀更多
《深入理解Java虛擬機(jī)》第一章 OpenJDK12環(huán)境搭建-MacOS26版

《深入理解Java虛擬機(jī)》第一章 OpenJDK12環(huán)境搭建-MacOS26版

《深入理解 Java 虛擬機(jī)》第一章 OpenJDK 12 環(huán)境搭建 - MacOS 26 版一、環(huán)境準(zhǔn)備OpenJDK 12 源碼下載安裝 JDK 11(編譯時(shí)作為 Boot JDK)安裝 Xcode 和 Command Line Tools安裝 Homebrew安裝依賴(lài)庫(kù)二、開(kāi)始編譯 JDK三、逐項(xiàng)修復(fù)問(wèn)題 1:SDK do…

2026/8/2 12:25:40 閱讀更多
逆向工程中編碼與加密算法的識(shí)別、分析與實(shí)戰(zhàn)應(yīng)用

逆向工程中編碼與加密算法的識(shí)別、分析與實(shí)戰(zhàn)應(yīng)用

1. 從“菜雞”到入門(mén):為什么逆向工程繞不開(kāi)編碼與加密 剛接觸逆向工程的朋友,常常會(huì)卡在一個(gè)看似基礎(chǔ),實(shí)則至關(guān)重要的環(huán)節(jié):面對(duì)程序里一堆“亂碼”或者經(jīng)過(guò)變換的數(shù)據(jù),完全無(wú)從下手。你興致勃勃地打開(kāi)調(diào)試器&#xff0…

2026/8/2 12:25:40 閱讀更多
微信群聊總結(jié):從信息過(guò)載到價(jià)值提煉的方法論與實(shí)戰(zhàn)指南

微信群聊總結(jié):從信息過(guò)載到價(jià)值提煉的方法論與實(shí)戰(zhàn)指南

1. 從信息過(guò)載到價(jià)值提煉:為什么我們需要“群聊總結(jié)” 每天打開(kāi)微信,幾十個(gè)甚至上百個(gè)群聊的紅點(diǎn)提示,是不是讓你感到一陣陣的焦慮?工作群、項(xiàng)目群、家庭群、朋友群、興趣群……海量的信息碎片像潮水一樣涌來(lái),重要的通…

2026/8/2 12:25:40 閱讀更多
Unity構(gòu)建優(yōu)化利器:Build Report Tool深度解析與實(shí)戰(zhàn)指南

Unity構(gòu)建優(yōu)化利器:Build Report Tool深度解析與實(shí)戰(zhàn)指南

1. 項(xiàng)目概述:為什么我們需要一個(gè)構(gòu)建報(bào)告工具? 如果你是一個(gè)Unity開(kāi)發(fā)者,尤其是負(fù)責(zé)項(xiàng)目發(fā)布和迭代的工程師,那么“構(gòu)建”這個(gè)詞對(duì)你來(lái)說(shuō)一定不陌生。從點(diǎn)擊菜單欄的“Build”按鈕,到最終生成一個(gè)可執(zhí)行文件或安裝包&a…

2026/8/2 12:25:40 閱讀更多
國(guó)內(nèi)零門(mén)檻部署AI編程助手:Codex替代方案與VSCode集成指南

國(guó)內(nèi)零門(mén)檻部署AI編程助手:Codex替代方案與VSCode集成指南

這次我們來(lái)看一個(gè)在國(guó)內(nèi)免費(fèi)安裝使用 Codex 的完整方案。對(duì)于很多開(kāi)發(fā)者來(lái)說(shuō),Codex 是一個(gè)強(qiáng)大的 AI 編程助手,但直接訪問(wèn)和使用往往存在門(mén)檻。這篇文章的重點(diǎn)不是探討 Codex 背后的復(fù)雜技術(shù),而是提供一個(gè)清晰、可操作的本地化部署和使用指南…

2026/8/2 12:15:40 閱讀更多
MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案

MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案

MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案 【免費(fèi)下載鏈接】MoneyPrinterPlus AI一鍵批量生成各類(lèi)短視頻,自動(dòng)批量混剪短視頻,自動(dòng)把視頻發(fā)布到抖音,快手,小紅書(shū),視頻號(hào)上,賺錢(qián)從來(lái)沒(méi)有這么容易過(guò)! 支持本地語(yǔ)音模型chatTTS,fasterwhisper,…

2026/8/2 0:04:00 閱讀更多
3分鐘搞定!QQ空間歷史說(shuō)說(shuō)完整備份終極指南

3分鐘搞定!QQ空間歷史說(shuō)說(shuō)完整備份終極指南

3分鐘搞定!QQ空間歷史說(shuō)說(shuō)完整備份終極指南 【免費(fèi)下載鏈接】GetQzonehistory 獲取QQ空間發(fā)布的歷史說(shuō)說(shuō) 項(xiàng)目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾想過(guò),那些年發(fā)過(guò)的QQ空間說(shuō)說(shuō),那些記錄青春的文字…

2026/8/2 0:04:01 閱讀更多
MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案

MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案

MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案 【免費(fèi)下載鏈接】MoneyPrinterPlus AI一鍵批量生成各類(lèi)短視頻,自動(dòng)批量混剪短視頻,自動(dòng)把視頻發(fā)布到抖音,快手,小紅書(shū),視頻號(hào)上,賺錢(qián)從來(lái)沒(méi)有這么容易過(guò)! 支持本地語(yǔ)音模型chatTTS,fasterwhisper,…

2026/8/2 0:04:00 閱讀更多
3分鐘搞定!QQ空間歷史說(shuō)說(shuō)完整備份終極指南

3分鐘搞定!QQ空間歷史說(shuō)說(shuō)完整備份終極指南

3分鐘搞定!QQ空間歷史說(shuō)說(shuō)完整備份終極指南 【免費(fèi)下載鏈接】GetQzonehistory 獲取QQ空間發(fā)布的歷史說(shuō)說(shuō) 項(xiàng)目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾想過(guò),那些年發(fā)過(guò)的QQ空間說(shuō)說(shuō),那些記錄青春的文字…

2026/8/2 0:04:01 閱讀更多
AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O分配PCB板是應(yīng)用材料(Applied Materials)公司生產(chǎn)的一款用于半導(dǎo)體設(shè)備的I/O信號(hào)分配電路板。該型號(hào)(0100-02186)的核心特點(diǎn)如下:專(zhuān)用于Endura等半導(dǎo)體工藝腔室。集成信號(hào)路由與分配功能。連接控制…

2026/8/2 2:51:21 閱讀更多
Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動(dòng)機(jī)

Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動(dòng)機(jī)

Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動(dòng)機(jī)是日本日清(Nissei)品牌的一款工業(yè)用三相異步電機(jī),適用于自動(dòng)化設(shè)備及通用機(jī)械驅(qū)動(dòng)。該型號(hào)(FFMN-32L-10-T0 40AX)的核心特點(diǎn)如下:三相交流異步電動(dòng)機(jī)。額定…

2026/8/2 2:52:49 閱讀更多