0%

[SSL] 自簽憑證過程

前言

SSL 是讓 Web 應用程式能擁有機密傳輸特性的一個機制,運作在應用層上。然而要申請一個有效的憑證,過程是非常耗時的,因此若在開發、測試階段,可先用自簽憑證來應急。但是!要上線的系統最好等有了合法憑證再發布,避免遭受中間人攻擊 (Man in The Middle, MITM)。

產生 CA SSL

⾸先為我們的 CA (Certificate Authority) 產⽣⼀把私鑰,這個步驟可以說是為自己建立一個 CA,這個 CA 完全由自己掌控

1
openssl genrsa -out root/ca.key 4096

再使⽤這把私鑰產⽣⼀份⾃我簽署的 CA 憑證,其中 subj 可依自己需求做更改

1
2
3
4
openssl req -new -x509 -days 365 -sha256 \ 
-subj "/C=TW/ST=Taipei/O=your_company/OU=your_department/CN=localhost" \
-key root/ca.key \
-out root/ca.crt

產生 Server SSL

為我們的 Server 產⽣不加密之 PEM 格式的私密⾦鑰

1
openssl genrsa -out server/server.key 2048

產⽣憑證請求檔 CSR (Certificate Signing Request),其中 subj 可依自己需求做更改

1
2
3
openssl req -new -key server/server.key \ 
-subj "/C=TW/ST=Taipei/O=your_company/OU=your_department/CN=your_service_FQDN" \
-out server/server.csr
  • CN 會填上 Server 的 FQDN,要注意的是 CN 不可與 CA 的 CN 相同

把 CSR 丟給自己的 CA 簽署,也可以換句話說:讓自己的 CA 簽署該憑證

1
2
3
4
openssl x509 -req -CAcreateserial -days 30 -sha256 \ 
-CA root/ca.crt -CAkey root/ca.key \
-in server/server.csr \
-out server/server.crt

現在⽬錄應該有以下這些文件,server.key 是 Server 的私鑰,server.crt 是 Server 的憑證,也因為是用我們自創的 CA 來簽核的一個憑證,又稱為自簽憑證

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$ ls -alR . 

./root:
total 20
drwxrwxr-x 2 user user 4096 Oct 21 02:05 .
drwxrwxr-x 4 user user 4096 Oct 7 22:40 ..
-rw-rw-r-- 1 user user 1968 Oct 21 02:05 ca.crt
-rw------- 1 user user 3243 Oct 21 02:05 ca.key
-rw-rw-r-- 1 user user 41 Oct 21 02:05 ca.srl

./server:
total 20
drwxrwxr-x 2 user user 4096 Oct 21 02:05 .
drwxrwxr-x 4 user user 4096 Oct 7 22:40 ..
-rw-rw-r-- 1 user user 1501 Oct 21 02:05 server.crt
-rw-rw-r-- 1 user user 972 Oct 21 02:05 server.csr
-rw------- 1 user user 1679 Oct 21 02:05 server.key
  1. 若讀者想知道如何確認 CA 簽回的憑證是否與手上私鑰是一對的,可以參考 [SSL] 確認申請回來的憑證與手中的私鑰匹配
  2. 若讀者想更進一步知道 SSL 簽名與驗證過程,也可以參考 [SSL] 數位簽名與驗證的過程
很高興能在這裡幫助到您,歡迎登入 Liker 為我鼓掌 5 次,或者成為我的讚賞公民,鼓勵我繼續創造優質文章。
以最優質的內容回應您的鼓勵