【懶人教學】建構您的 Apache 1.3.X + SSL on Win32 ( Part 2 )



贊助商連結


ActionFire
2004-06-02, 10:13 AM
延續上一篇的懶人教學(已修改)

上次呢提供的教學似乎對於 Apache 2.0.X 的使用者比較方便, 這次我們來做一下 Apache 1.3.X
這裡問題比較大一點的是, 預設因為僅 Compile 基本的功能模組所以有些註解的部分別輕易拿掉, 不然會開不起來的

同樣的話再說一次

您可以照著我做也沒關係, 每個人有每個人的做法看個人吧試試看就知

在Hunter (http://hunter.campbus.com/) 這裡可以找到已經編譯好的,視個人需要自行取用

以下列出最快的安裝方式供參考, 原理....自己看各套件的內文說明

安裝所需檔案
Apache_1.3.31-Mod_SSL_2.8.18-Openssl_0.9.7d-Win32
Openssl-0.9.7d-Win32.zip
openssl.cnf

01. 建議最好先裝 Apache 1.3.X 再來解壓縮 Apache_1.3.31-Mod_SSL_2.8.18-Openssl_0.9.7d-Win32,
記得解壓縮後修改路徑直接覆蓋原來安裝的檔案上(直接覆蓋升級), 建議備份您的設定檔(上一篇忘了交代了 Sorry)

02. 基本上您已經完成 Apache + mod_ssl 的安裝了, 嗯??為啥缺 openssl, 阿知!! 大概忘了放了吧
沒關係我們自己再解壓 Openssl-0.9.7d-Win32.zip 並放在您的 apache 的 bin 下, 接下來得先開始設定您的 httpd.conf

找到 Listen 80 (不能註解掉喔, 至少知道你的網站是活的)
新增 Listen 443 (監聽 SSL)
找到 # BindAddress * 把註解拿掉(因為要開 VirtualHost )
找到 #LoadModule ssl_module modules/mod_ssl.so 把註解拿掉(要開 SSL 要靠這支 Modules 了)
找到 ClearModuleList 新增 AddModule mod_ssl.c 於最底下

03. 這裡預設您除了正常網站外同一個 IP 或 DomainName 上同時有 SSL 所以,
您除了設定您一般的網站路徑外 VirtualHost 也要一併設定

04. 以 Name-Based 為例, 其實用 IP-Base 也一樣, 其他請依實際安裝為準
記得這裡的設定一定要跟上邊的一樣, 不然你的主網頁會找不到喔

找到 #NameVirtualHost *:80 把註解拿掉(也可以改一下成 NameVirtualHost * 這個對單一 IP 比較好用)
<VirtualHost *:80>
ServerAdmin 您的email
DocumentRoot "/您網頁的實際路徑"
ServerName DomainName:80
ErrorLog logs/DomainName_error_log
CustomLog logs/DomainName_access_log common
</VirtualHost>

在最後面新增以下資料, 請依自己環境設定

SSLMutex sem
SSLRandomSeed startup builtin
SSLSessionCache none
SSLLog logs/SSL.log (紀錄檔自己設定)
SSLLogLevel info

<VirtualHost *:443>
ServerAdmin 您的email
DocumentRoot "/您網頁的實際路徑"
ServerName DomainName:443
ErrorLog logs/ssl_error_log
TransferLog logs/ssl_access_log

SSLEngine On
SSLCertificateFile conf/ssl.crt/server.crt
SSLCertificateKeyFile conf/ssl.key/server.key
SSLCertificateChainFile conf/ssl.crt/ca.crt
SSLCACertificatePath conf/ssl.crt
SSLCACertificateFile conf/ssl.crt/ca.crt
</VirtualHost>

到此已完成設定的基本工作了, 看了一下別把你的 ssl.conf 用上來喔
因為重頭到尾都只改 http.conf 而根本不需用到 ssl.conf 喔, 跟在 Apache 2.0.X 上是不一樣的

05. 接下來要開始製作認證的憑證準備階段, 雖然上一篇已寫過, 為求完整性我再 PO 一次

請切換至 Apache 的 bin 目錄下, 把您下載的 openssl.cnf 置於此
並修改一下 [ CA_default ] 內的內容如下(既然是懶人法請跟著做喔!!其他倒是無關緊要)

dir = ssl
certs = $dir\\certs
crl_dir = $dir\\crl
database = $dir\\index.txt
new_certs_dir= $dir

certificate = $dir\\cacert.pem
serial = $dir\\serial
crl = $dir\\crl.pem
private_key = $dir\\privkey.pem
RANDFILE = $dir\\privkey.rnd

附記: 如果您在第 13 項若出現錯誤的話請把下列此行註解, 再執行一次第 13 項就好了(建議先註解掉, 我上一篇也忘了交代 Sorry)
x509_extensions= x509v3_extensions


06. 依上述於 bin 目錄下新增一個 ssl 目錄

在 ssl 目錄內新增 index.txt 檔, 內容空白就好
在 ssl 目錄內新增 serial 檔, 內容請填 01 就好

07. 切換回 Apache 的 bin 目錄下吧!!
這裡我們要用命令提示字元 或 Win-DOS 視窗來設定, 所以為方便起見, 請設為 Apache 的 bin 目錄下
當然您要寫成 *.BAT 省在視窗下打那些重複執行的指令也行, 假設我們自己要發給自己 CA 認證
當然 CAroot 一定是自己並加簽給自己

08. 產生 CA Private Key -- 執行 openSSL genrsa -des3 -out ssl/ca.key 1024

1024 為使用 128-bit 加密, 並輸入您的安全密碼

09. 產生 CA Require 憑證需求 執行 openssl req -config openssl.cnf -new -key ssl/ca.key -out ssl/ca.csr

輸入您的申請書資料, 這裡的可以用 "." 來當無資料輸入使用, Domain 或 Websit 在這並無特殊指定輸入, 請依顯示輸入既可

10. 產生 CA Public Crt 憑證 -- 執行 openssl x509 -days 3650 -req -signkey ssl/ca.key -in ssl/ca.csr -out ssl/ca.crt

預設是 30 天過期, 3650 是約 10 年

11. 接下來, 我們要為自己的 Server 或是個人加簽憑證, 這裡以 Server 為例

產生 Server Private Key -- 執行 openSSL genrsa -out ssl/server.key 1024

這裡預設 Server Private Key 不設定安全密碼以免無人值守時電腦關機重開無法啟動 Apache (因為要密碼才能啟動)
這我倒沒在 Win32 試過, Unix-Like 鐵定會要求密碼

12. 產生 Server Require 憑證需求 -- 執行 openssl req -config openssl.cnf -new -key ssl/server.key -out ssl/server.csr

輸入您的申請書資料, 跟上邊的一樣, 不過這裡的 Domain 或 Websit 在這最好填入您的 DomainName 或 主機全名(Host.DomainName)

13. 產生 Server Public Crt 憑證 -- 執行 openssl ca -config openssl.cnf -days 3650 -cert ssl/ca.crt -keyfile ssl/ca.key -in ssl/server.csr -out ssl/server.crt

輸入您的 CA Private Key 安全密碼完成製作手續

14. 現在您的 ssl 目錄下已經有了必要的檔案, 接下來開始複製到所需的路徑下
請在 Apache 下之 conf 目錄下建 ssl.crt 與 ssl.key 這 2 個目錄

將 ca.crt 與 server.crt 複製至 conf/ssl.crt 下
將 server.key 複製至 conf/ssl.key 下

15. OK!!萬事具備了, 啟動您的 Apache 吧!! 不放心的話用 apache -t 看一下語法有無錯誤,如因第02項所產生的錯誤時, 請將 bin 底下的 libeay32.dll 與 ssleay32.dll 複製到上一層目錄(apache.exe 執行檔同目錄)
啟動後先用一般網頁(http://DomainName 或 http://Host.DomainName)開看看應該沒問題

16. 再來試試 Port 443 (http://DomainName:443 或 http://Host.DomainName:443) 應該會告訴你找不到網頁
這裡跟使用 Apache 2.0.X 是有點不同, 沒關係, 這是因為要使用的 Name-Base VirtualHost 模組沒載入產生的
所以您只能建構同一 IP 上使用 IP-Base 的 VirtualHost , 如果要全功能的話要重新 Compile Apache 了

這時您可以直接使用 https://DomainName 或 https://Host.DomainName 來進入 SSL 的網頁了(後面呢...自己認證吧!!)

19. 注意喔!!右下角的金鑰喔!!
因為您的電腦尚未取得 Server 的認證, 所以檢驗憑證時, 記得要安裝 Server 憑證(server.crt)喔!!
又因為 Server 的認證未經授權單位認可, 所以檢驗憑證時, 記得要安裝 CA 憑證(ca.crt)喔!!
您可以將 ca.crt 與 server.crt 公開給人下載安裝以取得擁有屬於您自己的實驗性網站的認證


20. 基本上最好是自己 Compile 來用問題會比較少一點, 因為寫這篇時懶了點且實際上我用不到所以稍加修改了一些
實驗一下的結果得出的經驗, 若有問題大部分是 Apache 本身使用的預設的內建模組沒 Compile 到, 這點是問題所在
希望各位有空也多多實驗一下或重新 Compile 再來 PO 你們的實驗結果相互交流

贊助商連結


pat6626
2004-06-05, 03:27 PM
最初由 ActionFire 發表
延續上一篇的懶人教學

上次呢提供的教學似乎對於 Apache 2.0.X 的使用者比較方便, 這次我們來做一下 Apache 1.3.X
這裡問題比較大一點的是, 預設因為僅 Compile 基本的功能模組所以有些註解的部分別輕易拿掉, 不然會開不起來的

同樣的話再說一次

您可以照著我做也沒關係, 每個人有每個人的做法看個人吧試試看就知

在Hunter (http://hunter.campbus.com/) 這裡可以找到已經編譯好的,視個人需要自行取用

以下列出最快的安裝方式供參考, 原理....自己看各套件的內文說明

安裝所需檔案
Apache_1.3.31-Mod_SSL_2.8.18-Openssl_0.9.7d-Win32
Openssl-0.9.7d-Win32.zip
openssl.cnf

01. 建議最好先裝 Apache 1.3.X 再來解壓縮 Apache_1.3.31-Mod_SSL_2.8.18-Openssl_0.9.7d-Win32,
記得解壓縮後修改路徑直接覆蓋原來安裝的檔案上(直接覆蓋升級), 建議備份您的設定檔(上一篇忘了交代了 Sorry)

02. 基本上您已經完成 Apache + mod_ssl 的安裝了, 嗯??為啥缺 openssl, 阿知!! 大概忘了放了吧
沒關係我們自己再解壓 Openssl-0.9.7d-Win32.zip 並放在您的 apache 的 bin 下, 接下來得先開始設定您的 httpd.conf

找到 Listen 80 (不能註解掉喔, 至少知道你的網站是活的)
新增 Listen 443 (監聽 SSL)
找到 # BindAddress * 把註解拿掉(因為要開 VirtualHost )
找到 #LoadModule ssl_module modules/mod_ssl.so 把註解拿掉(要開 SSL 要靠這支 Modules 了)
找到 ClearModuleList 新增 AddModule mod_ssl.c 於最底下

03. 這裡預設您除了正常網站外同一個 IP 或 DomainName 上同時有 SSL 所以,
您除了設定您一般的網站路徑外 VirtualHost 也要一併設定

04. 以 Name-Based 為例, 其實用 IP-Base 也一樣, 其他請依實際安裝為準
記得這裡的設定一定要跟上邊的一樣, 不然你的主網頁會找不到喔

找到 #NameVirtualHost *:80 把註解拿掉(也可以改一下成 NameVirtualHost * 這個對單一 IP 比較好用)
<VirtualHost *:80>
ServerAdmin 您的email
DocumentRoot "/您網頁的實際路徑"
ServerName DomainName:80
ErrorLog logs/DomainName_error_log
CustomLog logs/DomainName_access_log common
</VirtualHost>

在最後面新增以下資料, 請依自己環境設定

SSLMutex sem
SSLRandomSeed startup builtin
SSLSessionCache none
SSLLog logs/SSL.log (紀錄檔自己設定)
SSLLogLevel info

<VirtualHost *:443>
ServerAdmin 您的email
DocumentRoot "/您網頁的實際路徑"
ServerName DomainName:443
ErrorLog logs/ssl_error_log
TransferLog logs/ssl_access_log

SSLEngine On
SSLCertificateFile conf/ssl.crt/server.crt
SSLCertificateKeyFile conf/ssl.key/server.key
SSLCertificateChainFile conf/ssl.crt/ca.crt
SSLCACertificatePath conf/ssl.crt
SSLCACertificateFile conf/ssl.crt/ca.crt
</VirtualHost>

到此已完成設定的基本工作了, 看了一下別把你的 ssl.conf 用上來喔
因為重頭到尾都只改 http.conf 而根本不需用到 ssl.conf 喔, 跟在 Apache 2.0.X 上是不一樣的

05. 接下來要開始製作認證的憑證準備階段, 雖然上一篇已寫過, 為求完整性我再 PO 一次

請切換至 Apache 的 bin 目錄下, 把您下載的 openssl.cnf 置於此
並修改一下 [ CA_default ] 內的內容如下(既然是懶人法請跟著做喔!!其他倒是無關緊要)

dir = ssl
certs = $dir\\certs
crl_dir = $dir\\crl
database = $dir\\index.txt
new_certs_dir= $dir

certificate = $dir\\cacert.pem
serial = $dir\\serial
crl = $dir\\crl.pem
private_key = $dir\\privkey.pem
RANDFILE = $dir\\privkey.rnd

附記: 如果您在第 13 項若出現錯誤的話請把下列此行註解, 再執行一次第 13 項就好了(建議先註解掉, 我上一篇也忘了交代 Sorry)
x509_extensions= x509v3_extensions


06. 依上述於 bin 目錄下新增一個 ssl 目錄

在 ssl 目錄內新增 index.txt 檔, 內容空白就好
在 ssl 目錄內新增 serial 檔, 內容請填 01 就好

07. 切換回 Apache 的 bin 目錄下吧!!
這裡我們要用命令提示字元 或 Win-DOS 視窗來設定, 所以為方便起見, 請設為 Apache 的 bin 目錄下
當然您要寫成 *.BAT 省在視窗下打那些重複執行的指令也行, 假設我們自己要發給自己 CA 認證
當然 CAroot 一定是自己並加簽給自己

08. 產生 CA Private Key -- 執行 openSSL genrsa -des3 -out ssl/ca.key 1024

1024 為使用 128-bit 加密, 並輸入您的安全密碼

09. 產生 CA Require 憑證需求 執行 openssl req -config openssl.cnf -new -key ssl/ca.key -out ssl/ca.csr

輸入您的申請書資料, 這裡的可以用 "." 來當無資料輸入使用, Domain 或 Websit 在這並無特殊指定輸入, 請依顯示輸入既可

10. 產生 CA Public Crt 憑證 -- 執行 openssl x509 -days 3650 -req -signkey ssl/ca.key -in ssl/ca.csr -out ssl/ca.crt

預設是 30 天過期, 3650 是約 10 年

11. 接下來, 我們要為自己的 Server 或是個人加簽憑證, 這裡以 Server 為例

產生 Server Private Key -- 執行 openSSL genrsa -out ssl/server.key 1024

這裡預設 Server Private Key 不設定安全密碼以免無人值守時電腦關機重開無法啟動 Apache (因為要密碼才能啟動)
這我倒沒在 Win32 試過, Unix-Like 鐵定會要求密碼

12. 產生 Server Require 憑證需求 -- 執行 openssl req -config openssl.cnf -new -key ssl/server.key -out ssl/server.csr

輸入您的申請書資料, 跟上邊的一樣, 不過這裡的 Domain 或 Websit 在這最好填入您的 DomainName 或 主機全名(Host.DomainName)

13. 產生 Server Public Crt 憑證 -- 執行 openssl ca -config openssl.cnf -days 3650 -cert ssl/ca.crt -keyfile ssl/ca.key -in ssl/server.csr -out ssl/server.crt

輸入您的 CA Private Key 安全密碼完成製作手續

14. 現在您的 ssl 目錄下已經有了必要的檔案, 接下來開始複製到所需的路徑下
請在 Apache 下之 conf 目錄下建 ssl.crt 與 ssl.key 這 2 個目錄

將 ca.crt 與 server.crt 複製至 conf/ssl.crt 下
將 server.key 複製至 conf/ssl.key 下

15. OK!!萬事具備了, 啟動您的 Apache 吧!! 不放心的話用 apache -t 看一下語法有無錯誤
啟動後先用一般網頁(http://DomainName 或 http://Host.DomainName)開看看應該沒問題

16. 再來試試 Port 443 (http://DomainName:443 或 http://Host.DomainName:443) 應該會告訴你找不到網頁
這裡跟使用 Apache 2.0.X 是有點不同, 沒關係, 這是因為要使用的 Name-Base VirtualHost 模組沒載入產生的
所以您只能建構同一 IP 上使用 IP-Base 的 VirtualHost , 如果要全功能的話要重新 Compile Apache 了

這時您可以直接使用 https://DomainName 或 https://Host.DomainName 來進入 SSL 的網頁了(後面呢...自己認證吧!!)

19. 注意喔!!右下角的金鑰喔!!
因為您的電腦尚未取得 Server 的認證, 所以檢驗憑證時, 記得要安裝 Server 憑證(server.crt)喔!!
又因為 Server 的認證未經授權單位認可, 所以檢驗憑證時, 記得要安裝 CA 憑證(ca.crt)喔!!
您可以將 ca.crt 與 server.crt 公開給人下載安裝以取得擁有屬於您自己的實驗性網站的認證


20. 基本上最好是自己 Compile 來用問題會比較少一點, 因為寫這篇時懶了點且實際上我用不到所以稍加修改了一些
實驗一下的結果得出的經驗, 若有問題大部分是 Apache 本身使用的預設的內建模組沒 Compile 到, 這點是問題所在
希望各位有空也多多實驗一下或重新 Compile 再來 PO 你們的實驗結果相互交流


照著大哥的著作 又開始實驗
這次就比較順利了 不果有幾點疑惑
在03這一項中
如果我把以下二個註解拿掉 重RUN APACHE 就會出現無法找到此模組
但是我看路徑下 也把modules/mod_ssl.so放入啦
但是APACHE還是可以運作 所以我該如何ㄋ 不理會?
1.LoadModule ssl_module modules/mod_ssl.so A
2.ddModule mod_ssl.c
另外
在09項目中
要輸入資料 challenge password?
這是什麼意思ㄋ
謝謝大哥幫忙解答

ActionFire
2004-06-05, 09:29 PM
關於第02項導致的錯誤訊息
請將 bin 底下的 libeay32.dll 與 ssleay32.dll 複製到上一層目錄(apache.exe 執行檔同目錄)
或是複製到 win 的 system32 目錄下(不建議使用, 避免讓 win 會越來越肥大)

challenge password 公開使用憑證認證的話, 一般是不用密碼, 除非你不公開憑證認證(如要對傳私密資料會用到)

附註: 因為文章太長, 如要引言請引言部分內容就好

pat6626
2004-06-07, 11:14 AM
最初由 ActionFire 發表
關於第02項導致的錯誤訊息
請將 bin 底下的 libeay32.dll 與 ssleay32.dll 複製到上一層目錄(apache.exe 執行檔同目錄)
或是複製到 win 的 system32 目錄下(不建議使用, 避免讓 win 會越來越肥大)

challenge password 公開使用憑證認證的話, 一般是不用密碼, 除非你不公開憑證認證(如要對傳私密資料會用到)

附註: 因為文章太長, 如要引言請引言部分內容就好

又來請教大哥了
想確認一下
之前在加入Listen 443
是在Section 1的Listen項目
還是Section 2的Port項目中

經過大哥詳細的指導後
大致上 RUN起來 已經沒有錯誤訊息
憑證也都產生完成了
我昨天測試一下 ()
1.http://myweb.no-ip.com -->這樣是OK
2.http://myweb.no-ip.com:443 -->這樣也是OK (不過畫面右下角沒有KEY ICON)
3.https://myweb.no-ip.com -->這樣就出現 無法顯示網頁的錯誤?

我看了一下您的測試網頁 你放入了憑証供下載
請問 如果今天有別人要連到我的網站 她需要二個都下載並安裝嗎
如果下載並安裝後 連到我的HTTPS網頁是否就會出現右下角出現KEY 的ICON
P>S>目前我都沒有用到VirtualHost 我都是直接指Default 路徑

pat6626
2004-06-07, 05:03 PM
請問大哥 在04項目中
同一個網頁 如果要顯示80跟443 是否要設定二組VirtualHost
以下範例如您所設定
**********************************************
<VirtualHost *:80>
ServerAdmin 您的email
DocumentRoot "/您網頁的實際路徑"
ServerName DomainName:80
ErrorLog logs/DomainName_error_log
CustomLog logs/DomainName_access_log common
</VirtualHost>
這是我原本80網頁的內容對吧?
**********************************************
不過 這幾行是要在哪輸入ㄋ?
是在httpd.conf中的哪裡ㄋ?

SSLMutex sem
SSLRandomSeed startup builtin
SSLSessionCache none
SSLLog logs/SSL.log (紀錄檔自己設定)
SSLLogLevel info

**********************************************
這個VirtualHost是否為同一個網站不過是443 PORT的內容?

<VirtualHost *:443>
ServerAdmin 您的email
DocumentRoot "/您網頁的實際路徑"
ServerName DomainName:443
ErrorLog logs/ssl_error_log
TransferLog logs/ssl_access_log

SSLEngine On
SSLCertificateFile conf/ssl.crt/server.crt
SSLCertificateKeyFile conf/ssl.key/server.key
SSLCertificateChainFile conf/ssl.crt/ca.crt
SSLCACertificatePath conf/ssl.crt
SSLCACertificateFile conf/ssl.crt/ca.crt
</VirtualHost>

ActionFire
2004-06-07, 06:51 PM
忘了說 此篇用 IP-Base 為範例, 設定跟 Name-Base 會有些不一樣, 尤其是幾個地方要注意(因為使用同一 IP 建置)
BindAddress *
Listen port_number
Port port_number
NameVirtualHost *

Section 1的Listen項目 >> 如要設定 VirtualHost 的話 Listen 需加入使用對應的 Port
Section 2的Port項目 >> 不設定的話, 基本 Port 80 只給主網頁使用, 如有設定 VirtualHost 的話可將此項註解掉

正常情況下不管您是 IP-Base 或是 Name-Base 進入主網頁都會是正常的,
使用 port 443 連線會找不到網頁,因為 SSL handshake failed, 以致找不到 Client request 但紀錄檔會告訴你改用 HTTPS 連線

關於 root CA 的憑證因為只當替代性(最高審核機關), 所以基本上是為了好看(自己簽的沒紅XX)
實際應用時就跟財金公司一樣不過它們是要付費的(這個年費高且審核相當嚴格), 所以是可選擇性的,實際使用用不到, 因為大部分瀏覽器會內建多數認可的 root CA

至於 Server 憑證您可參考現有 IE 內之憑證內容說明(字太多嘍!!)與 SSL 相關書籍

janson168
2004-12-17, 01:18 PM
感謝大大,經過一番折騰..終於可以啟動apache了
並且整體跑都沒問題~~Thanks!

bojack
2005-03-19, 02:02 PM
謝謝ActionFire,你的文件實在是太棒了 ...

美中不足的是 openssl.cnf 我已經 download 不到了

後來是從 FreeBSD 上已經裝有 Apapche + SSL 的環境下複製下來用

也是可以用唷!真的真的很謝謝你的文件

smallder
2008-09-18, 02:39 AM
延續上一篇的懶人教學(已修改)

安裝所需檔案
Apache_1.3.31-Mod_SSL_2.8.18-Openssl_0.9.7d-Win32
Openssl-0.9.7d-Win32.zip
openssl.cnf



ActionFire大大,看到你的文章,學習到很多,感謝你的分享。
我目前還在使用1.3.*版的Apache,目前有需要想裝SSL。
花很多時間於網路上都找不到上列安裝所需檔案,請問你手邊還有留存以上的檔案嗎?
如果有,是否可以Email給我或是提供下載點供我下載?

感謝幫忙