OpenSSL 是一個(gè)強(qiáng)大的加密工具,廣泛用于生成密鑰、證書(shū)、簽名和加密通信等。在實(shí)際開(kāi)發(fā)和測(cè)試環(huán)境中,很多時(shí)候我們需要?jiǎng)?chuàng)建一個(gè)自簽名證書(shū),尤其是在沒(méi)有證書(shū)頒發(fā)機(jī)構(gòu)(CA)的情況下。自簽名證書(shū)通常用于測(cè)試環(huán)境或內(nèi)部使用,它的作用是為服務(wù)器提供加密通信保護(hù)。本文將詳細(xì)介紹如何使用 OpenSSL 來(lái)生成自簽名證書(shū)。
什么是自簽名證書(shū)?
自簽名證書(shū)是由證書(shū)持有者自己簽發(fā)的數(shù)字證書(shū),而非由第三方認(rèn)證機(jī)構(gòu)(CA)簽發(fā)。自簽名證書(shū)常用于內(nèi)部網(wǎng)絡(luò)或測(cè)試環(huán)境,雖然它們提供加密功能,但由于沒(méi)有受信任的 CA 簽名,它們會(huì)被瀏覽器或其他客戶端標(biāo)記為不受信任。因此,在正式環(huán)境中使用時(shí)需要特別注意。
OpenSSL 安裝與環(huán)境配置
在開(kāi)始生成自簽名證書(shū)之前,首先需要安裝 OpenSSL。大多數(shù) Linux 發(fā)行版都可以通過(guò)包管理器安裝 OpenSSL,在 Windows 和 macOS 上也有相應(yīng)的安裝包。
1. 在 Ubuntu 上安裝 OpenSSL:
sudo apt update sudo apt install openssl
2. 在 CentOS 上安裝 OpenSSL:
sudo yum install openssl
3. 在 Windows 上,用戶可以從 OpenSSL 官方網(wǎng)站下載并安裝適合的版本。
4. 在 macOS 上,可以通過(guò) Homebrew 安裝 OpenSSL:
brew install openssl
生成自簽名證書(shū)的步驟
使用 OpenSSL 生成自簽名證書(shū)的過(guò)程主要包括以下幾個(gè)步驟:
步驟 1: 生成私鑰(Private Key)
私鑰是用于加密和解密通信數(shù)據(jù)的關(guān)鍵部分。首先,使用 OpenSSL 生成私鑰文件。私鑰文件應(yīng)該妥善保管,因?yàn)樗亲C書(shū)的核心部分。
使用以下命令生成一個(gè) RSA 格式的私鑰:
openssl genpkey -algorithm RSA -out private.key -aes256
這條命令將生成一個(gè)加密的私鑰文件 "private.key",加密算法為 AES-256。你將被提示輸入密碼來(lái)保護(hù)這個(gè)私鑰文件。
步驟 2: 生成證書(shū)請(qǐng)求(CSR)
證書(shū)簽名請(qǐng)求(CSR,Certificate Signing Request)是一個(gè)包含申請(qǐng)證書(shū)所需信息的文件。在生成自簽名證書(shū)時(shí),這個(gè)步驟是必需的。CSR 文件包含了公鑰信息以及其他元數(shù)據(jù)(例如組織名稱、域名等)。
生成 CSR 文件的命令如下:
openssl req -new -key private.key -out server.csr
運(yùn)行該命令后,你需要輸入一些關(guān)于證書(shū)的信息,包括:
國(guó)家名(Country Name)
省份名(State or Province Name)
城市名(Locality Name)
組織名(Organization Name)
組織單位名(Organizational Unit Name)
公共域名(Common Name,通常為服務(wù)器域名或 IP 地址)
填寫這些信息后,系統(tǒng)會(huì)生成一個(gè)名為 "server.csr" 的文件。
步驟 3: 生成自簽名證書(shū)(Self-Signed Certificate)
現(xiàn)在,你可以使用上一步生成的 CSR 文件和私鑰來(lái)生成自簽名證書(shū)。自簽名證書(shū)將使用私鑰進(jìn)行加密,且證書(shū)的簽發(fā)者為自己。通過(guò) OpenSSL 命令行工具生成自簽名證書(shū)的命令如下:
openssl x509 -req -in server.csr -signkey private.key -out server.crt -days 365
該命令將根據(jù) CSR 文件 ("server.csr") 和私鑰文件 ("private.key") 生成一個(gè)有效期為 365 天的自簽名證書(shū),文件名為 "server.crt"。
步驟 4: 驗(yàn)證證書(shū)
生成自簽名證書(shū)后,你可以使用 OpenSSL 命令來(lái)驗(yàn)證證書(shū)內(nèi)容。驗(yàn)證的命令如下:
openssl x509 -in server.crt -text -noout
這條命令會(huì)輸出證書(shū)的詳細(xì)信息,包括證書(shū)的有效期、頒發(fā)者、主題(即證書(shū)持有者)以及公鑰信息。
如何將證書(shū)和私鑰部署到服務(wù)器
生成自簽名證書(shū)和私鑰后,你需要將其部署到實(shí)際的 Web 服務(wù)器或其他服務(wù)中。以 Apache Web 服務(wù)器為例,部署過(guò)程如下:
1. 將生成的證書(shū)文件("server.crt")和私鑰文件("private.key")復(fù)制到服務(wù)器的相應(yīng)目錄,通常為 "/etc/ssl/"。
2. 修改 Apache 配置文件(通常位于 "/etc/apache2/sites-available/default-ssl.conf" 或 "/etc/httpd/conf.d/ssl.conf"),將證書(shū)和私鑰的路徑配置到以下部分:
SSLCertificateFile /etc/ssl/server.crt SSLCertificateKeyFile /etc/ssl/private.key
3. 啟用 SSL 模塊并重啟 Apache 服務(wù)器:
sudo a2enmod ssl sudo systemctl restart apache2
4. 訪問(wèn)服務(wù)器時(shí),瀏覽器會(huì)提示證書(shū)不受信任,這就是因?yàn)樗亲院灻C書(shū)。你可以在瀏覽器中手動(dòng)信任該證書(shū),或者忽略警告繼續(xù)訪問(wèn)。
如何為自簽名證書(shū)添加額外的擴(kuò)展(可選)
在某些情況下,你可能需要為自簽名證書(shū)添加額外的擴(kuò)展(例如 Subject Alternative Name,SAN)。這對(duì)于使用 HTTPS 的多個(gè)域名非常重要。你可以通過(guò)創(chuàng)建一個(gè)配置文件來(lái)為證書(shū)添加擴(kuò)展:
1. 創(chuàng)建一個(gè)名為 "openssl.cnf" 的配置文件,并添加以下內(nèi)容:
[ req ] distinguished_name = req_distinguished_name x509_extensions = v3_ca [ req_distinguished_name ] commonName = Common Name (e.g. server FQDN or YOUR name) commonName_max = 64 [ v3_ca ] subjectAltName = @alt_names [ alt_names ] DNS.1 = example.com DNS.2 = www.example.com
2. 使用以下命令生成帶有擴(kuò)展的證書(shū):
openssl req -new -key private.key -out server.csr -config openssl.cnf openssl x509 -req -in server.csr -signkey private.key -out server.crt -days 365 -extensions v3_ca -extfile openssl.cnf
這樣,你就可以為自簽名證書(shū)添加 SAN 擴(kuò)展,從而支持多個(gè)域名。
總結(jié)
通過(guò) OpenSSL 生成自簽名證書(shū)的過(guò)程并不復(fù)雜,主要包括生成私鑰、創(chuàng)建證書(shū)簽名請(qǐng)求(CSR)、生成自簽名證書(shū)以及部署證書(shū)到服務(wù)器等步驟。自簽名證書(shū)在開(kāi)發(fā)和測(cè)試環(huán)境中非常有用,但在生產(chǎn)環(huán)境中,建議使用受信任的證書(shū)頒發(fā)機(jī)構(gòu)(CA)簽發(fā)的證書(shū)。希望本文的詳細(xì)步驟和代碼示例能夠幫助你快速掌握 OpenSSL 生成自簽名證書(shū)的方法。