Site Loader

這兩天為了把家裏的Server加上SSL,費了不少時間。
由於之前一直是用Appserv這個套裝軟體,改過很多設定,
所以不想要重新安裝Apache含ssl的版本。
總之真是一波三折,我就直接紀錄過程吧。
一、預備檔案:
1. Apache_2.2.4-win32-openssl-0.9.8d.msi
2. OpenSSL-0.9.8d_win32.rar
3. openssl.cnf
在這裡說明一下,其實網路上之前的教學,大部分都是到http://hunter.campbus.com/
取得Apache-openssl.zip檔案,這樣就不需要安裝,可是我現在已經無法連到該網站,
只好抓Apache官方的msi安裝檔回來試試看。
重要的是注意1.和2.的openssl版本要相符,可以在Apache的伺服器上找到各種版本:
http://archive.apache.org/dist/httpd/binaries/win32/
二、安裝及複製Apache檔案:

  1. 執行Apache_openssl.msi,其實這就是在電腦上又多安裝了一個Apache伺服器,
    不過我們只是要它其中的一些檔案而已,所以用完之後可以馬上移除掉。
  2. 預設應該安裝在C:/Program Files/Apache Software Fundation/Apache2/,
    將Apache2/bin/底下的httpd.exe, ssleay32.dll, libeay32.dll複製到Appserv/Apache2.2/bin底下。
  3. 將Apache2/conf/extra/httpd-ssl.conf複製到Appserv/Apache2.2/conf/extra底下。

p.s. 記得先將Apache Service停止。
三、安裝Openssl、產生CA檔案:

  1. 將OpenSSL-0.9.8d_win32.rar解壓縮,以解壓縮至C:\Openssl為例,底下應該會有
    \bin, \include, \lib, \ssl四個資料夾和一個openssl.cnf檔。
  2. 用另外抓取的openssl.cnf(一、3.)覆蓋掉原本的。
  3. 用文字編輯器打開openssl.cnf,修改以下部份:

    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

    並且將x509extensions開頭的這一行註解掉。(前面加上#字號)

  4. 在C:\Openssl\下開啟新資料夾ssl,並在其中新增index.txt及serial兩個檔案,
    serial用文字編輯器打開,輸入01,index.txt保持空白。
  5. 將\bin底下的檔案複製一份到C:\Openssl\底下。(這是為了避免之後路徑的困擾)
  6. 進入命令列模式,依序執行以下動作:
    1. [1] openssl genrsa -des3 -out ssl/ca.key 1024
    2. [2] openssl req -config openssl.cnf -new -key ssl/ca.key -out ssl/ca.csr
    3. [3] openssl x509 -days 3650 -req -signkey ssl/ca.key -in ssl/ca.csr -out ssl/ca.crt
    4. [4] openSSL genrsa -out ssl/server.key 1024
    5. [5] openssl req -config openssl.cnf -new -key ssl/server.key -out ssl/server.csr
    6. [6] openssl ca -config openssl.cnf -days 3650 -cert ssl/ca.crt -keyfile ssl/ca.key -in ssl/server.csr -out ssl/server.crt

    其中[1]會要求設定密碼,[2]和[5]會要求輸入一些憑證的基本資料。
    如果有error多半是路徑錯誤,稍微檢查一下指令做修正即可。

  7. 將[6]產生的檔案(整個ssl資料夾)複製到C:/Appserv/Apache2.2/conf/底下。

四、修改httpd-ssl.conf:

  1. 打開C:\AppServ\Apache2.2\conf\extra\httpd-ssl.conf檔案,修改部份如下:

    DocumentRoot 網頁根目錄,比照httpd.conf下的DocumentRoot
    ServerName Server位址:443
    ServerAdmin Email
    ErrorLog logs/error_log
    TransferLog logs/access_log

    SSLCertificateFile conf/ssl/server.crt
    SSLCertificateKeyFile conf/ssl/server.key
    SSLCertificateChainFile conf/ssl/ca.crt

    將SSLMutex default註解掉,改為SSLMutex none

    將所有沒有用雙引號包起來的絕對路徑加上雙引號,例如:
    SSLSessionCache “shmcb:C:/AppServ/Apache2.2/logs/ssl_scache(512000)”
    SSLCertificateFile “C:/AppServ/Apache2.2/conf/ssl/server.crt”

    將< VirtualHost >的標注部份改為
    NameVirtualHost *:443
    < VirtualHost *:443 >

五、修改httpd.conf:

  1. 打開C:\AppServ\Apache2.2\conf\httpd.conf檔案,修改部份如下:

    把 LoadModule ssl_module modules/mod_ssl.so 的#註解拿掉
    把 Include conf/extra/httpd-ssl.conf 的#註解拿掉

六、重新啟動Apache:

  1. 如果啟動過程中沒有出現錯誤,可以連https://localhost測試看看,
    應該就會出現要求憑證的認證畫面了

p.s. 如果Apache啟動失敗,請檢查error.log確認是哪邊設定錯誤
大致上就是這樣囉,祝各位安裝順利。
參考資料:
在 AppServ 安裝 mod_ssl (Apache 2 版本) SSL (Secure Socket Layer) on Windows
Windows 下安裝設定 Apache2 + PHP5 + mod_ssl
【懶人教學】建構您的 Apache + SSL on Win32
Windows平台下Apache2.2.4的SSL配置过程(及错误整理)

Post Author: starshine