P. 1
如何製作 SSL X.509 憑證

如何製作 SSL X.509 憑證

5.0

|Views: 315|Likes:
出版社:twn353091
如何製作 SSL X.509 憑證
如何製作 SSL X.509 憑證

More info:

Published by: twn353091 on Nov 30, 2008
著作権:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

05/09/2014

pdf

text

original

如何製作 SSL X.

509 憑證?
目錄
1. 前言
2. 若妳是 root
1. 設定 OpenSSL 的環境
2. 製作最高層認證中心 (Root CA)
1. 製作 Public/Private Key
2. 填寫憑證申請書
3. 簽發憑證
3. 製作伺服器用的憑證
1. 製作 Public/Private Key
2. 填寫憑證申請書
3. 簽發憑證
3. 若妳是一般使用者
1. 設定 OpenSSL 的環境
2. 製作最高層認證中心 (Root CA)
1. 製作 Public/Private Key
2. 填寫憑證申請書
3. 簽發憑證
3. 製作伺服器用的憑證
1. 製作 Public/Private Key
2. 填寫憑證申請書
3. 簽發憑證
4. 設定伺服器
1. HTTP
1. Apache
2. POP3
1. Qpopper
3. SMTP
1. Sendmail
5. 設定作業系統
1. MS-WINDOWS
6. 設定瀏覽器
1. Mozilla 與 Netscape 6 以後的版本
2. Internet Explorer
3. Opera
4. Lynx
7. 設定電子郵件程式
1. Mozilla 與 Netscape 6 以後的版本
2. Netscape 4 及更早的版本
3. Outlook Express 6
4. Outlook Express 5.5
5. Outlook Express 4/5
6. Eudora 5.1 以後的版本
7. Becky!
8. Opera 郵件
8. 設定其她不支援 SSL/TLS 的程式
1. Stunnel
9. 觀念討論
第 1 頁,共 32 頁 SSL X.509 憑證教學
2008/11/30 http://www.study-area.org/tips/certs/certs.html
1. SSL/X.509 簡介
2. 憑證無效的警告
3. 資料?什麼資料?
4. 所以 SSL 就安全了囉?
5. 什麼是數位簽名?
6. 什麼是憑證?
7. 什麼是認證中心?
8. 什麼是最高層認證中心?
9. 如何填寫憑證申請書
10. X.509 憑證制度的檢討
11. 其她 SSL/X.509 憑證的做法
10. 註釋
11. 參考資料
12. 後記
前言
版權所有 © 2002 依瑪貓。依瑪貓保有所有權利。如欲轉載、引用本文,請先詳閱旅
舍依瑪版權聲明。
本文的目的為:在 Linux/*BSD/UNIX 下,用 OpenSSL ,以自己名字發行 X.509 SSL 憑
證 (Certificate) 。我們會製作兩個憑證:第一步先做以自己為名 (XXX Association, YYY
Corporation) ,自己簽名背書的最高層認證中心 (Root CA) ,第二步再做以伺服器為名
(www.abccompany.com) ,用第一步做的最高層認證中心 (XXX Association, YYY Corporation)
簽發的憑證 (Certificate) 。為簡化起見,我們不做中間的憑證單位,直接由最高層認證中心
(Root CA) ,來簽發憑證。
本文只討論 SSL X.509 憑證做法,不討論系統安全問題,不討論加解密的演算法,也
不討論 OpenSSL 的如何安裝。我假設妳瞭解基本 Public Key/Private Key 不對稱加解密的觀
念,知道什麼是 RSA/DSA 演算法。我也假設妳已經裝好了 OpenSSL ,安裝時使用下列符
合 FHS
[1]
標準的設定:

./config --prefix=/usr --openssldir=/usr/share/ssl
或安裝 RPM 或 apt 的 openssl 套件。
本文是做法教學 (HOWTO) ,所以在編排上,把做法步驟 (how) 放在最前面,觀念說
明和討論 (what and why) 等,都放在文末。若妳看不懂做法,或想先學一些基本概念,請
先往後翻閱,不需由前到後閱讀。
請注意:依本文製作的憑證,還是會在瀏覽器等 SSL 程式上出現憑證無效的警告。詳
情請參考「SSL/X.509 簡介」與「憑證無效的警告」。
按 X.509 的規定,憑證可以用 RSA Key ,也可以用 DSA Key 。不過在 SSL 通訊中,
伺服器的憑證因為要用來傳 Key ,而只有 RSA 可以傳 Key ,所以只能用 RSA 。至於認證
中心,只是簽名查核用,不用傳 Key , DSA 或 RSA 都可以,但因為還有一些 SSL 程式不
認得 DSA
[2]
,為相容性起見,這裏我們也做成 RSA 。

要製作最高層認證中心,可以以一般使用者權限來做,不一定要是 root 。但如果做出
來的最高層認證中心,是整個組織簽發憑證要用的,建議以 root 的權限來做,比較安全。
同理,製作憑證,也可以以一般使用者權限來做。但如果做出來的憑證,是這個伺服器要
用的,為安全起見,建議以 root 的權限來做。
第 2 頁,共 32 頁 SSL X.509 憑證教學
2008/11/30 http://www.study-area.org/tips/certs/certs.html
若妳是 root ,要安裝給整個組織來用:
設定 OpenSSL 的環境
若妳是用上述方法安裝:
./config --prefix=/usr --openssldir=/usr/share/ssl
或裝 Red Hat 的 RPM , OpenSSL 的設定檔目錄會在 /usr/share/ssl 。若妳是安裝
Mandrake 的 RPM ,設定檔目錄會在 /usr/lib/ssl 。這兩個位置都不符合 FHS 的要求,資
料備份起來也不方便。設定檔應該放在 /etc/ssl 下。若妳是安裝 Debian 的 apt ,設定檔目
錄會在 /etc/ssl 下,不會有問題。
# 設定相關的目錄
mkdir -p /etc/ssl
mkdir -p /etc/ssl/private
chmod og-rwx /etc/ssl/private
mkdir -p /etc/ssl/certs
mkdir -p /etc/ssl/crl
mkdir -p /etc/ssl/newcerts

# 設定 OpenSSL 設定檔[3]
mv /usr/share/ssl/openssl.cnf /etc/ssl
ln -s /etc/ssl/openssl.cnf /usr/share/ssl/openssl.cnf

# 設定 OpenSSL 設定檔的位置[4]
export OPENSSL_CONF="/etc/ssl/openssl.cnf"

# 把 OpenSSL 設定檔的位置加進 .bashrc 中[5]
echo "# OpenSSL 設定檔的位置" >> ~/.bashrc
echo "export OPENSSL_CONF=\"/etc/ssl/openssl.cnf\"" >> ~/.bashrc

# 製作亂數檔[6]
openssl rand -out /etc/ssl/private/.rand 1024
chmod og-rwx /etc/ssl/private/.rand
然後修改 /etc/ssl/openssl.cnf ,把這一行
dir = ./demoCA # Where everything is kept
改成這樣
dir = /etc/ssl # Where everything is kept
製作最高層認證中心 (Root CA)
若妳之前做過最高層認證中心,不要重做,不然原來簽發的憑證,都會失效,都要重
簽。除非最高層認證中心自己過期、檔案遺失、 Private Key 外洩,否則絕對不要重做最高
層認證中心。
假設妳要做的最高層認證中心叫做 myrootca 。
1. 製作 Private Key (及 Public Key )
這裏我們做一支新的 Private Key 。 Public Key 可由 Private Key 推得,所以不用特別去
做。
第 3 頁,共 32 頁 SSL X.509 憑證教學
2008/11/30 http://www.study-area.org/tips/certs/certs.html
請為最高層認證中心的 Private Key 設定一個適當的密碼。
# 製作 RSA[7] Private Key
openssl genrsa -des3 -out /etc/ssl/private/myrootca.key 2048
chmod og-rwx /etc/ssl/private/myrootca.key
2. 填寫憑證申請書
憑證申請書,是把妳的資料,和這個 Public Key 夾在一起,以便認證中心審核,簽上
簽名用的。所以這個步驟,會問妳這個 Key 的相關資料,包括國家、城市、單位名稱、部
門名稱、憑證名稱、聯絡人的信箱,以及申請的效期等等。請一一填寫。詳情請參考「什
麼是憑證?」。
若妳要直接用最高層認證中心來直接當憑證用,憑證名稱 (Common Name) 請用伺服器
的全名 (www.abc.com) 。詳情請參考「其她 SSL/X.509 憑證的做法」。
若不知如何填寫,請參閱「如何填寫憑證申請書」。
# 填寫憑證申請書
openssl req -new -key /etc/ssl/private/myrootca.key -out /tmp/myrootca.req
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 \
-in /tmp/myrootca.req -out /etc/ssl/certs/myrootca.crt

# 刪除憑證申請書
rm -f /tmp/myrootca.req
這樣就好了。 Private Key 在 /etc/ssl/private/myrootca.key ,自己簽名的 Public Key 憑
證在 /etc/ssl/certs/myrootca.crt 。 myrootca.key 是 Private Key ,要小心存好保護,只有 root
才能讀,權限建議 0444 。 myrootca.crt 是 Public Key 憑證,要儘量散出去,讓大家用。最
好放到內部網路上,或放到網站上,讓大家自己下載,自己加進去。
製作伺服器用的憑證
假設妳要做 myhost 的憑證:
1. 製作 Private Key (及 Public Key )
這裏我們做一支新的 Private Key 。 Public Key 可由 Private Key 推得,所以不用特別去
做。
第 4 頁,共 32 頁 SSL X.509 憑證教學
2008/11/30 http://www.study-area.org/tips/certs/certs.html
請先登入到要用憑證的那臺伺服器上。
注意:伺服器的 Private Key 不要設密碼,不然 SSL 伺服器程式啟動的時候,一去讀憑
證和 Private Key ,就要問一次密碼。每次重開機,依序啟動每個伺服器程式的時候,一碰
到要讀 Private Key 的伺服器程式,都會停下來等鍵盤輸入密碼。要是放假沒人,或伺服器
放在 IDC 機房,從遠端重開機或 Crash 後自行重開機,卻當在那裏等鍵盤敲密碼,開不了
機,那就不好玩了。
# 製作 RSA Private Key
openssl genrsa -out /etc/ssl/private/myhost.key 2048
chmod og-rwx /etc/ssl/private/myhost.key
2. 填寫憑證申請書
憑證申請書,是把妳的資料,和這個 Public Key 夾在一起,以便認證中心審核,簽上
簽名用的。所以這個步驟,會問妳這個 Key 的相關資料,包括國家、城市、單位名稱、部
門名稱、憑證名稱、聯絡人的信箱,以及申請的效期等等。這裏憑證名稱 (Common Name)
要用伺服器的全名 (www.abc.com) ,其她請一一填寫。詳情請參考「什麼是憑證?」。
若不知如何填寫,請參閱「如何填寫憑證申請書」。
# 填寫憑證申請書
openssl req -new -key /etc/ssl/private/myhost.key -out /tmp/myhost.req
3. 用最高層認證中心簽發憑證
[8]

伺服器憑證的效期其實無所謂,過期重簽一張就好了。 SSL 程式認的是認證中心,不
是憑證,所以憑證簽了就會生效,不用去設定 SSL 程式。不過為免重簽的麻煩,我們效期
還是簽 3650 天(大約十年)。
簽完憑證,憑證申請書就不用了,可以刪掉。
# 簽發憑證
openssl x509 -req -days 3650 -sha1 \
-extfile /etc/ssl/openssl.cnf -extensions v3_req \
-CA /etc/ssl/certs/myrootca.crt -CAkey /etc/ssl/private/myrootca.key \
-CAserial /etc/ssl/myrootca.srl -CAcreateserial \
-in /tmp/myhost.req -out /etc/ssl/certs/myhost.crt

# 刪除憑證申請書
rm -f /tmp/myhost.req
這樣就好了。
[9]
Private Key 在 /etc/ssl/private/myhost.key ,要小心存好保護,只有
root 才能讀,建議權限為 0400 ; Public Key 憑證在 /etc/ssl/certs/myhost.crt ,要儘量散出
去,讓大家用。這組 Public/Private Key 憑證可以做為 myhost 的 SSL 憑證,用在 HTTPS 或
POP3S/TLS/SSL 上。最好不要把檔案搬到別的地方。妳可以在設定檔裏,把憑證位置設定
到這裏。 Private Key 不要到處放,以免不小心忘記保護。
若妳是一般使用者:
設定 OpenSSL 的環境
# 設定相關的目錄
mkdir -p ~/etc
第 5 頁,共 32 頁 SSL X.509 憑證教學
2008/11/30 http://www.study-area.org/tips/certs/certs.html
mkdir -p ~/etc/ssl
mkdir -p ~/etc/ssl/private
chmod og-rwx ~/etc/ssl/private
mkdir -p ~/etc/ssl/certs
mkdir -p ~/etc/ssl/crl
mkdir -p ~/etc/ssl/newcerts
mkdir -p ~/tmp

# 設定 OpenSSL 設定檔[10]
cp /usr/share/ssl/openssl.cnf ~/etc/ssl

# 設定 OpenSSL 設定檔的位置[11]
export OPENSSL_CONF="$HOME/etc/ssl/openssl.cnf"

# 把 OpenSSL 設定檔的位置加進 .bashrc 中[12]
echo "# OpenSSL 設定檔的位置" >> ~/.bashrc
echo "export OPENSSL_CONF=\"$HOME/etc/ssl/openssl.cnf\"" >> ~/.bashrc

# 製作亂數檔[13]
openssl rand -out ~/etc/ssl/private/.rand 1024
chmod og-rwx ~/etc/ssl/private/.rand
然後修改 ~/etc/ssl/openssl.cnf ,把這一行
dir = ./demoCA # Where everything is kept
改成這樣
dir = ~/etc/ssl # Where everything is kept
製作最高層認證中心 (Root CA)
若妳之前做過最高層認證中心,不要重做,不然原來簽發的憑證,都會失效,都要重
簽。除非最高層認證中心自己過期、檔案遺失、 Private Key 外洩,否則絕對不要重做最高
層認證中心。
假設妳要做的最高層認證中心叫做 myrootca 。
1. 製作 Private Key (及 Public Key )
這裏我們做一支新的 Private Key 。 Public Key 可由 Private Key 推得,所以不用特別去
做。
請為最高層認證中心的 Private Key 設定一個適當的密碼。
注意:伺服器的 Private Key 不要設密碼,不然 SSL 伺服器程式啟動的時候,一去讀憑
證和 Private Key ,就要問一次密碼。每次重開機,依序啟動每個伺服器程式的時候,一碰
到要讀 Private Key 的伺服器程式,都會停下來等鍵盤輸入密碼。要是放假沒人,或伺服器
放在 IDC 機房,從遠端重開機或 Crash 後自行重開機,卻當在那裏等鍵盤敲密碼,開不了
機,那就不好玩了。
# 製作 RSA[14] Private Key
openssl genrsa -des3 -out ~/etc/ssl/private/myrootca.key 2048
chmod og-rwx ~/etc/ssl/private/myrootca.key
2. 填寫憑證申請書
第 6 頁,共 32 頁 SSL X.509 憑證教學
2008/11/30 http://www.study-area.org/tips/certs/certs.html
憑證申請書,是把妳的資料,和這個 Public Key 夾在一起,以便認證中心審核,簽上
簽名用的。所以這個步驟,會問妳這個 Key 的相關資料,包括國家、城市、單位名稱、部
門名稱、憑證名稱、聯絡人的信箱,以及申請的效期等等。請一一填寫。詳情請參考「什
麼是憑證?」。
若不知如何填寫,請參閱「如何填寫憑證申請書」。
若妳要直接用最高層認證中心來直接當憑證用,憑證名稱 (Common Name) 請用伺服器
的全名 (www.abc.com) 。詳情請參考「其她 SSL/X.509 憑證的做法」。
# 填寫憑證申請書
openssl req -new -key ~/etc/ssl/private/myrootca.key -out ~/tmp/myrootca.req
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 \
-in ~/tmp/myrootca.req -out ~/etc/ssl/certs/myrootca.crt

# 刪除憑證申請書
rm -f ~/tmp/myrootca.req
這樣就好了。 Private Key 在 ~/etc/ssl/private/myrootca.key ,自己簽名的 Public Key 憑
證在 ~/etc/ssl/certs/myrootca.crt 。 myrootca.key 是 Private Key ,要小心存好保護,只有自
己才能讀,權限建議 0400 。 myrootca.crt 是 Public Key 憑證,要儘量散出去,讓大家用。
最好放到網站上,讓大家自己下載,自己加進去。
製作伺服器用的憑證
假設妳要做 myhost 的憑證:
1. 製作 Private Key (及 Public Key )
這裏我們做一支新的 Private Key 。 Public Key 可由 Private Key 推得,所以不用特別去
做。
# 製作 RSA Private Key
openssl genrsa -out ~/etc/ssl/private/myhost.key 2048
chmod og-rwx ~/etc/ssl/private/myhost.key
2. 填寫憑證申請書
憑證申請書,是把妳的資料,和這個 Public Key 夾在一起,以便認證中心審核,簽上
簽名用的。所以這個步驟,會問妳這個 Key 的相關資料,包括國家、城市、單位名稱、部
第 7 頁,共 32 頁 SSL X.509 憑證教學
2008/11/30 http://www.study-area.org/tips/certs/certs.html
門名稱、憑證名稱、聯絡人的信箱,以及申請的效期等等。這裏憑證名稱 (Common
Name) 要用伺服器的全名 (www.abc.com) ,其她請一一填寫。詳情請參考「什麼是憑
證?」。
若不知如何填寫,請參閱「如何填寫憑證申請書」。
# 填寫憑證申請書
openssl req -new -key ~/etc/ssl/private/myhost.key -out /tmp/myhost.req
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 -CAkey ~/etc/ssl/private/myrootca.key \
-CAserial ~/etc/ssl/myrootca.srl -CAcreateserial \
-in /tmp/myhost.req -out ~/etc/ssl/certs/myhost.crt

# 刪除憑證申請書
rm -f /tmp/myhost.req
這樣就好了。
[16]
Private Key 在 ~/etc/ssl/private/myhost.key ,要小心存好保護,只有
自己才能讀,建議權限為 0400 ; Public Key 憑證在 ~/etc/ssl/certs/myhost.crt ,要儘量散
出去,讓大家用。這組 Public/Private Key 憑證可以做為 myhost 的 SSL 憑證,用在 HTTPS
或 POP3S/TLS/SSL 上。
設定伺服器
常見的 SSL 通訊方式有兩種:一種是傳統的 SSL ,一種是新的 TLS 。
傳統的 SSL ,一連上伺服器,就進入 SSL ,全程加密。這樣做有一個缺點:為了不
讓使用者程式混淆,要把 SSL 開在另外一個 TCP 埠,還要設定使用者的程式,改連到
SSL 的那個 TCP 埠去。 HTTP 和 HTTPS 的方式就是這樣。
新的 TLS ,則是在使用者程式連上伺服器後,下 STARTTLS 指令,如果伺服器有 SSL ,
就會進入 SSL ,雙方開始加密;如果伺服器沒有 SSL ,看不懂 STARTTLS ,雙方就按原來的
方式繼續連線。這樣做的好處是,使用者程式不用改設連接埠,可以自行切入 SSL 或退回
不加密連線,相容性高,也不用為了 SSL ,多開一個 TCP 埠。但 TLS 的缺點則是,就算
憑證查核的結果有問題,不能做 SSL ,還是可以退回原來的方式繼續連線,那憑證查核的
工作,有做等於沒做。只有連線加密的的優點而已,無法查證伺服器的身份。
以下依不同的通訊協定,分別討論。
HTTP
HTTP 是最早用 SSL 的通訊協定。 Netscape 當初是為了加密 HTTP ,做安全網路交
易,才設計了 SSL ,開一個新的 TCP 埠 443 給它專用,取名為 HTTPS ,延用至今。因
第 8 頁,共 32 頁 SSL X.509 憑證教學
2008/11/30 http://www.study-area.org/tips/certs/certs.html
此, HTTP 的 SSL 用的是傳統的方式,沒有 TLS ,要開 HTTPS(443) 。
Apache
Apache 要做 HTTPS ,可以搭配 Apache-SSL ,或搭配 mod_ssl 。請參考各自的設定說
明。
要注意的是,一個 Apache 只能記一組憑證,而憑證上有伺服器的全名,瀏覽器會用
來核對網站站名,所以一個 Apache ,也只能架一個 SSL 站,用一個站名。除非妳跑很多
份 Apache ,各自跑在不同的 IP 或不同的 TCP 埠上,才能在同一臺伺服器上,跑好幾個
SSL 站。
以 mod_ssl 來說,安裝好後, httpd.conf 設定舉例如下:
......
## mod_ssl.c: mod_ssl 基本設定
<IfModule mod_ssl.c>
Listen 443
AddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl .crl
SSLSessionCache dbm:/var/log/apache/ssl_scache
SSLSessionCacheTimeout 300
SSLPassPhraseDialog builtin
SSLMutex file:/var/log/apache/ssl_mutex
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
SSLLog /var/log/apache/ssl_engine_log
SSLLogLevel info
SSLCipherSuite ALL:!ADH:!EXP56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile /etc/ssl/certs/myhost.crt
SSLCertificateKeyFile /etc/ssl/private/myhost.key
<VirtualHost *:443>
SSLEngine on
</VirtualHost>
</IfModule>
......
設好後,檢查看 httpd.conf 有沒有設錯:
httpd -t
要是沒有問題,重開 httpd , SSL 網站就開跑了。
POP3
POP3 可以跑兩種方式:傳統用 POP3S(995) 埠專跑 SSL ,或是用 TLS ,在原來的
POP3(110) 埠上,加上 STARTTLS 的功能。
POP3 的 TLS 指令是 STLS 。
Qpopper
要安裝 Qpopper ,請參考 Qpopper 的說明文件。
Qpopper 可以做 POP3S(995) ,也可以在 POP3(110) 上做 TLS 。然而,一個 Qpopper 只
能開一個 TCP 埠,用一種方式跑。如果要同時做 POP3S(995) 和 POP3(110)/TLS ,要跑兩份
第 9 頁,共 32 頁 SSL X.509 憑證教學
2008/11/30 http://www.study-area.org/tips/certs/certs.html
Qpopper,各自用不同的設定檔。
設定 /etc/qpopper.conf 如下:
# qpopper.conf: Qpopper POP3(110)/TLS 的設定檔
set clear-text-password = always
set statistics = true
set tls-support = stls
set tls-private-key-file = /etc/ssl/private/myhost.key
set tls-server-cert-file = /etc/ssl/certs/myhost.crt
設定 /etc/qpopper-s.conf 如下:
# qpopper-s.conf: Qpopper POP3S(995) 的設定檔
set clear-text-password = tls
set statistics = true
set tls-support = alternate-port
set tls-private-key-file = /etc/ssl/private/myhost.key
set tls-server-cert-file = /etc/ssl/certs/myhost.crt
然後用 root 的權限,分別執行:
popper -f /etc/qpopper.conf
popper 995 -f /etc/qpopper-s.conf
這樣就可以了。查看:
ps ax | grep popper
妳會看到有兩個 popper ,用不同的參數在跑。查看:
netstat -ap | grep popper
妳會看到兩個 popper ,分別在 POP3(110) 和 POP3S(995) 兩個 TCP 埠上。
SMTP
SMTP 也可以跑兩種方式:舊式的做法,是另開一個 SMTPS(465) 埠,來專跑 SSL 。
新的做法則用 TLS ,在原來的 SMTP(25) 埠上,加上 STARTTLS 的功能。 TLS 用同一個連接
埠,相容性比較高,為郵件伺服器間收發信的相容性起見,請儘量採用 TLS 。
[17]

SMTP 的 TLS 指令是 STARTTLS 。
Sendmail
Sendmail 可以在編譯時,加入 SMTPS 和 TLS 的支援,不過 SMTPS 是屬於 FFR (for
future release) 尚未正式發表的功能,在所有 Sendmail 的說明文件中,都找不到 SMTPS 的
說明,只有 TLS 的說明。
Sendmail 送信時,只會在原來的 SMTP(25) 埠上,試 STARTTLS 指令。對方要是不支援
TLS 就算了,用原來不加密的方法寄信,不會去試對方的 SMTPS(465) 埠。
為讓郵件順利流通,不要掉信, Sendmail 送信時,能加密就加密,不會查核對方的憑
證。更何況,在 TLS 下,查核對方的憑證,也沒什麼意義。
第 10 頁,共 32 頁 SSL X.509 憑證教學
2008/11/30 http://www.study-area.org/tips/certs/certs.html
要設定 Sendmail 使用 SSL ,編譯 Sendmail 時,要在 devtools/Site/site.config.m4 檔,
加入下列這幾行:
# STARTTLS - 加入 SSL/TLS 功能
APPENDDEF(`conf_sendmail_ENVDEF', `-DSTARTTLS')
APPENDDEF(`conf_sendmail_LIBS', `-lssl -lcrypto')

# SMTP SSL - 加入 SMTPS 功能
APPENDDEF(`conf_sendmail_ENVDEF', `-D_FFR_SMTP_SSL')
編譯、安裝:
# 編譯 Sendmail
./Build

# 安裝 Sendmail
make install
接下來要設定 Sendmail 的設定檔 /etc/mail/sendmail.cf 。如果妳是用 m4 來做設定檔,
在 m4 檔 config.mc 中加入下列幾行:
dnl Sendmail SMTPS/STARTTLS SSL 設定
define(`confCACERT_PATH', `/etc/ssl/certs')
define(`confCACERT', `/etc/ssl/certs/myrootca.crt')
define(`confSERVER_CERT', `/etc/ssl/certs/myhost.crt')
define(`confSERVER_KEY', `/etc/ssl/private/myhost.key')
define(`confCLIENT_CERT', `/etc/ssl/certs/myhost.crt')
define(`confCLIENT_KEY', `/etc/ssl/private/myhost.key')
DAEMON_OPTIONS(`Name=MTA')dnl
DAEMON_OPTIONS(`Port=465, Name=MTASSL, M=s')dnl
重做設定檔:
m4 m4/cf.m4 config.mc > config.cf
cp -f config.cf /etc/mail/sendmail.cf
然後重開 Sendmail 。這樣 Sendmail 就可以開始做 SMTPS/TLS SSL 了。查看:
netstat -ap | grep sendmail
妳會看到同一個 sendmail ,跑在 SMTP(25) 和 SMTPS(465) 兩個
[18]
TCP 埠上。

不過設定還沒結束。
Sendmail 自 8.12.1 版以後,為加強安全性,將伺服器和使用者程式分開。伺服器程式
因為要跑在低於 1024 的 SMTP(25) 埠,還是要由 root 來啟動,以 root 的權限來執行。使
用者程式則不再 setuid root ,改成 setgid smmsp
[19]
,用 smmsp 群組的權限執行,再用 SMTP
連線到伺服器程式發信。
Sendmail 伺服器程式因為有 root 的權限,要讀 Private Key 不是問題。可是, Sendmail
使用者程式現在沒有了 root 的權限,發信的時候,就讀不到我們伺服器的 Private Key 了。
怎麼辦?
我們不要讓 Sendmail setuid-root ,也不要開放伺服器 Private Key 的權限。我們可以另
外做一組只有 smmsp 群組讀得到的憑證,給 Sendmail 的使用者程式專用:
第 11 頁,共 32 頁 SSL X.509 憑證教學
2008/11/30 http://www.study-area.org/tips/certs/certs.html
# 設定目錄
mkdir -p /etc/mail/private
chgrp smmsp /etc/mail/private
chmod o-rwx /etc/mail/private
mkdir -p /etc/mail/certs

# 製作 RSA Private Key
openssl genrsa -out /etc/mail/private/myhost-msp.key 2048
chgrp smmsp /etc/mail/private/myhost-msp.key
chmod o-rwx /etc/mail/private/myhost-msp.key

# 填寫憑證申請書
openssl req -new -key /etc/mail/private/myhost-msp.key \
-out /tmp/myhost-msp.req

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

# 刪除憑證申請書
rm -f /tmp/myhost-msp.req
然後設定 m4 檔 submic.mc 如下:
......
dnl Sendmail STARTTLS SSL/TLS support
define(`confCACERT_PATH', `/etc/ssl/certs')
define(`confCACERT', `/etc/ssl/certs/myrootca.crt')
define(`confCLIENT_CERT', `/etc/mail/certs/myhost-msp.crt')
define(`confCLIENT_KEY', `/etc/mail/private/myhost-msp.key')
define(`confDONT_BLAME_SENDMAIL', `GroupReadableKeyFile')
......
重做設定檔:
m4 m4/cf.m4 submit.mc > submit.cf
cp -f submit.cf /etc/mail/submit.cf
這樣就可以了。這不是設定 Sendmail 伺服器程式,不用重開 Sendmail 。 ^_*' 妳可以寄
一封信給自己,然後看看系統郵件記錄 maillog ,有沒有成功使用 SSL 。
......
Sep 14 04:19:24 rinse sendmail[12093]: STARTTLS=client, relay=localhost.localdom
ain., version=TLSv1/SSLv3, verify=OK, cipher=EDH-RSA-DES-CBC3-SHA, bits=168/168
......
設定作業系統
有些作業系統,設有系統公用的憑證庫,把認得的憑證、認證中心放在一起。我們把
我們自製的認證中心,加進系統公用的憑證庫,使用這個憑證庫的程式,就可以查得到
了。
MS-WINDOWS
MS-WINDOWS 設有共用的憑證庫。從 [控制台] 進去,裏面有 [網際網路選項] (或
第 12 頁,共 32 頁 SSL X.509 憑證教學
2008/11/30 http://www.study-area.org/tips/certs/certs.html
[Internet 選項] )。在上面點兩下,會打開一個[網際網路 內容] (或 [Internet 內容] )
的視窗。在 [內容] 那一頁裏,中間有一區 [憑證] ,裏面有一個 [憑證(C)...] 的按鈕。按一
下那個按鈕,會打開一個視窗,標題是 [憑證] 。這裏就是 MS-WINDOWS 管理憑證的地
方。
[20]

要加進我們的最高層認證中心,將我們的最高層認證中心 myrootca.crt 複製到
WINDOWS 上。點兩下打開 myrootca.crt ,會跳出一個 [憑證] 的視窗,裏面會列出憑證的
內容。按下面的 [安裝憑證]按鈕,會跑出一個 [憑證管理員匯入精靈] 。一直按 [下一步] ,就會
加進去了。
我所知道,會使用系統憑證庫的 WINDOWS 程式,有 Internet Exporer 、 Outlook
Express 、 Outlook 、 Symantec pcAnywhere 。只要把我們自製的認證中心加進來,這些程式
都可以用得到。
設定瀏覽器
Mozilla 與 Netscape 6 以後的版本
Mozilla 與 Netscape 6 以後的版本,有一個瀏覽器和郵件程式共用的憑證庫。從工具列
上的 [編輯(E)] 、 [個人功能設定(E)] 進去後,會跳出 [功能設定] 的視窗。展開視窗左邊的 [個
人及安全設定] ,點選裏面的 [認證] ,右邊的標題會切換成 [認證] ,中間會有一個 [管理認
證...] 的按鈕。按下按鈕,會再跳出一個 [認證管理員] 的視窗。這裏就是 Mozilla 與
Netscape 管理憑證的地方。
[21][22]

要加進我們的最高層認證中心,將我們的最高層認證中心 myrootca.crt 放到網站上,
用 Mozilla/Netscape 從 web 連到該網址後,會出現一個 [下載認證中] 的視窗。在 [信認此認證
以識別網站] 、 [信認此認證以識別郵件用戶] 、 [信認此認證以識別軟體製造商] 三個選項上都打
勾,然後按 [確定] ,就會加進去了。
如果妳用的是 MS-WINDOWS 下的 Mozilla/Netscape ,妳也可以把最高層認證中心複製
到 WINDOWS 上,網址列直接打上檔案路徑,也可以把它加進去。
在 Mozilla/Netscape 瀏覽器加進來的認證中心,也會用在 Mozilla 信件或 Netscape Mail
& Newsgroups 裏,來查核憑證。
Internet Explorer
Internet Explorer 使用 WINDOWS 系統的憑證庫,妳只要把認證中心加進系統的憑證庫
就可以了。詳情請參考「設定 MS-WINDOWS」。
Opera
Opera 截至目前為止 (6.05) ,只支援 RSA ,不支援 DSA 。因此,只能匯入 RSA 認證
中心,不能匯入 DSA 認證中心。
打開 Opera ,從工具列上的 [檔案(F)] 、 [功能設定(R)...] 進去後,會打開 [功能設定] 的
視窗。在視窗左邊的選單中,選最下面的 [安全性] 時,右上角會出現 [認證機構(A)...] 的按
鈕。按下按鈕,會再打開 [認證機構] 的視窗。按一下右上角的 [匯入(I)...] 按鈕,找到我們
的最高層認證中心,按 [開啟] ,就會加進去了。
Lynx
第 13 頁,共 32 頁 SSL X.509 憑證教學
2008/11/30 http://www.study-area.org/tips/certs/certs.html
Lynx 截至目前為止 (2.8.4) ,不會檢查伺服器的 SSL 憑證。
設定電子郵件程式
Mozilla 與 Netscape 6 以後的版本
要設定使用 SSL 收信,啟動 Mozilla 信件與 News 或 Netscape Mail & Newsgroups 後,由
工具列上的 [編輯(E)] 、 [信件與 News 帳號設定(M)...] 按下去,會打開一個 [信件與 News 帳號
設定] 的視窗。在左邊選擇妳要設定的帳號下的 [伺服器設定] 。視窗右邊的 [伺服器名稱:]
中,要填上 POP3 郵件伺服器的完整名稱。在右下方 [伺服器設定] 裏的 [使用 SSL 安全連線]
選項上打勾,然後按 [確定] 。這樣就會用 SSL 收信了。
要設定使用 SSL 寄信,啟動 Mozilla 信件與 News 或 Netscape Mail & Newsgroups 後,由
工具列上的 [編輯(E)] 、 [信件與 News 帳號設定(M)...] 按下去,會打開一個 [信件與 News 帳號
設定] 的視窗。在左邊選擇 [SMTP 外寄郵件伺服器] ,右邊標題會變成 [SMTP 外送郵件伺服器設
定] 。右邊中間有一個 [使用 SSL 安全連線] ,選 [若可以時] 。然後按 [確定] 。這樣就會用
SSL 寄信了。
憑證查核的部份,Mozilla 信件與 News 或 Netscape Mail & Newsgroups 使用 Mozilla 或
Netscape 6 的憑證庫,妳只要把認證中心加進 Mozilla 或 Netscape 6 就可以了。詳情請參考
Mozilla 與 Netscape 6 的設定。
Netscape 4 及更早的版本
Netscape 4 及更早的版本不支援 SSL 。
Outlook Express 6
要設定使用 SSL 收信,啟動 Outlook Express 後,由工具列上的 [工具(T)] 、 [帳戶
(A)...] 按下去,會打開一個 [網際網路帳戶] 的視窗。在視窗左邊選擇要設定的帳號,然後
按下右邊的 [內容(P)] 按鈕,會打開另一個 [某某某 內容] 的視窗。按一下上方的 [伺服器] ,
翻到 [伺服器] 那一頁。在 [內送郵件 - POP3(I):] 中,要填上 POP3 郵件伺服器的完整名稱。
再按一下上方的[進階] ,翻到 [進階] 那一頁。在 [內送郵件 - POP3(I):] 下面的 [這個伺服器需
要安全連線 - SSL(C)] 的選項上打勾。然後按 [確定] 、 [關閉] 。這樣就會用 SSL 收信了。
要設定使用 SSL 寄信,啟動 Outlook Express 後,由工具列上的 [工具(T)] 、 [帳戶
(A)...] 按下去,會打開一個 [網際網路帳戶] 的視窗。在視窗左邊選擇要設定的帳號,然後
按下右邊的 [內容(P)] 按鈕,會打開另一個 [某某某 內容] 的視窗。按一下上方的 [伺服器] ,
翻到 [伺服器] 那一頁。在 [外寄郵件 - SMTP(U):] 中,要填上 SMTP 郵件伺服器的完整名稱。
再按一下上方的[進階] ,翻到 [進階] 那一頁。在 [外寄郵件 - SMTP(O):] 下面的 [這個伺服器需
要安全連線 - SSL(Q)] 的選項上打勾,並把上面 [外寄郵件 - SMTP(O):] 的連接埠號碼改為 465
。然後按 [確定] 、 [關閉] 。這樣就會用 SSL 寄信了。
憑證查核的部份, Outlook Express 6 使用 WINDOWS 系統的憑證庫,妳只要把認證中
心加進系統的憑證庫就可以了。詳情請參考「設定 MS-WINDOWS」。
Outlook Express 5.5
要設定使用 SSL 收信,啟動 Outlook Express 後,由工具列上的 [工具(T)] 、 [帳號
(A)...] 按下去,會打開一個 [Internet 帳號] 的視窗。在視窗左邊選擇要設定的帳號,然後
按下右邊的 [內容(P)] 按鈕,會打開另一個 [某某某 內容] 的視窗。按一下上方的 [伺服器] ,
翻到 [伺服器] 那一頁。在 [內送郵件 - POP3(I):] 中,要填上 POP3 郵件伺服器的完整名稱。
第 14 頁,共 32 頁 SSL X.509 憑證教學
2008/11/30 http://www.study-area.org/tips/certs/certs.html
再按一下上方的[進階] ,翻到 [進階] 那一頁。在 [內送郵件 - POP3(I):] 下面的 [這個伺服
器需要安全連線 - SSL(C)] 的選項上打勾。然後按 [確定] 、 [關閉] 。這樣就會用 SSL 收信
了。
要設定使用 SSL 寄信,啟動 Outlook Express 後,由工具列上的 [工具(T)] 、 [帳號
(A)...] 按下去,會打開一個 [Internet 帳號] 的視窗。在視窗左邊選擇要設定的帳號,然後
按下右邊的 [內容(P)] 按鈕,會打開另一個 [某某某 內容] 的視窗。按一下上方的 [伺服器] ,
翻到 [伺服器] 那一頁。在 [外寄郵件 - SMTP(U):] 中,要填上 SMTP 郵件伺服器的完整名稱。
再按一下上方的[進階] ,翻到 [進階] 那一頁。在 [外寄郵件 - SMTP(O):] 下面的 [這個伺服器需
要安全連線 - SSL(Q)] 的選項上打勾,並把上面 [外寄郵件 - SMTP(O):] 的連接埠號碼改為 465
。然後按 [確定] 、 [關閉] 。這樣就會用 SSL 寄信了。
憑證查核的部份, Outlook Express 5.5 使用 WINDOWS 系統的憑證庫,妳只要把認證
中心加進系統的憑證庫就可以了。詳情請參考「設定 MS-WINDOWS」。
Outlook Express 4 或 5
要設定使用 SSL 收信,啟動 Outlook Express 後,由工具列上的 [工具(T)] 、 [帳號
(A)...] 按下去,會打開一個 [Internet 帳號] 的視窗。在視窗左邊選擇要設定的帳號,然後
按下右邊的 [內容(P)] 按鈕,會打開另一個 [某某某 內容] 的視窗。按一下上方的 [伺服器] ,
翻到 [伺服器] 那一頁。在 [內送郵件 - POP3(I):] 中,要填上 POP3 郵件伺服器的完整名稱。
再按一下上方的[進階] ,翻到 [進階] 那一頁。在 [內送郵件 - POP3(I):] 下面的 [這個伺服器需
要安全連線 - SSL(C)] 的選項上打勾。然後按 [確定] 、 [結束] 。這樣就會用 SSL 收信了。
要設定使用 SSL 寄信,啟動 Outlook Express 後,由工具列上的 [工具(T)] 、 [帳號
(A)...] 按下去,會打開一個 [Internet 帳號] 的視窗。在視窗左邊選擇要設定的帳號,然後
按下右邊的 [內容(P)] 按鈕,會打開另一個 [某某某 內容] 的視窗。按一下上方的 [伺服器] ,
翻到 [伺服器] 那一頁。在 [外寄郵件 - SMTP(U):] 中,要填上 SMTP 郵件伺服器的完整名稱。
再按一下上方的[進階] ,翻到 [進階] 那一頁。在 [外寄郵件 - SMTP(O):] 下面的 [這個伺服器需
要安全連線 - SSL(Q)] 的選項上打勾,並把上面 [外寄郵件 - SMTP(O):] 的連接埠號碼改為 465
。然後按 [確定] 、 [關閉] 。這樣就會用 SSL 寄信了。
Outlook Express 4 與 5 不會檢查伺服器的 SSL 憑證。
Eudora 5.1 以後的版本
Eudora 的 SSL 設計不是很好。
Eudora 5.1 以後有一個 [Certificate Infomation Manager] 憑證管理員,可以管理 Eudora
的憑證。可是很奇怪,沒有辦法直接進入 [Certificate Infomation Manager]
[23]
,要先用 SSL
收一次信,才能進入 [Certificate Infomation Manager] 。
[24]

收信的時候, Eudora 會用 STARTTLS 試探看能不能用 SSL 收信,如果可以的話就切換成
SSL ,不然就繼續用普通的 POP3 收信,所以不用特別設定收信的方式。不過這樣反而會
造成困擾:如果切換成 SSL 以後, Eudora 卻查不到對方的憑證,反而會演變成憑證無
效,停止收信。這時候,原本 POP3 正常收的信,伺服器加上 SSL 後, Eudora 突然不能收
信,會造成使用者很大的困擾。這是 Eudora 另一個不良的設計。
請注意: OpenSSL 預設是做 PEM 格式的憑證,所以先前我們做的都是 PEM 格式的憑
證。但 Eudora 只能匯入 DER 憑證格式。 PEM 只是把 DER 用 Base64 編碼,以方便在網路
上傳送,放在網頁上或用 E-mail 寄。我們可以用 OpenSSL 把 PEM 轉 DER :
第 15 頁,共 32 頁 SSL X.509 憑證教學
2008/11/30 http://www.study-area.org/tips/certs/certs.html
# 將最高層認證中心轉成 DER 檔
openssl x509 -in myrootca.crt -outform der -out myrootca-der.crt
要設定使用 SSL 收信,啟動 Eudora 後,由工具列上的 [Tools] 、 [Options...] 按下
去,會打開一個 [Options] 的視窗。在左邊的 [Category] 中選擇 [Checking Mail] 。視窗右邊
的 [Mail Server:] 中,要填上 POP3 郵件伺服器的完整名稱。右下方有一個 [Secure Sockets
when Receiving:] 的選單,選 [If available, STARTTLS] 後,按 [OK] 。這樣就會用 SSL 收信
了。
要設定使用 SSL 寄信,啟動 Eudora 後,由工具列上的 [Tools] 、 [Options...] 按下
去,會打開一個 [Options] 的視窗。在左邊的 [Category] 中選擇 [Sending Mail] 。視窗右邊
的 [Mail Server:] 中,要填上 SMTP 郵件伺服器的完整名稱。右下方有一個 [Secure Sockets
when Receiving:] 的選單,選 [If available, STARTTLS] 後,按 [OK] 。這樣就會用 SSL 寄信
了。
要加入我們的認證中心,要先收一次信。視窗下面會顯示 [SSL Negotiation Failed:
Certificate Error: Cert Chain not trusted. ...] 的錯誤訊息。依前述方式回到 [Tools] 、
[Options...] 、 [Category] 、 [Checking Mail] 、 [Secure Sockets when Receiving:] 後,按一下
[Last SSL Info] ,以開啟 [Eudora SSL Connection Infomation Manager] 的視窗,顯示剛剛收到
的憑證內容。按一下下面的 [Certificate Infomation Manger] 按鈕,會再跳出一個
[Certificate Infomation Manger] 的視窗。按一下右下角的 [Import Certificate] ,找到我們的
最高層認證中心的 DER 檔 myrootca-der.crt ,按 [開啟] ,就會加進去了。
[25]

Becky!
Becky! 因為 SSL 版權費用的問題,作者已經公開宣佈不會支援 SSL 。不過我們可以
利用 Stunnel SSL 包裝程式,透過 SSL 連線來收發信。詳情請參考「設定其她不支援
SSL/TLS 的程式」。
Opera 郵件
要設定使用 SSL 收信,打開 Opera ,從工具列上的 [檔案(F)] 、 [功能設定(R)...] 進去
後,會打開 [功能設定] 的視窗。在視窗左邊的選單中,選 [電子郵件] 時,右邊會出現 [使用
Opera 的帳號(O)] 的選單。選擇要設定的帳號,然後按旁邊的 [更改(P)...] ,會跳出一個 [郵
件帳號設定] 的視窗。在上面的 [伺服器] 上按一下,切換到伺服器那一頁,在 [內收郵件] 裏
[採用 TLS 安全性協定] 的地方打勾,按 [確定] 、 [確定] 。這樣就會用 SSL 收信了。
要設定使用 SSL 寄信,打開 Opera ,從工具列上的 [檔案(F)] 、 [功能設定(R)...] 進去
後,會打開 [功能設定] 的視窗。在視窗左邊的選單中,選 [電子郵件] 時,右邊會出現 [使用
Opera 的帳號(O)] 的選單。選擇要設定的帳號,然後按旁邊的 [更改(P)...] ,會跳出一個 [郵
件帳號設定] 的視窗。在上面的 [伺服器] 上按一下,切換到伺服器那一頁,在 [外寄郵件] 裏
[採用 TLS 安全性協定] 的地方打勾,按 [確定] 、 [確定] 。這樣就會用 SSL 寄信了。
憑證查核的部份, Opera 郵件使用 Opera 的憑證庫,妳只要把認證中心加進 Opera 就
可以了。詳情請參考 Opera 的設定。
設定其她不支援 SSL/TLS 的程式
「我的程式不支援 SSL/TLS ,怎麼辦?」
沒有關係。我們可以用 SSL 包裝程式,先和伺服器建立 SSL 連線,再將程式送的指
令,透過這個 SSL 連線轉送給伺服器,並將伺服器在 SSL 連線中的回應,轉送回來。這
第 16 頁,共 32 頁 SSL X.509 憑證教學
2008/11/30 http://www.study-area.org/tips/certs/certs.html
樣一來,即使程式本身不懂 SSL ,也可以透過這個 SSL 連線,來加密收送的資料。
以下,我們介紹 SSL 包裝程式。
Stunnel
Stunnel 的網站在 http://www.stunnel.org/ ,可以從網站上下載。在 WINDOWS 下,是很
簡單好用的 SSL 包裝程式。 WINDOWS 下的簡易使用方式說明如下:
從網站 http://www.stunnel.org/ 上下載 stunnel-x.xx.exe 、 libssl32.dll 和 libeay32.dll 。
把 libssl32.dll 和 libeay32.dll 存到 C:\WINDOWS\SYSTEM (WINDOWS 98/ME) 或
C:\WINNT\SYSTEM32 (WINDOWS NT/2000/XP) 下。
在 C:\Program Files 下新增一個 Stunnel 的目錄,把剛剛下載的 stunnel-x.xx.exe 存進
這裏。
在 C:\Program Files\Stunnel 中新增一個檔案 stunnel.conf ,內容舉例如下:
client = yes

[pop3s]
accept = localhost:50110
connect = my.mail.server:995

[smtps]
accept = localhost:50025
connect = my.mail.server:465
啟動 C:\Program Files\Stunnel\stunnel-x.xx.exe 。它會縮到桌面下方工具列的最右邊,
變成一個小圖示。這時如果開啟 [MS-DOS 模式] 或 [命令提示字元] ,打:
netstat -an
會看到類似:
TCP 127.0.0.1:50025 0.0.0.0:0 LISTENING
TCP 127.0.0.1:50110 0.0.0.0:0 LISTENING
的兩行。按兩下 Stunnel 在工具列右邊的小圖示,會顯示 Stunnel 的使用記錄。
啟動程式,修改程式的設定,將原來 SMTP 連到 my.mail.server 連接埠 25 的地方,改
連到 localhost 連接埠 50025 ;原來 POP3 連到 my.mail.server 連接埠 110 的地方,改連
到 localhost 連接埠 50110 。
收、發信。
這樣應該就可以了,原本不會 SSL 的程式,現在可以透過 Stunnel 使用 SSL 連線了。
這只是 Stunnel 的基本功能。 Stunnel 還有很多強大的功能,不但可以轉送 POP3 、
SMTP 、 IMAP 、 NNTP 、 LDAP …… 等各種通訊協定,也可以將 SSL 連線,轉送給不會
SSL 的伺服器程式。這樣即使反過來,伺服器程式本身不會 SSL ,使用者也可以使用 SSL
加密連線。詳細的做法,請下載 Stunnel 的原始程式碼,參照內附的完整操作說明。
不過 Stunnel 有一個很大的限制:因為 Stunnel 只負責先建立好 SSL 連線,並不瞭解通
訊協定本身的指令語法,所以無法用 STARTTLS 指令建立 TLS 連線,只能用傳統的方式,一
開始就建立全程的 SSL 連線。
觀念討論
第 17 頁,共 32 頁 SSL X.509 憑證教學
2008/11/30 http://www.study-area.org/tips/certs/certs.html
SSL/X.509 簡介
SSL 採用的是 X.509 ,由上而下金字塔式的憑證
制度。
在 X.509 中,每一個合格的憑證上,都會有一個
簽名。最下層的憑證上,會有一個認證中心 (CA) 的
簽名,表示這個認證中心 (CA) 檢查過,確認所有者
資料無誤。中間的認證中心 (CA) 上,也會有管轄它
的最高層認證中心 (Root CA) 的簽名,表示最高層認
證中心授權給它,可以簽發別人的憑證。只有最高層
認證中心上,因為它已經是最大,沒有再上層可以給
它簽名了,所以只好自己簽自己,憑證上的簽名是自己簽的。
程式自己會認得幾家可靠的認證中心 (CA) ,碰到 SSL 網站時,雖然不認得伺服器的
憑證 (Certificate) ,但只要那個憑證上,有自己認得的認證中心 (CA) 簽名保證過,那個憑
證就沒有問題。
當程式碰到合格的 SSL 憑證
X.509 的金字塔制度
第 18 頁,共 32 頁 SSL X.509 憑證教學
2008/11/30 http://www.study-area.org/tips/certs/certs.html

但如果那個伺服器憑證上,沒有自己認得的認證中心 (CA) 簽名保證過,伺服器憑證
就有可能有問題,會出現憑證無效的警告。
當程式碰到有問題的 SSL 憑證
第 19 頁,共 32 頁 SSL X.509 憑證教學
2008/11/30 http://www.study-area.org/tips/certs/certs.html

憑證無效的警告
本文第一步討論的是如何自製最高層認證中心 (Root CA) 。因為這是我們自己的認證
中心,程式不認得,所以第二步簽發的憑證 (Certificate) 上的簽名,程式自然也不認得,一
定會出現憑證無效的警告。
當程式碰到我們自製的認證中心
第 20 頁,共 32 頁 SSL X.509 憑證教學
2008/11/30 http://www.study-area.org/tips/certs/certs.html

若不想看到這個警告,就要先讓程式認得我們自己的認證中心 (CA) 。這時,第二步
簽發的憑證 (Certificate) ,程式認得上面認證中心 (CA) 的簽名,就不會再出現憑證無效的
警告。
把我們自己的認證中心加上去
第 21 頁,共 32 頁 SSL X.509 憑證教學
2008/11/30 http://www.study-area.org/tips/certs/certs.html

詳細做法,請參考「設定作業系統」、「設定瀏覽器」與「設定電子郵件程式」各
節。
請注意:這個方法,因為要在程式上,手動加入自己的認證中心 (CA) ,所以只有自
己內部用的網站,使用者和程式數目都有限,可以自己一個一個去設認證中心 (CA) 的情
況下,方才可行。若要用在公開的網站上,因為上網者來自各個不同的地方,妳也都不認
識,沒有辦法在她們的電腦上,都加進自己的認證中心,就沒有辦法了。這一點受限於
X.509 的規定,愛莫能助。若真的很在意 SSL 憑證無效警告的問題,又需要在公開的網站
使用 SSL ,請向各家簽證公司申請,年費大概幾萬元臺幣。
資料?什麼資料?
第 22 頁,共 32 頁 SSL X.509 憑證教學
2008/11/30 http://www.study-area.org/tips/certs/certs.html
「等等,剛剛圖中的最後一個步驟,『沒問題,這是給妳的資料』。使用者還沒有填
什麼資料啊!程式怎麼可以自己亂給對方資料呢?到底給了什麼資料?程式會不會自己給
對方 E-mail 、信用卡號碼、身份證字號、密碼?」
程式傳給對方的,是接下來通信時,對稱式加解密用的 Key 。
Public/Private Key 的不對稱加解密法 (Asymmetric Encryption) ,可以把 Public Key 告訴
全世界, Private Key 自己秘密保管好,要傳資料給妳的話,只要用妳的 Public Key 加密,
全世界就只有妳的 Private Key 才解得開。這種不對稱加解密法雖然很安全,但是加解密的
速度很慢。反過來說,傳統的對稱式加解密法 (Symmetric Encryption) ,雖然加解密速度快
多了,但是雙方都要握有同一個 Key ,把 Key 傳給對方途中,會有被攔截監聽的危險。
SSL 採用兩階段式的作法:第一階段,先用 Public/Private Key 不對稱加解密法,傳給
對方「接下來傳真正資料時,對稱式加解密法要用的 Key 」。第二階段,再用這個對稱式
加解密的 Key ,來傳原本要傳的資料。真正傳資料時用的,其實是對稱式加解密法。這個
傳資料用的對稱 Key 是用亂數取的,再用 Public/Private Key 法傳給對方,每一次連線時都
不一樣。用這種兩階段式的作法, Key 是用不對稱加解密法傳給對方的,不用擔心中途被
欄截,也能夠享受合理的加解密速度。
所以 SSL 就安全了囉?
「所以,只要對方 SSL 網站的憑證合格,上面有可靠的認證中心 (CA) 簽名,把我的
信用卡資料傳過去就安全囉?」
不對。
仔細看看前段「 SSL/X.509 簡介 」,就會注意到, SSL/X.509 規定中,認證中心 (CA)
的簽名所保證的,只有「這個 Public Key 憑證的確是屬於這家公司的這個伺服器」而已。
也就是說,它只保證「妳送的信用卡號碼會確確實實交到這家公司的這個伺服器手中,不
怕被任何人中途攔截監聽」。但這並不代表 並不代表 並不代表 並不代表「 「「 「這家公司是優良企業 這家公司是優良企業 這家公司是優良企業 這家公司是優良企業, ,, ,收到 收到 收到 收到妳 妳妳 妳的信用 的信用 的信用 的信用卡 卡卡 卡資料 資料 資料 資料
後 後後 後, ,, ,不會濫用 不會濫用 不會濫用 不會濫用, ,, ,不會側 不會側 不會側 不會側錄 錄錄 錄下來 下來 下來 下來, ,, ,不會多刷兩筆 不會多刷兩筆 不會多刷兩筆 不會多刷兩筆, ,, ,不會轉手把資料賣給別家公司 不會轉手把資料賣給別家公司 不會轉手把資料賣給別家公司 不會轉手把資料賣給別家公司」 」」 」 ,也不 不不 不
代表 代表 代表 代表「 「「 「這家公司的伺服器安全防護做得很好 這家公司的伺服器安全防護做得很好 這家公司的伺服器安全防護做得很好 這家公司的伺服器安全防護做得很好, ,, ,不會被人入侵 不會被人入侵 不會被人入侵 不會被人入侵, ,, ,不會被人 不會被人 不會被人 不會被人偷偷 偷偷 偷偷 偷偷安裝側 安裝側 安裝側 安裝側錄 錄錄 錄上網 上網 上網 上網
資料的程式 資料的程式 資料的程式 資料的程式」 」」 」。
沒錯, SSL 只能保證收到的 Public Key 憑證不是偽造的,但不能保證這家公司本身沒
有問題。就算這家公司本身沒有問題,也不能保證這家公司內部會不會成為別人入侵、竊
取資料的目標。
「那怎麼辦?怎麼樣才能算安全?才能放心把資料傳過去?」
就像在實體世界,跟不認識的商店買東西時,一定會保持戒心一樣,在網路上和任何
網站交易,也一定要保持戒心,除了要考慮妳平常信不信任這個網站外,也要考慮妳傳過
去的資料重不重要。舉例來說,留言板、討論區、網路投票等等,不是很私人的資料,可
以放心傳過去沒問題;但如果是真實姓名、手機號碼、家裏電話、信用卡號碼, E-mail 等
等,就只能傳給自己信任的網站了。
什麼是數位簽名?
數位簽名是用 Private Key ,針對某一段資料,用 Digest Hash 演算法(如 SHA1 )做出
來的一段 Digest 摘要碼。只要原來的資料有所不同,演算出來的 Digest 摘要碼就會跟著變
動。用 Private Key 做出來的 Digest 摘要碼,可以用它的 Public Key 來檢查。只要用它的
Public Key ,檢查 Digest 摘要碼和那一段資料符不符合,就可以知道資料有沒有中途被竄
第 23 頁,共 32 頁 SSL X.509 憑證教學
2008/11/30 http://www.study-area.org/tips/certs/certs.html
改過,是不是這個 Private Key 當初簽的那一段資料。
這個性質很像合約中,在整份合約上大大簽一個名一樣,人家認得妳簽名的筆跡,日
後只要合約有任何塗改,一認便知。所以我們把它叫做數位簽名。
因為數位簽名可以用來檢查資料有沒有被竄改,所以我們把它用在憑證上,認證中心
檢查過 Public Key 的所有人,和 Key 上記載的所有人資料相符後,用認證中心自己的
Private Key ,在這些資料上面做個數位簽名,表示證明。日後收到這個 Public Key 的人,
只要檢查上面認證中心的簽名,就可以知道這個 Key ,和它上面所載的所有人資料相不相
符,是不是真的是這家公司的 Key 。也就知道,連上的這個伺服器,是不是真的是這家公
司的伺服器了。
什麼是憑證?
憑證的原文是 Certificate ,是附上所有人 (owner) 的資料(公司名稱、伺服器名稱、個
人真實姓名、連絡 E-mail 、通訊地址等資料),後面加上數位簽名的 Public Key 。憑證上
會附有幾個數位簽名,代表這些簽名的人,確認過這個 Public Key 的所有人,和憑證上所
載的資料相符,沒有假造。
在 X.509 中,最下層每一個合格的憑證 (Certificate) 上,會有一個認證中心 (CA) 的簽
名,表示這個認證中心 (CA) 檢查過,確認憑證上的所有者資料無誤。當程式碰到沒見過
的憑證時,只要檢查憑證上認證中心 (CA) 的簽名無誤,即代表這個認證中心 (CA) 查核過
這個憑證 (Certificate) ,憑證上的資料無誤。
什麼是認證中心?
認證中心的原文是 CA ,是 Certificate Authority 的縮寫,在微軟繁體中文 WINDOWS
上譯成「憑證授權」,「憑證授權」完全是逐字翻譯,意思不通,不用。認證中心是
X.509 的一環。認證中心也是一種憑證,上面附有認證中心本身的資料,但不是用來加解
密,而是用來簽發憑證,證明憑證所有人和憑證上所載的資料無誤。請參見「SSL/X.509
簡介」的附圖。
每一個合格的認證中心 (CA) (微軟繁體中文 WINDOWS 上譯成「中繼憑證授權」,
意思不通)上,會有一個管轄它的最高層認證中心 (Root CA) 的簽名,表示最高層認證中
心授權給它,可以簽發別人的憑證。當程式碰到沒見過的憑證,憑證上簽名的認證中心
(CA) 也沒見過時,只要檢查認證中心上附的最高層認證中心 (Root CA) 的簽名無誤,即代
表這個最高層認證中心 (Root CA) ,認為這個認證中心 (CA) 的憑證簽發過程很仔細,檢查
資料很詳實,所以授權給它,准許它可以簽發憑證 (Certificate) 。所以這個認證中心 (CA)
簽發的憑證 (Certificate) ,憑證上的資料也沒有問題。
什麼是最高層認證中心?
最高層認證中心的原文是 Root CA ,在微軟繁體中文 WINDOWS 上譯成「根目錄憑證
授權」。「根目錄」只是照 Root 這個字逐字翻譯,意思不通,不用。最高層認證中心是
X.509 的一環。最高層認證中心也是認證中心 (CA) ,和一般認證中心的差別在於,它不會
直接用來簽發憑證,而是授權給一些中間的認證中心,讓這些中間的認證中心來簽發憑
證。請參見「SSL/X.509 簡介」的附圖。
最高層認證中心,因為已經是最大,沒有再上層可以給它簽名了,所以憑證上的是自
己的簽名,不是別人的簽名。因為最高層認證中心沒有再上面的簽名了,沒有人可以保證
最高層認證中心本身有沒有問題,沒有辦法再往上檢查,所以程式只能事先就認得一些可
靠的最高層認證中心,事先就知道一些可靠的最高層認證中心的 Public Key 。
第 24 頁,共 32 頁 SSL X.509 憑證教學
2008/11/30 http://www.study-area.org/tips/certs/certs.html
最高層認證中心只能由一些著名、可靠的公司來擔任,因為沒有辦法再往上查驗。如
果程式被加進一些不可靠的最高層認證中心,接下來碰到它簽下來的憑證,都會有問題,
整個程式的安全都會被破壞。所以在 X.509 下, SSL 程式一定要好好保護最高層認證中
心,一定要再三確認,不可以隨便讓人手動加進最高層認證中心。
如何填寫憑證申請書
如果妳不知道該如何填寫憑證申請書,請參考以下範例:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:TW
State or Province Name (full name) [Some-State]:Taiwan
Locality Name (eg, city) []:Taipei City
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Tavern IMACAT's
Organizational Unit Name (eg, section) []:Owner
Common Name (eg, YOUR name) []:Tavern IMACAT's
Email Address []:imacat@mail.imacat.idv.tw

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
1. 所有資料都要填英文 (ASCII 字集) 。 X.509 憑證只接受英文 ASCII 字集的字。
2. Country Name 一定要是大寫的雙字母國碼,臺灣是 TW ,臺灣以外的地方,請參考 ISO-
3166 的標準雙字母國碼。
3. State Name 是國名或省名,不可以填國碼。臺灣填 Taiwan 即可。
4. Locality Name 是地名,填所在地縣市名即可。
5. Organization Name 是組織單位名稱,填公司行號,或學校局處的名稱。
6. Organizational Unit Name 是部門名稱,填公司部門名稱,或學校局處的單位名稱。
7. Common Name 是憑證的名稱。若是最上層憑證機構,請填上前面填的組織單位名稱,
後面可以加上 RSA/2048 ,以便日後辨認憑證的性質。若是伺服器憑證,請填上伺服
器的全名 (www.abc.com) 。若是 E-mail 憑證,請填上妳的 E-mail 。
8. E-mail Address 是申請單位的連絡信箱,請填上妳的聯絡用 E-mail 。
9. A challenge password 是申請書的密碼。不過申請書不用設密碼,所以不填。
10. An optional company name 是憑證代辦公司的名稱,也不用填。
X.509 憑證制度的檢討
X.509 憑證制度,是靠事先認得一些可靠的最高層認證中心,再一層一層簽發下來的
金字塔型結構。這樣的制度,很像信用卡制度或身份證制度:
這樣的金字塔結構,有好有壞。
好處在於,在無限寬廣的網際網路上,我們根本不知道會碰到什麼樣的網站,所以根
本也無從查認每一個收到的 Public Key 有沒有問題,是不是真的是這家公司的網站,我是
X.509 制度 信用卡制度 身份證制度
第 25 頁,共 32 頁 SSL X.509 憑證教學
2008/11/30 http://www.study-area.org/tips/certs/certs.html
不是真的是跟這家公司打交道。在 X.509 下,只
要我們預先認得幾家可靠的最高層認證中心就好了。
碰到不認識的 Public Key 時,只要一層一層往上追
溯,如果最後追溯得到一個我們認得的可靠的最高層
認證中心,那這個 Public Key 就沒有問題了。這樣的
做法,簡化了無限寬廣的網際網路上,確認彼此身份
的困難性。
缺點則在於,因為 X.509 是金字塔結構,最高層
認證中心 (Root CA) 手中握有整個網際網路信任關係的關鍵,權力太大了。龐大的權力,
伴隨著的是龐大的利益。曾經跟認證中心打過交道(如 VeriSign 、 HiTrust 網際威信、
Taica 臺灣網路認證等)的人都知道,申請簽發 SSL 憑證非常貴,一年年費要好幾萬,普
通人或中小企業,需要 SSL 網站加密的時候,根本就負擔不起。而因為金字塔頂層的最高
層認證中心,是壟斷事業,數目很少,不會有什麼競爭,所以大型的最高層認證中心姿態
都很高,年費一直降不下來。但若不靠這些最高層認證中心,自己來發證,程式沒有內建
我們自製的認證中心,連到 SSL 站上,一定會出現警告。小組織裏內部自用的 SSL 伺服
器還沒有問題,我們可以自己加入自製的認證中心,但大型公開的伺服器(像公司網站)
上,不可能要不認識的上網者信任我們的認證中心,把我們的認證中心加進去,這時候資
料的安全,就會亮起紅燈了。到頭來,我們還是得回過頭去,求這些大型的認證中心,乖
乖繳一年好幾萬的年費。
這真的沒有辦法嗎?
答案是否定的。即使是 X.509 的金字塔結構,至少就有兩條路:第一條路是像信用卡
制度一樣。信用卡制度也是金字塔結構,頂層的信用卡集團也是壟斷事業,數目很少,可
是信用卡的年費只有幾千塊錢。有競爭就會降價,但沒有競爭,並不代表價格一定降不下
來。價格其實還是卡在認證中心如何定價,信用卡制度就是一例。第二是像身份證一樣,
由政府出面經營,以政府的信用擔保、審核,把它變成免費的公用事業,讓大家有錢沒
錢,都可以來用安全的網站交易。
不過,仔細想想,我們是不是一定要用 X.509 這種金字塔制度,任這些頂層的認證中
心宰割,予取予求呢?
其實憑證有好幾種。有一種叫做 PGP ,是採用「信任網 (Web of Trust) 」的模式,建
立信任關係。 PGP 的信任網就像人際關係網一樣:我認得妳,妳認得她,所以我只要請妳
來認她就好了。
PGP 的信任網
第 26 頁,共 32 頁 SSL X.509 憑證教學
2008/11/30 http://www.study-area.org/tips/certs/certs.html

在 PGP 信任網模式下,我們不需要一個最高層認證中心,給每個人核發憑證,才能取
得 Public Key 的安全性。我們只要信任我們自己的 Public Key 憑證,用自己的憑證去簽認
識的 Public Key 的憑證,別人也用他們自己的憑證,去簽他們認識的人的憑證,往外一層
一層擴散出去,互相信任。碰到不認得的憑證時,只要能夠從他憑證上的簽名中,回溯到
可信任的人的憑證身上,就可以了。其實事情本來就是這樣。我們為什麼要向別人繳一年
好幾萬的年費,還要別人簽名,才能信任自己的憑證呢?
不過,不合理的是, SSL 規定,要用 X.509 。
其她 SSL/X.509 憑證的做法
在本文中,我們做了兩個憑證:一個是 Root CA 最上層認證中心,一個是用這個最高
層認證中心簽發的憑證。
其實完整的話,應該要做三層(參考:「SSL/X.509 簡介」中的附圖):最高層認證
中心 (Root CA) ,中間的認證中心 (CA) ,最後才簽發下面的憑證。可是我不會做中間的認
證中心, ^^; 完整的三層挺複雜的。而且,最高層認證中心 (Root CA) 只是「不會」用來直
接簽憑證,而不是「不能」用來直接簽憑證,最高層認證中心 (Root CA) 簽的憑證,一樣
有效。更何況,我們通常都只有幾台伺服器,只需要幾個憑證就好,不需要授權好幾個中
間的認證中心,來讓它們簽憑證。所以我們就省略了中間的認證中心,直接用最高層認證
中心 (Root CA) 來簽發憑證 (Certificate) 。
其實還有兩個不那麼麻煩的做法。 Apache mod_ssl 有隨附一個「印度蛇油公司 (Snake
Oil) 」的最高層認證中心 (Root CA) ,內有印度蛇油 (Snake Oil CA) 的 Private Key ,可以直
接用印度蛇油認證中心 (Snake Oil CA) 的名義來簽發憑證。只要在編譯 apache 時, make 以
後打 make certificate ,就會自動用印度蛇油認證中心,簽發 Apache 網站所需的伺服器憑證
了。可是,基於安全上的理由,妳只能夠用這張簽出來的網站憑證,絕 絕絕 絕對不可以把印度蛇 對不可以把印度蛇 對不可以把印度蛇 對不可以把印度蛇
油認證中心 油認證中心 油認證中心 油認證中心 ( (( (Snake Oil Snake Oil Snake Oil Snake Oil CA CA CA CA) ) ) ) , ,, ,加到程式認得的認證中心中 加到程式認得的認證中心中 加到程式認得的認證中心中 加到程式認得的認證中心中。因為印度蛇油的 Private Key 是
隨著 Apache mod_ssl 公開散佈的,任何人只要下載 Apache mod_ssl ,裏面就會有印度蛇油
的 Private Key ,就可以用印度蛇油的名義來簽憑證,自稱為某某公司。印度蛇油的可靠度
是零,絕對不要加進程式中。(所以才叫做印度蛇油 Snake Oil ,騙人的。)
第 27 頁,共 32 頁 SSL X.509 憑證教學
2008/11/30 http://www.study-area.org/tips/certs/certs.html
另一個方法,是只做一個最高層認證中心 (Root CA) ,直接用這個最高層認證中心,
來當伺服器的憑證。因為最高層認證中心 (Root CA) 本身,也是一個憑證,所以當然也可
以用,一樣有效。這時候,最高層認證中心的所有人名稱,就要用伺服器的名稱
(www.abc.com) ,而不是單位的名稱 (ABC Corporation.) 。這個方法,適合只有一個伺服
器,只需要一個憑證,而且不在乎憑證名稱的人。用 Windows NT/2000 的 Certificate Server
憑證伺服器,可以做出這種憑證。但如果有好幾臺伺服器,每個憑證都要分別去加到每臺
電腦上,這個方法就不大方便了。
註釋
1. FHS 是指 Filesystem Hierarchy Standard 檔案系統階層標準,是一個 Unix 下,目錄及檔
案存放位置的標準規定,以方便系統管理員管理,方便不同程式間互相搭配整合。
目前大多數 Linux 版本(如 Debian 、 Red Hat 、 Mandrake 等)都已支援 FHS 。更進
一步的資料請參考 FHS 的網站 http://www.pathname.com/fhs/ 。
(回正文)

2. Opera 截至目前為止 (6.05) ,只支援 RSA ,不支援 DSA 。
(回正文)

3. 在 Mandrake 下裝 RPM 時,請改用:
mv /usr/lib/ssl/openssl.cnf /etc/ssl
ln -s /etc/ssl/openssl.cnf /usr/lib/ssl/openssl.cnf
(回正文)


4. 這是 bash 或 zsh 的指令。 csh 或 tcsh 下,請改用:
setenv OPENSSL_CONF "/etc/ssl/openssl.cnf"
(回正文)


5. 這樣以後登入的時候,都能夠自動設定 OPENSSL_CONF 。這是用 bash 登入的情
形,若用 csh 或 tcsh 登入,請改用:
echo "# OpenSSL 設定檔的位置" >> ~/.cshrc
echo "setenv OPENSSL_CONF \"/etc/ssl/openssl.cnf\"" >> ~/.cshrc
若用 zsh 登入,請改用:
echo "# OpenSSL 設定檔的位置" >> ~/.zshenv
echo "export OPENSSL_CONF=\"/etc/ssl/openssl.cnf\"" >> ~/.zshenv
(回正文)


6. (感謝網中人 (netman) 提供)若妳安裝的是 Red Hat 的 openssl RPM ,在這裏會出一
點問題。 Red Hat 的 openssl 做 rand 指令,配合 -out 參數時,參數解析會出錯,無法
執行。目前我還沒有看到網路上有人提過這件事。解決方法之一,是自己編譯、安
裝 OpenSSL 。這其實很簡單。在 Linux 上,步驟如下:
./config shared --prefix=/usr --openssldir=/usr/share/ssl
make
make install
在其她作業系統 (*BSD/UNIX) 上,步驟如下:
./config --prefix=/usr --openssldir=/usr/share/ssl
make
make install
第 28 頁,共 32 頁 SSL X.509 憑證教學
2008/11/30 http://www.study-area.org/tips/certs/certs.html
如果不想自己編譯、安裝 OpenSSL ,另一個解決方法,由網中人提供,則是避開 -
out 參數,改用輸出重導向:
openssl rand 1024 > /etc/ssl/private/.rand
Mandrake 和 Debian 的 openssl 套件沒有這個問題。
(回正文)


7. 若要做成 DSA Key,請改用:
# 製作 DSA 參數檔
openssl dsaparam -out /tmp/dsaparam 2048

# 製作 DSA Private Key
openssl gendsa -out /etc/ssl/private/myrootca.key /tmp/dsaparam
chmod og-rwx /etc/ssl/private/myrootca.key

# 刪除 DSA 參數檔
rm -f /tmp/dsaparam
因為 DSA 取亂數參數要取很久,所以 OpenSSL 不直接做 DSA Key ,而把取出來的
DSA 參數存檔,再用參數檔來做 DSA Key ,做下一組 Key 時就可以用同一個參數
檔,以節省時間。不過這裏我們只做一組 Key ,所以參數檔用過就可以刪了。
(回正
文)

8. 若妳的最高層認證中心,放在另一臺伺服器上,請將 /tmp/myhost.req 複製到那臺伺
服器上的 /tmp/myhost.req ,登入那臺伺服器上,再繼續進行。
(回正文:root/使用者)

9. 如果妳原來是在另一臺伺服器做這組 Public/Private Key 的,
把 /etc/ssl/certs/myhost.crt 複製到原來的伺服器上的 /etc/ssl/certs/myhost.crt ,就
可以用了。記得要回到原來的伺服器上,把原來伺服器上的憑證申請
書 /tmp/myhost.req 也刪掉。
rm -f /tmp/myhost.req
(回正文)


10. 在 Mandrake 下裝 RPM 時,請改用:
cp /usr/lib/ssl/openssl.cnf ~/etc/ssl
(回正文)


11. 這是 bash 和 zsh 的指令。 csh 或 tcsh 下,請改用:
setenv OPENSSL_CONF "$HOME/etc/ssl/openssl.cnf"
(回正文)


12. 這樣以後登入的時候,都能夠自動設定 OPENSSL_CONF 。這是用 bash 登入的情
形,若用 csh 或 tcsh 登入,請改用:
echo "# OpenSSL 設定檔的位置" >> ~/.cshrc
echo "setenv OPENSSL_CONF \"$HOME/etc/ssl/openssl.cnf\"" >> ~/.cshrc
若用 zsh 登入,請改用:
echo "# OpenSSL 設定檔的位置" >> ~/.zshenv
echo "export OPENSSL_CONF=\"$HOME/etc/ssl/openssl.cnf\"" >> ~/.zshenv
第 29 頁,共 32 頁 SSL X.509 憑證教學
2008/11/30 http://www.study-area.org/tips/certs/certs.html
(回正文)


13. (感謝網中人 (netman) 提供)若妳安裝的是 Red Hat 的 openssl RPM ,在這裏會出一
點問題。 Red Hat 的 openssl 做 rand 指令,配合 -out 參數時,參數解析會出錯,無法
執行。目前我還沒有看到網路上有人提過這件事。解決方法之一,是自己編譯、安
裝 OpenSSL 。這其實很簡單。在 Linux 上,步驟如下:
./config shared --prefix=/usr --openssldir=/usr/share/ssl
make
make install
在其她作業系統 (*BSD/UNIX) 上,步驟如下:
./config --prefix=/usr --openssldir=/usr/share/ssl
make
make install
如果不想自己編譯、安裝 OpenSSL ,另一個解決方法,由網中人提供,則是避開 -
out 參數,改用輸出重導向:
openssl rand 1024 > ~/etc/ssl/private/.rand
Mandrake 和 Debian 的 openssl 套件沒有這個問題。
(回正文)


14. 若要做成 DSA Key,請改用:
# 製作 DSA 參數檔
openssl dsaparam -out ~/tmp/dsaparam 2048

# 製作 DSA Private Key
openssl gendsa -out ~/etc/ssl/private/myrootca.key ~/tmp/dsaparam
chmod og-rwx ~/etc/ssl/private/myrootca.key

# 刪除 DSA 參數檔
rm -f ~/tmp/dsaparam
因為 DSA 取亂數參數要取很久,所以 OpenSSL 不直接做 DSA Key ,而把取出來的
DSA 參數存檔,再用參數檔來做 DSA Key ,做下一組 Key 時就可以用同一個參數
檔,以節省時間。不過這裏我們只做一組 Key ,所以參數檔用過就可以刪了。
(回正
文)

15. 若妳的最高層認證中心,是由 root 管理,請接到 root 的第三步驟。
(回正文)

16. 如果妳原來是在另一臺伺服器做這組 Public/Private Key 的,把
~/etc/ssl/certs/myhost.crt 複製到原來的伺服器上的 ~/etc/ssl/certs/myhost.crt,就可
以用了。記得要回到原來的伺服器上,把原來伺服器上的憑證申請書 /tmp/myhost.req
也刪掉。
rm -f /tmp/myhost.req
(回正文)


17. 不過微軟的 Outlook Express 很笨,不支援相容性高的 TLS 新標準,只能跑舊式的
SMTPS 。若妳要設定給 Outlook Express 用 SSL 寄信,就一定要在編譯時加上 SMTPS
的支援。
(回正文)

18. 其實妳會看到三個連接埠: SMTP(25) 、 SMTPS(465) 和 submission(587) 。 submission
(587) 是給郵件程式寄信專用的,和 SMTP(25) 一樣可以做 TLS 。 submission(587) 不
需特別設定,為簡化討論起見,省略之。
(回正文)

第 30 頁,共 32 頁 SSL X.509 憑證教學
2008/11/30 http://www.study-area.org/tips/certs/certs.html
19. 若妳在意系統安全,不想多開不必要的帳號的話,這裏的 smmsp 可以改成 mail ,用
mail 帳號。我強烈建議這個做法。開太多不必要的帳號,增加不必要的系統權限,
也是安全漏洞的來源之一。本來就沒有什麼程式在用 mail 帳號, mail 是閒置的系統
帳號之一,不如好好利用這個現有的系統資源。更何況, Sendmail 建議的 smmsp 群組
的 GID 25 ,和 Debian floppy 群組的 GID 衝突。這是系統安全的題外話,和 SSL 無
關。
(回正文)

20. 這裏 MS-WINDOWS 把「最高層認證中心 (Root CA) 」譯成「根目錄憑證授權」,把
「認證中心 (CA) 」譯成「憑證授權」或「中繼憑證授權」,都是逐字翻譯的結果,
完全不知所云,翻譯之大忌,戒之。
(回正文)

21. 到 Mozilla 1.1 版為止, Mozilla 把「憑證 (Certificate) 」譯成「認證」,把「認證中心
(CA) 」譯成「查證」,也是有問題的譯法,且不符目前的通譯。我已跟 Mozilla 中文
化的作者林弘德反映過這個問題,他承諾於 1.0.1 版後修正。
(回正文)

22. 實際儲存的地方,在 Mozilla 使用者設定檔目錄下的 cert7.db ,格式是 Berkeley DB

(回正文)

23. 我還沒找到直接開啟 [Certificate Infomation Manager] 的方法。如果有人知道,煩請
告訴我。
(回正文)

24. 實際儲存的地方,公用的認證中心在 Eudora 程式目錄下的 rootcerts.p7b ,個人的認
證中心在 Eudora 信箱目錄下的 usercerts.p7b ,格式是標準憑證格式 DER 的 PKCS#7
檔。
(回正文)

25. 要先失敗一次,才能去設定,其實挺蠢的。另一個「比較不那麼愚蠢的方法」,就
是直接去改 usercerts.p7b 。 usercerts.p7b 是標準憑證格式 PKCS#7 檔,可以用
OpenSSL 處理:
# 備份原檔案
mv usercerts.p7b usercerts-orig.p7b

# 把 DER 的 PKCS#7 檔,拆成一張一張的 PEM 憑證清單
openssl pkcs7 -print_certs -inform der \
-in usercerts-orig.p7b -out certslist.pem

# 把我們的認證中心加進來
cat /etc/ssl/certs/myrootca.crt >> certslist.pem

# 將一張一張的 PEM 憑證清單,組合成 PEM 的 PKCS#7 檔
openssl crl2pkcs7 -nocrl -certfile certslist.pem > usercerts.pem

# 將 PEM 轉為 DER
openssl pkcs7 -in usercerts.pem -outform der -out usercerts.p7b

# 刪掉多餘的檔案
rm -f certslist.pem usercerts.pem
這樣就把我們的認證中心加進 usercerts.p7b 了。不要直接去改公用的認證中心
rootcerts.p7b ,這個檔案留給 Eudora 自己去維護。
(回正文)

參考資料
1. SSL: Netscape Security Documentation, Introduction to SSL, How SSL Works, SSL Protocol
v3.0
2. X.509: RFC 3280, RFC 2459 (舊版)
3. OpenSSL: OpenSSL, openssl(1), x509(1), req(1), ca(1)
4. PGP: GnuPG, PGPi, PGP, Introduction to Cryptography ( PDF 檔, PGP 的原作者 Phil
Zimmermann 作), Phil Zimmermann
第 31 頁,共 32 頁 SSL X.509 憑證教學
2008/11/30 http://www.study-area.org/tips/certs/certs.html
5. FHS: http://www.pathname.com/fhs/
6. TLS 1.0: RFC 2246
7. Apache: http://www.apache.org/, Apache-SSL, mod_ssl
8. Qpopper: http://www.eudora.com/qpopper/
9. Sendmail: http://www.sendmail.org/
10. Stunnel: http://www.stunnel.org/
後記
2002-11-15
小幅更新:
加上 Sendmail SMTPS(465) 功能的設定。這是 Sendmail 未公開的功能,之前在
Sendmail 文件中沒有發現。我是在設定 Outlook Express 時,發現沒辦法按自己寫的方
式用 SSL 寄信,上 google 搜尋,才發現 Sendmail 的 SMTPS 支援的。不好意思,寫
出無法執行的東西,自己沒有全部檢查確認過,對大家非常抱歉。 ^^;
加上 Stunnel SSL 包裝程式。這是可以讓 Becky! 等不支援 SSL 的程式,也能使用 SSL
連線的方法。
加註不新增 smmsp 帳號的方法。
幾個之前編排文字時造成的小錯誤。
2002-09-15
本文參考的資料有限。 SSL 和 X.509 我還沒有完整看過。而目前網路上,即使是英文
資料也很少。一開始,我只能從一堆零零散散的網路討論,和 OpenSSL 的文件中,自己拼
湊出 SSL 憑證的做法。因為網路上找不到比較完整的 SSL 憑證製作教學,所以我想把它
寫出來,開個先鋒。我沒有看完 SSL/X.509 ,只是儘量讓我做出來的憑證,在我所知道的
SSL 程式上,都跑得動。做出來憑證不一定完全符合 SSL/X.509 ,也不一定在所有的 SSL
程式上都能用。
然而,也不是每一個符合 SSL/X.509 的憑證,就能在所有的 SSL 程式上用。不見得每
個 SSL 程式都完整支援 SSL/X.509 ,就像 Opera 目前還不支援 DSA 一樣。
本文第一版是 2002-01-09 ~ 2002-01-13 間所寫。第一版寫作的目的,是當時為了想自
己做 Root CA (這樣憑證看起來比較好看),想辦法在網路上零碎的討論中,拼湊出 Root
CA 的做法。整個做法有點複雜,怕自己下次要發憑證時忘記,所以寫下來,順便寫成
HOWTO 教學的形式,以把這個知識分享給大家。因為只是為了快點記下繁複的做法,寫
得很倉促,交代也不清不楚。
這是第二版,是 2002-09-04 ~ 2002-09-15 間改寫的,當初改寫的目的,是這兩三個月
來,收到好幾封信詢問這篇文章,覺得自己這篇文章,交代得不清不楚,所以重新改寫。
因此原先改寫的時候,著重在 WHAT 和 WHY 的說明,把 SSL/X.509 架構,交代得比較嚴
謹,也把腦子裏想的幾張流程圖,都給畫出來。不過到後來, HOW 的部份,也大幅度地
改寫,重新編排流程,實驗各種情況,更正幾個錯誤,改善原來的設定,統整辭彙的翻
譯,加上流程的說明。原文 2,931 字,改寫後 18,421 字, ^^; 改寫的幅度很大。
感謝 study-area 的網中人 (netman) 協助校正好幾個錯誤、疏漏之處。
希望改寫後,能讓這篇文章更好,更嚴謹,也更容易入手。
依瑪貓 <imacat@mail.imacat.idv.tw> 初稿 2002-01-09 ,上次更新日期 2002-11-15
第 32 頁,共 32 頁 SSL X.509 憑證教學
2008/11/30 http://www.study-area.org/tips/certs/certs.html

You're Reading a Free Preview

ダウンロード
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->