一.用 OpenSSL 依據已有的自簽名 CA 注銷簽發的證書的步驟
1. 準備工作 你得有自簽名 CA 的私鑰(通常是 .key 文件)、CA 證書(通常是 .crt 文件)以及證書吊銷列表(CRL)文件。若還沒有 CRL 文件,就需要創建一個。
2. 創建初始 CRL 文件
要是還沒有 CRL 文件,就用以下命令創建一個:
openssl ca -gencrl -keyfile ca.key -cert ca.crt -out crl.pem
ca.key
:這是自簽名 CA 的私鑰文件。ca.crt
:這是自簽名 CA 的證書文件。crl.pem
:這是生成的證書吊銷列表文件
?3.吊銷證書
你要吊銷某個證書時,得知道該證書的序列號。可以用以下命令查看證書序列號:
?
openssl x509 -noout -serial -in certificate.crtopenssl ca -revoke certificate.crt -keyfile ca.key -cert ca.crt
certificate.crt
:你要吊銷的證書文件。ca.key
:自簽名 CA 的私鑰文件。ca.crt
:自簽名 CA 的證書文件。
? ?4.更新 CRL 文件
openssl ca -gencrl -keyfile ca.key -cert ca.crt -out crl.pem
ca.key
:自簽名 CA 的私鑰文件。ca.crt
:自簽名 CA 的證書文件。crl.pem
:更新后的證書吊銷列表文件。
二.要使用 OpenSSL 吊銷 Kubernetes(k8s)的 kubeconfig 里的用戶證書
?1. 確定相關文件和信息
CA 私鑰:一般存儲在 Kubernetes 集群的控制平面節點上,通常路徑為 /etc/kubernetes/pki/ca.key。 ? CA 證書:同樣位于控制平面節點,路徑通常是 /etc/kubernetes/pki/ca.crt。 ? 用戶證書:能從 kubeconfig 文件里提取。kubeconfig 文件一般在 ~/.kube/config,你可以用下面的命令提取用戶證書:
kubectl config view --raw -o jsonpath='{.users[?(@.name=="<USER_NAME>")].user.client-certificate-data}' | base64 -d > user.crt
這里的?<USER_NAME>
?要替換成 kubeconfig 里實際的用戶名.
2. 查看證書序列號
使用 OpenSSL 查看要吊銷的用戶證書的序列號:
openssl x509 -noout -serial -in user.crt
此命令會輸出證書的序列號,后續吊銷證書時會用到。
3. 檢查并創建 CRL 文件
如果還沒有證書吊銷列表(CRL)文件,就需要創建一個。若已有,可跳過此步驟。
openssl ca -gencrl -keyfile /etc/kubernetes/pki/ca.key -cert /etc/kubernetes/pki/ca.crt -out crl.pem
這里的?crl.pem
?就是生成的 CRL 文件。
4. 吊銷證書
利用 OpenSSL 的?ca
?命令吊銷用戶證書:
openssl ca -revoke user.crt -keyfile /etc/kubernetes/pki/ca.key -cert /etc/kubernetes/pki/ca.crt
運行此命令后,用戶證書就會被標記為已吊銷.
5. 更新 CRL 文件
吊銷證書后,需要更新 CRL 文件以包含新吊銷的證書:
openssl ca -gencrl -keyfile /etc/kubernetes/pki/ca.key -cert /etc/kubernetes/pki/ca.crt -out crl.pem
?6.查看 CRL 的基本信息
openssl crl -noout -text -in crl.pem
?openssl crl:這是 OpenSSL 用于處理 CRL 的命令。
? -noout:表示不輸出 CRL 的二進制內容。 ? -text:將 CRL 的內容以文本形式輸出。 ? -in crl.pem:指定要查看的 CRL 文件,這里假設 CRL 文件名為 crl.pem,你可根據實際情況替換
查看 CRL 的詳細吊銷條目
openssl crl -noout -revoked -in crl.pem
?-revoked
:此選項用于只輸出 CRL 中的吊銷條目信息
8. 在 Kubernetes 中使用 CRL
要讓 Kubernetes 集群使用更新后的 CRL 來驗證客戶端證書,需要在 API Server 的配置里添加 CRL 文件的路徑。
修改 API Server 配置
編輯 API Server 的靜態 Pod 配置文件,通常位于?/etc/kubernetes/manifests/kube-apiserver.yaml
。在?spec.containers[].command
?部分添加以下參數:
- --client-ca-file=/etc/kubernetes/pki/ca.crt
- --crl-file=/path/to/crl.pem
重啟 API Server
保存配置文件后,Kubernetes 會自動重啟 API Server 以應用新配置。
9.重新生成新的 CRL 且不包含已吊銷證書
要保證 OpenSSL 配置文件(通常是?/etc/pki/tls/openssl.cnf
)的?dir
?參數指向 CA 工作目錄
手動修改索引文件
OpenSSL 借助?index.txt
?文件來記錄證書狀態。你可以手動編輯該文件,把要恢復的證書狀態從?R
(已吊銷)改成?V
(有效)。
vim /etc/pki/CA/index.txt
?找到要恢復的證書條目,將開頭的?R
?改成?V
,并刪除與吊銷相關的時間等信息。
重新生成 CRL
openssl ca -gencrl -keyfile ca.key -cert ca.crt -out new_crl.pem
ca.key
?是 CA 私鑰文件。ca.crt
?是 CA 證書文件。new_crl.pem
?是新生成的 CRL 文件。
替換舊的 CRL 把新生成的 CRL 文件替換掉舊的 CRL 文件,這樣在驗證證書時就不會再把這些證書當作已吊銷。
10. 廢棄當前 CRL 并使用新的 CRL 管理
備份當前的?index.txt
?文件,然后清空該文件:
sudo cp /etc/pki/CA/index.txt /etc/pki/CA/index.txt.bak
sudo truncate -s 0 /etc/pki/CA/index.txt
重置序列號和 CRL 編號
重置?serial
?和?crlnumber
?文件
echo "01" | sudo tee /etc/pki/CA/serial
echo "01" | sudo tee /etc/pki/CA/crlnumber
?生成新的 CRL
將新生成的 CRL 文件應用到證書驗證環境中
7. 在吊銷證書的過程中出現的問題
問題1:Using configuration from /etc/pki/tls/
? ? ? ? ? ? openssl.cnf /etc/pki/CA/index.txt: No such file or directory
問題2:Using configuration from /etc/pki/tls/
? ? ? ? ? openssl.cnf /etc/pki/CA/crlnumber: No such file or directory error while loading CRL number
解決方式
1)創建 CA 目錄
首先,確保 CA 工作目錄存在,通常是?/etc/pki/CA
?:
mkdir -p /etc/pki/CA
2)創建索引文件
創建?index.txt
?文件,該文件用于記錄證書的狀態信息,初始為空:
touch /etc/pki/CA/index.txt
3) 創建?crlnumber
?文件
echo "01" | sudo tee /etc/pki/CA/crlnumber
4)創建序列號文件
創建?serial
?文件,并為其設置一個初始的序列號,例如?01
echo "01" | sudo tee /etc/pki/CA/serial
5)??確認文件權限
要保證 OpenSSL 命令有足夠的權限來訪問和修改?/etc/pki/CA
?目錄下的文件,你可以通過以下命令修改文件和目錄的權限:
sudo chmod -R 700 /etc/pki/CA
5)調整 OpenSSL 配置文件,可以不變
確保?/etc/pki/tls/openssl.cnf
?配置文件中的相關設置無誤,尤其是?dir
?參數,它應指向 CA 工作目錄。你可以通過以下命令編輯該文件。
在文件中找到?[ CA_default ]
?部分,確認?dir
?參數如下:
[ CA_default ]
dir = /etc/pki/CA # Where everything is kept
?
?