linux (ubuntu) 製作憑證範例

轉自 http://skywind.homelinux.com/~wind/bLog/b2evolution/blogs/index.php?blog=5&m=200604

製作憑證,只要是個人使用,一般都要製作三種。一是CA根憑證,二是伺服器憑證,三是個人用憑證。上網找資料,幾乎都只介紹前面兩者。後面製造個人用憑證幾乎都被省略。蠻可惜

=======================================================================

製作最高層認證中心 (Root CA)

若妳之前做過最高層認證中心,不要重做,不然原來簽發的憑證,都會失效,都要重簽。除非最高層認證中心自己過期、檔案遺失、 Private Key 外洩,否則絕對不要重做最高層認證中心。

假設妳要做的最高層認證中心叫做 myrootca 。

1. 製作 Private Key (及 Public Key )

這裏我們做一支新的 Private Key 。 Public Key 可由 Private Key 推得,所以不用特別去做。

請為最高層認證中心的 Private Key 設定一個適當的密碼。

# 製作 RSA[14] Private Key
openssl genrsa -des3 -out ~/etc/ssl/private/myrootca.key.pem 2048
chmod og-rwx ~/etc/ssl/private/myrootca.key.pem

2. 填寫憑證申請書

憑證申請書,是把妳的資料,和這個 Public Key 夾在一起,以便認證中心審核,簽上簽名用的。所以這個步驟,會問妳這個 Key 的相關資料,包括國家、城市、單位名稱、部門名稱、憑證名稱、聯絡人的信箱,以及申請的效期等等。請一一填寫。詳情請參考什麼是憑證?。

若不知如何填寫,請參閱如何填寫憑證申請書。

若妳要直接用最高層認證中心來直接當憑證用,憑證名稱 (Common Name) 請用伺服器的全名 (www.abc.com) 。詳情請參考其她 SSL/X.509 憑證的做法。

# 填寫憑證申請書
openssl req -new -key ~/etc/ssl/private/myrootca.key.pem -out ~/tmp/myrootca.req.pem

3. 簽發憑證

最高層認證中心因為沒有上級了,沒有人能給它簽名,只能自己給自己簽名。詳情請參考什麼是最高層認證中心?。

最高層認證中心最好永遠不要過期。要是過期重簽,所有原來它簽發的憑證也都要重簽,所有 SSL 程式也都要重新設定。所以我們效期簽 7305 天(大約 20年)。若不設效期的話,預設是 30 天(一個月)。

簽完憑證,憑證申請書就不用了,可以刪掉。

# 自己給自己簽名
openssl x509 -req -days 7305 -sha1 \
-extfile ~/etc/ssl/openssl.cnf -extensions v3_ca \
-signkey ~/etc/ssl/private/myrootca.key.pem \
-in ~/tmp/myrootca.req.pem -out ~/etc/ssl/certs/myrootca.crt.pem

# 刪除憑證申請書
rm -f ~/tmp/myrootca.req.pem

# 建立 hash 索引
c_rehash ~/etc/ssl/certs

這樣就好了。 Private Key 在
~/etc/ssl/private/myrootca.key.pem ,自己簽名的 Public Key 憑證在 ~/etc/ssl/certs/myrootca.crt.pem 。 myrootca.key.pem 是 Private Key ,要小心存好保護,只有自己才能讀,權限建議 0400 。 myrootca.crt.pem 是 Public Key 憑證,要儘量散出去,讓大家用。最好放到網站上,讓大家自己下載,自己加進去。

製作伺服器用的憑證

假設妳要做 myhost 的憑證:

1. 製作 Private Key (及 Public Key )

這裏我們做一支新的 Private Key 。 Public Key 可由 Private Key 推得
,所以不用特別去做。

注意:伺服器的 Private Key 不要設密碼,不然 SSL 伺服器程式啟動的時候,一去讀憑證和 Private Key ,就要問一次密碼。每次重開機,依序啟動每個伺服器程式的時候,一碰到要讀 Private Key 的伺服器程式,都會停下來等鍵盤輸入密碼。要是放假沒人,或伺服器放在 IDC 機房,從遠端重開機或 Crash 後自行重開機,卻當在那裏等鍵盤敲密碼,開不了機,那就不好玩了。

# 製作 RSA Private Key
openssl genrsa -out ~/etc/ssl/private/myhost.key.pem 2048
chmod og-rwx ~/etc/ssl/private/myhost.key.pem

2. 填寫憑證申請書

憑證申請書,是把妳的資料,和這個 Public Key 夾在一起,以便認證中心審核,簽上簽名用的。所以這個步驟,會問妳這個 Key 的相關資料,包括國家、城市、單位名稱、部門名稱、憑證名稱、聯絡人的信箱,以及申請的效期等等。這裏憑證名稱 (Common Name) 要用伺服器的全名 (www.abc.com) ,其她請一一填寫。詳情請參考什麼是憑證?。

若不知如何填寫,請參閱如何填寫憑證申請書。

# 填寫憑證申請書
openssl req -new -key ~/etc/ssl/private/myhost.key.pem -out /tmp/myhost.req.pem

3. 用最高層認證中心簽發憑證[8][15]

伺服器憑證的效期其實無所謂,過期重簽一張就好了。 SSL 程式認的是認證中心,不是憑證,所以憑證簽了就會生效,不用去設定 SSL 程式。不過為免重簽的麻煩,我們效期還是簽 3650 天(大約十年)。

簽完憑證,憑證申請書就不用了,可以刪掉。

# 簽發憑證
openssl x509 -req -days 3650 -sha1 \
-extfile ~/etc/ssl/openssl.cnf -extensions v3_req \
-CA ~/etc/ssl/certs/myrootca.crt.pem -CAkey ~/etc/ssl/private/myrootca.key.pem \
-CAserial ~/etc/ssl/myrootca.srl -CAcreateserial \
-in /tmp/myhost.req.pem -out ~/etc/ssl/certs/myhost.crt.pem

# 刪除憑證申請書
rm -f /tmp/myhost.req.pem

這樣就好了。[16] Private Key 在 ~/etc/ssl/private/myhost.key.pem ,要小心存好保護,只有自己才能讀,建議權限為 0400 ; Public Key 憑證在 ~/etc/ssl/certs/myhost.crt.pem ,要儘量散出去,讓大家用。這組 Public/Private Key 憑證可以做為 myhost 的 SSL 憑證,用在 HTTPS 、 POP3S/TLS 、 SMTPS/TLS …等等各種 SSL 連線上。最好不要把檔案搬到別的地方。妳可以在設定檔裏,把憑證位置設定到這裏。 PrivateKey 不要到處放,以免不小心忘記保護。

=======================================================================

製作個人(wind)憑證:script檔案是以x.509製作之【一般使用者】來當主要參考,所以所有位置都會放在該"$user/etc" 目錄下。

#產生個人用private key
openssl genrsa -out ~/etc/ssl/private/wind.key.pem 2048

#用這把private key 填寫憑證申請書:
openssl req -new -key ~/etc/ssl/private/wind.key.pem -out ~/tmp/wind.req.pem

#產生序號檔(只需要做一次),以後就會自動累加序號
echo 01 > ~/etc/ssl/myrootca.srl

#利用Root CA 簽署此憑證有效期限10年 ^_^
openssl x509 -req -days 3650 -sha1 \
-extfile ~/etc/ssl/openssl.cnf \
-extensions v3_req -CA ~/etc/ssl/certs/myrootca.crt.pem \
-CAkey ~/etc/ssl/private/myrootca.key.pem \
-in ~/tmp/wind.req.pem \
-out ~/etc/ssl/certs/wind.crt.pem

#最後把要交給 wind(個人用) 的私鑰和憑證匯出成 PKCS#12 格式(Windows才看得懂)
openssl pkcs12 -export -in ~/etc/ssl/certs/wind.crt.pem -inkey ~/etc/ssl/private/wind.key.pem -out ~/etc/ssl/certs/wind.p12 -name “wind"

#在最後一步中,還會被詢問「匯出密碼 (Export Password) 」,
#這個密碼可以隨意決定,當用戶要匯入檔案時就會被問到。最後
#祇消把這個密碼跟這個被製作出來的 PKCS#12 格式的檔案,一
#併交給用戶 (wind) ,讓他匯入到瀏覽器的個人憑證區即可。

補充:应用 openssl 工具进行 SSL 故障分析
http://www.ibm.com/developerworks/cn/linux/l-cn-sclient/

廣告
發表留言

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s

%d 位部落客按了讚: