介紹
本教程將向您展示如何從可信任的商業證書機構(CA)獲取並安裝SSL證書。SSL證書允許Web服務器加密其流量,並提供一種機制來驗證服務器的身份給訪問者。使用SSL的網站通過https://
協議訪問。
在2010年代中期之前,許多較小的網站並不總是使用SSL或HTTPS。從那時起,安全預期增加了,並且建立了Let’s Encrypt項目,以在規模上提供免費、可信任的SSL證書,幾乎使每個人都能根據需要使用HTTPS。
但是,Let’s Encrypt的證書存在一些限制。它們每3個月過期一次,通常需要您擁有一個運行良好的自動更新腳本,在無法進行此操作的環境中使用起來可能有些麻煩。Let’s Encrypt也不提供擴展驗證證書,該證書驗證您網站存在的合法所有權,或者通配符證書,該證書將自動匹配您網站的每個可能的子域(例如shop.example.com),而無需手動註冊每個子域。
對大多數使用者來說,這些不會是重大的限制。Let’s Encrypt 是許多個人和商業網站的熱門選擇。然而,如果您有特定的企業軟體需求,或者有一個非常大型的商業運營,您應該考慮從商業 CA 購買證書。
本教程涵蓋了如何從受信任的證書授權機構選擇和部署 SSL 證書。在您獲得 SSL 證書之後,本教程將介紹如何在 Nginx 和 Apache 網絡伺服器上安裝它。
先決條件
嘗試從商業 CA 獲取 SSL 證書有幾個先決條件:
-
已註冊的域名。本教程將一直使用
example.com
。您可以從 Namecheap 購買域名,使用 Freenom 免費獲得一個,或者使用您選擇的域名註冊商。 -
訪問您域名的WHOIS記錄中的其中一個電子郵件地址,或者訪問該域名本身的“管理類型”電子郵件地址。發放SSL證書的證書機構通常通過向域名的WHOIS記錄中的一個地址,或者向該域名本身的通用管理電子郵件地址發送驗證郵件來驗證域控制權。要獲得擴展驗證證書,您還需要向證書機構提供文件,以建立網站所有者的法律身份,以及其他文件。
-
為您的服務器設置DNS記錄。如果您使用的是DigitalOcean,請參閱我們的DNS文檔,以了解如何添加它們。
這篇教程將提供配置指南,用於在 Ubuntu 22.04 伺服器上設置,遵循這個 Ubuntu 22.04 的初始伺服器設置 教程,包括一個啟用 sudo 的非 root 用戶和一個防火牆。大多數現代 Linux 變種的操作將相似。
你還應該安裝像 Nginx 或 Apache 這樣的 Web 伺服器,可以參照 在 Ubuntu 22.04 上安裝 Nginx 或 在 Ubuntu 22.04 上安裝 Apache Web 伺服器。確保你有一個針對你的域名的 伺服器區塊(或 Apache 虛擬主機)。
第一步 – 選擇你的憑證授權機構
如果你不確定使用哪個憑證授權機構,有一些因素需要考慮。
根憑證計畫成員資格
最关键的是,您选择的CA是最常用操作系统和网络浏览器的根证书程序的成员,即它是一个“受信任”的CA,其根证书被常用浏览器和其他软件信任。如果您的网站SSL证书由受信任的CA签名,那么其身份被信任的软件认为是有效的。
您遇到的大多数商业CA都是常见根CA程序的成员,但在购买证书之前检查一下也无妨。例如,苹果发布了其受信任的SSL根证书列表。
证书类型
确保您选择的CA提供您需要的证书类型。许多CA提供这些证书类型的变体,名称和定价结构各不相同。以下是每种类型的简要描述:
- 单域:用于单个域,例如
example.com
。请注意,额外的子域,例如www.example.com
,不包括在内。 - 通配符:用于一个域及其任何子域。例如,对于
*.example.com
的通配符证书也可以用于www.example.com
和store.example.com
- 多個域:也被稱為SAN或UC證書,可用於添加到主題替代名稱字段的多個域和子域。例如,單個多域證書可用於
example.com
、www.example.com
和example.net
除了上述證書類型外,CA提供不同級別的驗證:
- 域驗證(DV):CA在驗證請求者擁有或控制該域之後發放DV證書
- 組織驗證(OV):只有在發行CA驗證請求者的法律身份之後才能發放OV證書
- 擴展驗證(EV):只有在發行CA驗證請求者的法律身份等事項符合嚴格的指南之後才能發放EV證書。此類證書的目的是向您網站的訪問者提供對組織身份合法性的額外保證。EV證書可以是單域或多域,但不能是通配符
附加功能
許多 CA 提供各種各樣的“獎勵”功能,以區別自己與其他 SSL 憑證發行供應商。其中一些功能可能會幫助您節省金錢,因此在購買之前,您需要仔細衡量自己的需求和提供的功能。要注意的功能示例包括免費的憑證重新發行或價格合理的單域憑證,可用於www.
和域基本名稱,例如www.example.com
,SAN 為example.com
。
步驟 2 – 生成 CSR 和私鑰
在確定了您的先決條件並且知道所需的憑證類型之後,現在是時候生成憑證簽名請求(CSR)和私鑰了。
如果您計劃將 Apache HTTP 或 Nginx 用作 Web 服務器,您可以使用openssl
命令在 Web 服務器上生成私鑰和 CSR。在本教程中,您可以將所有相關文件保存在您的主目錄中,但請隨時將它們存儲在服務器上的任何安全位置:
要生成名為example.com.key
的私鑰和名為example.com.csr
的 CSR,請運行此命令(將example.com
替換為您的域名):
- openssl req -newkey rsa:2048 -nodes -keyout example.com.key -out example.com.csr
在這一點上,您將被提示提供幾行信息,這些信息將包含在您的證書請求中。最重要的部分是常見名稱
字段,它應與您要使用證書的名稱匹配 – 例如,example.com
,www.example.com
,或(對於通配符證書請求)*.example.com
。如果您計劃獲得OV或EV證書,請確保所有其他字段準確反映您的組織或業務詳細信息。提供“挑戰密碼”是不必要的。
例如:
OutputCountry Name (2 letter code) [AU]:US
State or Province Name (full name) [Some-State]:New York
Locality Name (eg, city) []:New York
Organization Name (eg, company) [Internet Widgits Pty Ltd]:My Company
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:example.com
Email Address []:[email protected]
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
這將生成一個.key
和.csr
文件。 .key
文件是您的私鑰,應該保持安全。 .csr
文件是您將發送給CA以請求SSL證書的文件。
- ls example.com*
Outputexample.com.csr example.com.key
在將證書請求提交給CA時,您將需要複製並粘貼您的CSR。 要打印CSR的內容,請使用cat
:
cat example.com.csr
現在您已準備好從CA購買證書。
步驟3 – 購買和獲取證書
有許多商業 CA 提供商,您可以比較和對比最適合您自己設置的選項。例如,Namecheap 作為 SSL 憑證轉售商,過去已經改變了上游 CA 提供商以提供最佳價值。目前,他們提供 Comodo CA 的憑證。以下是他們截至 2022 年 12 月的一些產品示例:
在做出選擇後,您需要上傳在前一步驟中生成的 CSR。您的 CA 提供商還可能有一個“批准者”步驟,該步驟將向您域名的 WHOIS 記錄中的一個地址或者向您獲得憑證的域名的 管理員 類型地址發送驗證請求郵件。
在批准憑證之後,憑證將發送到指定的管理員郵箱。將其複製並保存到與生成私鑰和 CSR 相同的位置上。將憑證命名為域名和一個 .crt
擴展名,例如 example.com.crt
,並將中間憑證命名為 intermediate.crt
。
現在憑證已經準備好安裝到您的 Web 伺服器上,但首先,您可能需要對防火牆進行一些更改。
步驟 4 – 更新防火牆以允許 HTTPS
如果您按照我们的Ubuntu 22.04设置指南启用了ufw
防火墙,您需要调整设置以允许HTTPS流量。Nginx和Apache在安装时都会向ufw
注册一些配置文件。
您可以通过键入以下命令查看当前设置:
- sudo ufw status
如果您收到只包含Nginx HTTP
或Apache
的输出,说明只允许Web服务器的HTTP流量:
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx HTTP ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx HTTP (v6) ALLOW Anywhere (v6)
为了额外允许HTTPS流量,请允许Nginx Full
或Apache Full
配置文件,并删除多余的HTTP配置文件允许:
- sudo ufw allow 'Nginx Full'
- sudo ufw delete allow 'Nginx HTTP'
这应该会产生以下结果:
- sudo ufw status
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx Full ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx Full (v6) ALLOW Anywhere (v6)
在最后一步,您将安装证书。
第5步 – 在您的服务器上安装证书
在从您选择的CA获得证书之后,您需要将其安装在Web服务器上。这涉及向Web服务器软件配置中添加一些与SSL相关的行。
本教程将介绍在Ubuntu 22.04上配置Nginx和Apache的步骤,但大多数现代Linux版本的操作方式类似。本教程还假设:
- 私钥、SSL证书以及(如果适用)CA的中间证书位于主目录下,路径为
/home/sammy
- 私钥的名称为
example.com.key
- SSL證書名稱為
example.com.crt
- 您的供應商返回的CA中間證書位於名為
intermediate.crt
的文件中
注意:在生產環境中,這些文件應該存儲在只有網絡服務器進程(通常是root
)可以訪問的地方,並且私鑰應該保持安全。例如,Let’s Encrypt將其生成的證書存儲在/etc/letsencrypt
中。由於多服務器配置的複雜性,生產示例會有所不同。
Nginx
這些是在Nginx上手動部署SSL證書的步驟。
如果您的CA只返回了一個中間證書,則必須創建一個單一的“鏈式”證書文件,其中包含您的證書和CA的中間證書。
假設您的證書文件名為example.com.crt
,您可以使用cat
命令將文件追加在一起以創建一個名為example.com.chained.crt
的合併文件:
- cat example.com.crt intermediate.crt > example.com.chained.crt
使用nano
或您喜歡的文本編輯器,打開默認的Nginx服務器塊文件以進行編輯:
- sudo nano /etc/nginx/sites-enabled/default
查找listen
指令,並將其修改為listen 443 ssl
:
…
server {
listen 443 ssl;
…
接下來,在同一個伺服器塊中找到 server_name
指令,並確保其值與您的憑證的通用名稱相符。此外,添加 ssl_certificate
和 ssl_certificate_key
指令以指定憑證和私鑰文件的路徑:
…
server_name example.com;
ssl_certificate /home/sammy/example.com.chained.crt;
ssl_certificate_key /home/sammy/example.com.key;
…
為了僅允許最安全的 SSL 協議和密碼,將以下行添加到文件中:
…
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
…
最後,為了將 HTTP 請求默認重定向到 HTTPS,您可以在文件頂部添加另一個伺服器塊:
server {
listen 80;
server_name example.com;
rewrite ^/(.*) https://example.com/$1 permanent;
}
…
保存並關閉文件。如果您使用 nano
,按 Ctrl+X
,然後在提示時,輸入 Y
,然後按 Enter。
在重新啟動 Nginx 之前,您可以使用 nginx -t
驗證您的配置:
- sudo nginx -t
如果沒有任何問題,重新啟動 Nginx 以啟用 HTTPS 上的 SSL:
- sudo systemctl restart nginx
通過訪問您的網站進行測試,例如 https://example.com
。您還應該嘗試通過 HTTP 連接,例如 http://example.com
,以確保重定向正常工作。
Apache
這些是在 Apache 上手動部署 SSL 憑證的步驟。
使用 nano
或您喜歡的文本編輯器,打開您的默認 Apache 虛擬主機文件進行編輯:
- sudo nano /etc/apache2/sites-available/000-default.conf
找到 <VirtualHost *:80>
條目,並修改它以使您的網絡伺服器監聽端口 443
:
…
<VirtualHost *:443>
…
接下來,如果不存在的話,請新增 ServerName
指令:
…
ServerName example.com
…
然後新增以下行來指定您的憑證和金鑰路徑:
…
SSLEngine on
SSLCertificateFile /home/sammy/example.com.crt
SSLCertificateKeyFile /home/sammy/example.com.key
SSLCACertificateFile /home/sammy/intermediate.crt
…
此時,您的伺服器已配置為僅接聽 HTTPS(端口443),因此對 HTTP(端口80)的請求將不被處理。為了將 HTTP 請求重定向到 HTTPS,請在文件頂部添加以下內容(兩個地方都替換為相應的名稱):
<VirtualHost *:80>
ServerName example.com
Redirect permanent / https://example.com/
</VirtualHost>
…
保存並關閉文件。如果您使用的是 nano
,請按 Ctrl+X
,然後在提示時輸入 Y
,然後按 Enter。
通過運行以下命令啟用 Apache SSL 模塊:
- sudo a2enmod ssl
現在,重新啟動 Apache 以加載新配置並啟用 TLS/SSL 透過 HTTPS。
- sudo systemctl restart apache2
通過使用 HTTPS 訪問您的站點進行測試,例如 https://example.com
。您還應試著通過 HTTP 連接,例如 http://example.com
以確保重定向正常運作。
結論
在本教程中,您學會了如何判斷何時需要從商業 CA 購買 SSL 憑證,以及如何比較和對比可用的選項。您還學會了如何配置 Nginx 或 Apache 來支持 HTTPS,以及如何適應它們的配置以用於生產環境。
接下來,您可能想閱讀有關其他 SSL 使用案例,例如在使用負載均衡器時。