這兩天為了把家裏的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配置过程(及错误整理)
創作者介紹

天晴天雨,星映月。

Starshine 發表在 痞客邦 PIXNET 留言(10) 人氣()


留言列表 (10)

發表留言
  • Ray
  • 好物!! 補充小細節

    感謝Startshine提供具體的解法.經過測試成功.補上幾個小細節.

    1. 要把C:/Program...../Apache2/modules/底下的mod_ssl.so複製到C:/Appserv/Apache2.2/modules底下.
    2. 在編輯openssl.cnf時要注意"\\",不可以少打成"\",不然後面編輯CA檔案時,會有錯誤.
    3.在產生CA檔案的第六個步驟,會有兩個問題[y/n],都要選y.不然產生的server.crt會出錯,變成空檔案(Empty).
    4.修改httpd-ssl.conf的部分,關於將<VirtualHost>的標註....,作者講的是直接把原本的 <VirtualHost _default_:443> 字串刪除. 然後加上
    NameVirtualHost *:443
    <VirtualHOst *:443>
  • 謝謝您的補充!:)

    Starshine 於 2010/05/10 11:01 回覆

  • bigbite
  • 您好, 想請問一下這篇文章能否借我轉錄呢? 會附上來源網址的! 謝謝
  • 你好,本部落格的文章採用CC授權,歡迎轉錄喔:)

    Starshine 於 2008/10/16 18:19 回覆

  • poujason
  • 我一直遇到這個問題

    error while loading serial number
    2892:error:02001002:system library:fopen:No such file or directory:.\crypto\bio\
    bss_file.c:352:fopen('sslserial','rb')
    2892:error:20074002:BIO routines:FILE_CTRL:system lib:.\crypto\bio\bss_file.c:35
    我做到利用OPENSSL指令最後一段的時候都會出現這個錯誤,我不知道該怎麼來解決,麻煩您指導我一下,感謝。
  • poujason
  • 我知道了 我把 \加成\\就可以了。感謝感謝
  • jamce
  • 沒有任畫面

    請問
    我已依照步驟執行,也成功啟動Apache,但是我的opneSSL並沒有起來,執行https://localhost並沒有出現要求憑證的認證畫面,而是出現『查無此網站的安全性憑證撤銷資訊,要繼續?』。按檢視憑證,則顯示『信任憑證授權單位無法確認這個憑證』
    請問會是哪裡出錯呢?
  • cherry
  • 我一直遇到這個問題

    error while loading serial number
    2892:error:02001002:system library:fopen:No such file or directory:.\crypto\bio\
    bss_file.c:352:fopen('sslserial','rb')
    2892:error:20074002:BIO routines:FILE_CTRL:system lib:.\crypto\bio\bss_file.c:35
    我做到OPENSSL指令最後一段的時候都會出現這個錯誤,我不知道該怎麼來解決,麻煩您指導我一下,thanks。
  • openssl.cnf這個檔案中的
    x509extensions這一行要註解掉喔!
    也參考看看4樓poujason的經驗喔:)

    Starshine 於 2010/05/10 11:06 回覆

  • 颱風
  • httpd-ssf.conf

    我現在做到:
    將Apache2/conf/extra/httpd-ssl.conf複製到Appserv/Apache2.2/conf/extra底下。

    我在extra folder裏找不到httpd-ssl.conf這个file呀! 只在default folder裏找到一个相似的檔案httpd-ssl.conf.in,是這个吗?
  • 請問你所安裝的apache是哪一個版本呢?

    Starshine 於 2010/05/10 11:05 回覆

  • bruce
  • 現在一直跑不起來發生
    Illegal attempt to re-initialise SSL for server (theoretically shouldn't happen!)
    我想請問一下該怎麼解決?
  • 參考 http://www.crazysquirrel.com/computing/debian/apache-mod_ssl.jspx
    似乎有可能是 SSL 的啟動設定與 VirtualHost 的互動問題
    看看把 SSL 設定移到 VirtualHost 裡面是否能解決你的問題?

    Starshine 於 2012/04/16 10:06 回覆

  • tutu
  • 請問,我都按照上面的流程做過一遍,Apache重啟也沒問題,但是在瀏覽器上用https://localhost/時的結果是無法顯示網頁,這是什麼問題呢?能否為我解答,謝謝。
    Apache版本 2.5.10
  • 那如果連一般的http://localhost/看得到網頁嗎?如果可以的話,應該就是設定檔有出問題。可以在命令列模式底下用netstat -an看一下有沒有在listen 443 port。也可以看一下apache的access.log和error.log,才好判斷是什麼問題。: )

    Starshine 於 2012/11/29 14:00 回覆

  • tutu
  • 您好....,測試之後在http://localhost/底下可以看的到網頁,但443 port 似乎沒被開啟,設定上我該從何處著手呢?謝謝。
  • 請查看 httpd.conf 中除了 Listen 80 以外, 是否有加上 Listen 443 ?
    若沒有的話請加上這行後再試試看.

    Starshine 於 2012/11/30 10:52 回覆

找更多相關文章與討論