大多數互聯網及內部網絡的網頁伺服器使用 SSL 證書來保護連接。這些證書通常是由 OpenSSL 生成的——一個包含 SSL 和 TLS 協議的開源實現的軟件庫。基本上,我們正在看一個核心庫,提供各種加密和實用功能。因為它易於使用,最重要的是,它是開源的(所以,免費),它成功地成為了行業標準。
OpenSSL 可用於 Windows、Linux 和 MacOS。因此,在開始之前,確保您的機器上已安裝 OpenSSL。這裡有一個預編譯二進制文件的列表以供方便。但說實話,操作系統在這裡並不重要——在我們的情況下,命令將是相同的。
在本教程中,我們將展示使用 OpenSSL 生成自簽名證書是多麼簡單。
這樣的自簽名證書非常適合如果您想使用 HTTPS(HTTP over TLS)來保護您的 Apache HTTP 或 Nginx 網頁伺服器,並且您知道您的證書不需要由 CA 簽名。
如何使用 OpenSSL?
OpenSSL 完全是關於其命令行。下面,我們整理了一些普通用戶可以使用的常見 OpenSSL 命令來生成私鑰。在每個命令之後,我們將嘗試通過將其分解為組成部分來解釋該行代碼的確切作用。如果您想學習所有命令,可以查看這個頁面。
如何生成自簽名證書?
讓我們開始!首先,我們想檢查是否已安裝 OpenSSL。為此,我們需要運行:
openssl version -a如果您看到類似這樣的內容,您就走在正確的路上:
OpenSSL 3.0.0 7 sep 2021 (Library: OpenSSL 3.0.0 7 sep 2021)
built on: Tue Sep 7 11:46:32 2021 UTC
platform: darwin64-x86_64-cc
options: bn(64,64)
compiler: clang -fPIC -arch x86_64 -O3 -Wall -DL_ENDIAN -DOPENSSL_PIC -D_REENTRANT -DOPENSSL_BUILDING_OPENSSL -DNDEBUG
OPENSSLDIR: "/usr/local/etc/openssl@3"
ENGINESDIR: "/usr/local/Cellar/openssl@3/3.0.0_1/lib/engines-3"
MODULESDIR: "/usr/local/Cellar/openssl@3/3.0.0_1/lib/ossl-modules"
Seeding source: os-specific
CPUINFO: OPENSSL_ia32cap=0x7ffaf3bfffebffff:0x40000000029c67af這段代碼有效地指定了您安裝的 SSL 版本及其他一些細節。
現在,我們議程上的第一件重要事情是生成一對公私密鑰。為此,我們應該輸入以下命令:
openssl genrsa -out passwork.key 2048genrsa——是生成一對 RSA 算法密鑰的命令;
-out passwork.key——這是輸出密鑰文件的名稱;
2048——密鑰大小。請確保在此階段仔細檢查您的要求,因為該值可能會根據您的用例而改變。
現在我們在指定的目錄中有了文件 ‘passwork.key’。一旦我們創建了一個文件,我們可以,例如,通過運行以下命令提取公鑰:
openssl rsa -in passwork.key -pubout -out passwork_public.keyrsa——我們應該指定我們使用的算法;
-in passwork.key——我們使用現有的密鑰對;
-pubout——在這裡,我們僅提取公鑰;
-out passwork_public.key——我們將其導出為名為 passwork_public.key 的文件。
現在我們可以開始創建 CSR——證書簽名請求。在實際生產場景中,這樣的 CSR 會轉發給 CA 以便其代表您簽名,這樣您就可以獲得證書。但為了我們的教程,我們將創建一個 CSR 並自簽名。
創建 CSR 的命令如下:
openssl req -new -key passwork.key -out passwork.csrreq -new——在這裡,我們指定我們想要創建一些新的東西;
-key passwork.key——在這裡,我們指定將使用的密鑰;
-out passwork.csr——在這裡,我們指定輸出文件。
按下 ‘Enter’ 鍵後,您將看到類似這樣的內容:
您將被要求輸入將包含在您的證書請求中的信息。
您將要輸入的內容稱為區別名稱或 DN。
有幾個字段,但您可以留空一些
對於某些字段,會有默認值,
如果您輸入 '.',該字段將保持空白。輸入所需的數據。為了我們的教程,我們輸入了以下虛假值:
-----
Country Name (2 letter code) [AU]:US
State or Province Name (full name) [Some-State]:FL
Locality Name (eg, city) []:Tallahassee
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Passwork
Organizational Unit Name (eg, section) []:.
Common Name (e.g. server FQDN or YOUR name) []:*.passwork.com
Email Address []:[email protected]
請輸入以下 '額外' 屬性
以隨您的證書請求發送
挑戰密碼 []:
可選的公司名稱 []:最重要的字段之一是 Common Name,它應該與將要使用證書的伺服器名稱或 FQDN 匹配。
在上述所有步驟之後,我們將完全生成 CSR 文件。在現實世界中,這個階段,我們想要驗證我們的 CSR 文件,以免將錯誤的文件傳遞給 CA。此外,檢查 FQDN 是否正確也是良好的做法。
考慮到這一點,我們運行:
openssl req -text -in passwork.csr -noout -verify在我們的情況下,輸出將是:
證書請求自簽名驗證 OK
證書請求:
數據:
版本:1 (0x0)
主題:C = US, ST = FL, L = Tallahassee, O = Passwork, CN = *.passwork.com, emailAddress = [email protected]
主題公鑰信息:
公鑰算法:rsaEncryption
公鑰:(2048 位)
模數:
00:dd:c9:5a:27:82:00:0e:cc:43:c2:99:3a:e7:0a:
b7:c2:96:06:f1:30:d6:3e:de:7c:6d:f1:98:66:cf:
9d:8a:9c:09:43:a9:ab:59:0f:19:29:44:ec:2d:73:
47:38:94:78:1b:4f:16:b6:4a:2b:45:55:0f:39:56:
96:c3:53:e6:65:db:f7:91:b1:cb:36:e7:4b:cd:cd:
bb:6b:36:9e:92:c9:5e:cc:09:de:f6:ca:43:66:14:
21:b1:f9:37:56:22:6a:4f:3c:c5:08:5a:ab:81:19:
88:a3:ee:87:9c:c6:1c:d5:42:71:35:33:cd:f4:ed:
59:81:c6:eb:f3:02:da:43:e0:ce:f9:a5:6a:ca:d4:
39:81:b3:17:68:4b:9a:a4:e0:41:55:c7:46:5d:38:
05:f7:cc:7b:0b:80:b8:63:f4:91:81:d8:80:7c:00:
11:e0:55:19:07:23:4a:5d:08:8e:8d:fc:c6:05:59:
12:d1:7a:de:50:c4:d3:41:5f:b2:73:33:8b:2d:b7:
80:a3:f4:66:b1:80:d1:22:01:71:b7:5d:75:a7:df:
ae:e8:bd:22:32:30:71:54:56:ae:a6:b3:38:be:29:
bb:af:be:01:65:fb:d4:66:84:b0:f0:fb:4b:58:c2:
0e:3e:ee:9c:01:05:2e:02:7a:e1:42:71:c2:66:80:
f7:27
指數:65537 (0x10001)
屬性:
(無)
請求的擴展:
簽名算法:sha256WithRSAEncryption
簽名值:
84:db:c8:7c:62:f3:54:85:c4:df:b9:c5:f5:2d:7a:c9:01:b1:
2b:2b:69:a4:d6:ff:e8:8c:ef:39:dd:27:52:de:ba:58:67:5e:
9a:37:c2:5c:2e:1c:58:7e:5b:f6:5d:cf:c5:f7:39:17:20:5f:
82:bb:a5:52:bb:23:b9:b4:1a:c5:99:8d:1e:68:c9:1c:7e:a1:
e1:39:9b:5e:b6:d4:22:17:38:fe:c8:8e:a5:82:da:ab:c9:ae:
63:e6:42:5a:e0:09:50:a5:86:5a:8b:82:0c:0b:df:40:54:0d:
9f:ec:b5:71:79:08:84:04:85:fc:6c:7b:63:38:37:b0:6d:20:
10:2b:51:8a:dd:36:e6:92:c0:b6:9c:2e:86:c9:5a:55:3c:52:
26:2b:8c:3d:80:35:fa:2a:40:c0:9e:d3:f2:e5:0e:78:e8:ea:
d2:6f:ef:00:77:45:e5:1b:cc:df:da:52:b2:14:c9:23:09:f0:
9b:5e:f5:9d:7d:df:e6:82:d1:b7:3a:a4:34:b5:df:bb:d6:fa:
fe:85:47:6e:63:51:c3:d2:9d:11:43:16:2c:3e:df:44:0b:a7:
08:1a:58:d5:f3:3d:49:a0:52:b7:6f:85:06:5d:da:3f:10:db:
33:4f:71:38:6d:f6:e2:0e:ad:e1:74:35:27:09:a5:90:92:18:
fc:96:30:54正如您所看到的,它列出了您在回答與 CSR 相關的問題時提供的關鍵數據。檢查這些值,如果有錯誤——在將其傳遞給 CA 之前簡單地重新生成 CSR。
如前所述,我們將創建一個自簽名證書,而不是將 CSR 傳遞給 CA。為此,我們應該輸入以下內容:
openssl x509 -in passwork.csr -out passwork.crt -req -signkey passwork.key -days 30‘X509’ 命令是我們的多用途證書工具;
-in passwork.csr 代表我們的 CSR;
-out passwork.crt 是我們證書的名稱和文件擴展名;
-req -signkey passwork.key——在這裡,我們指定要用於簽署證書的密鑰對;
-days 30——這是我們證書的過期時間間隔。
passwork.crt 證書文件現在已生成,準備就緒!非常簡單,對吧?事實上,當我們記住可以通過輸入以下內容生成一個自簽名證書時,它變得更簡單:
openssl req \
-newkey rsa:2048 -nodes -keyout passwork.key \
x509 -days 365 -out domain.crt在這裡,生成了一個臨時 CSR,因此我們不必手動輸入所有數據。
請記住,在現實生活中,創建私鑰時應遵循最佳實踐,因為它們可以輕易生成,因此可能會受到威脅。
OpenSSL 的功能我們僅僅觸及,但正如您所見,它並不像許多人最初想的那樣複雜——這就是為什麼它受到廣泛喜愛的原因。如果仍有未解答的問題,請隨時查看 OpenSSL 項目網站上的常見問題頁面。如果這還不夠,您真的想深入了解,我們強烈推薦這本免費電子書。
日本電話卡推介 / 韓國電話卡推介
一㩒即做:香港網速測試 SpeedTest HK




