openssl 指令:憑證管理與加密操作 文章首圖

openssl 指令:憑證管理與加密操作

openssl 指令:憑證管理與加密操作

在 Linux 系統管理與資安領域中,openssl 無疑是最強大的瑞士刀之一。它不僅是 OpenSSL 加密庫的命令行工具,更是生成金鑰、創建憑證簽署請求(CSR)、管理 SSL/TLS 憑證以及進行各種加密運算的核心工具。對於系統管理員而言,熟練掌握 openssl 是建構安全通訊鏈路的必要技能。本文將深入解析其常見用法,並提供在 Ubuntu 22.04 / Debian 12 環境下可直接執行的實戰範例。

生成 RSA 金鑰對

加密通信的基礎在於非對稱金鑰對(公鑰與私鑰)。openssl genpkey 是現代推薦的生成方式,它比舊版的 genrsa 更具彈性,支援多種演算法。

若要生成一組 2048 位元的 RSA 私鑰,可以使用以下指令:

openssl genpkey -algorithm RSA -out private_key.pem -pkeyopt rsa_keygen_bits:2048

執行後,系統會生成一個名為 private_key.pem 的檔案。為了驗證金鑰是否正確生成,我們可以查看其內容:

openssl rsa -in private_key.pem -check -noout

若輸出 RSA key ok,則代表金鑰格式正確且完整。

創建憑證簽署請求 (CSR)

當你需要向憑證頒發機構(CA)申請正式憑證,或是在內部環境中建立自簽憑證時,首先必須生成 CSR。CSR 包含了你的公鑰以及組織資訊(如國家、公司名稱、主機名等)。

使用剛剛生成的私鑰來創建 CSR,並指定相關資訊:

openssl req -new -key private_key.pem -out server.csr -subj "/C=TW/ST=Taiwan/L=Taipei/O=MyCompany/OU=IT/CN=www.example.com"

這裡的 -subj 參數允許你在單一指令中指定所有主題欄位,無需互動式輸入。生成後,你可以檢查 CSR 的內容以確認資訊無誤:

openssl req -in server.csr -noout -text

輸出結果中會顯示詳細的 Subject 資訊以及公鑰數據,確保 CN(Common Name)欄位正確指向你的網域名稱。

生成自簽憑證 (Self-Signed Certificate)

在開發環境或內部測試中,我們通常不需要購買商業憑證,而是使用自簽憑證。這可以直接由私鑰和 CSR 生成,或者由私鑰直接生成。

以下示範如何基於已有的 CSR 生成有效期為 365 天的自簽憑證:

openssl x509 -req -in server.csr -signkey private_key.pem -out server_cert.pem -days 365

生成的 server_cert.pem 即為你的憑證檔案。你可以使用以下指令查看憑證的詳細資訊,特別是到期日:

openssl x509 -in server_cert.pem -noout -dates -subject

輸出範例:

subject=C = TW, ST = Taiwan, L = Taipei, O = MyCompany, OU = IT, CN = www.example.com
notBefore=Oct 20 10:00:00 2023 GMT
notAfter=Oct 20 10:00:00 2024 GMT

常見問題與注意事項

1. 憑證格式轉換與 PEM 與 DER 的區別 許多應用程式對憑證格式有特定要求。OpenSSL 預設使用 PEM 格式(Base64 編碼,包含 -----BEGIN CERTIFICATE----- 標頭)。若需轉換為 DER 格式(二進制格式),可使用以下指令:

openssl x509 -in server_cert.pem -outform der -out server_cert.der

反之亦然,使用 -inform pem 參數即可。

2. 驗證憑證鏈與私鑰匹配 在部署 SSL 服務前,務必確認憑證、CSR 與私鑰三者之間的關係。例如,確認私鑰的模數(Modulus)是否與憑證中的公鑰模數一致:

# 查看私鑰的 MD5 雜湊
openssl rsa -in private_key.pem -modulus -noout | openssl md5

# 查看憑證的 MD5 雜湊
openssl x509 -in server_cert.pem -modulus -noout | openssl md5

若兩者輸出的 MD5 值完全相同,則表示私鑰與憑證匹配,可放心部署。

小結

openssl 指令雖強大,但選項繁多容易令人混淆。掌握 genpkey 生成金鑰、req 創建 CSR、以及 x509 管理憑證這三大核心流程,即可應對絕大多數的憑證管理需求。建議在正式環境操作前,先在測試環境驗證憑證鏈的完整性,並定期檢查憑證的過期時間,以避免因憑證失效導致的服務中斷。