2009年5月15日 星期五

[Windows] 安裝 Apache with HTTPS (SSL) 、建立憑證 @ Windows XP

過去曾在 FreeBSD 4.10 的環境上安裝過 HTTPS 環境,細數起來已經是四、五年前的事了。最近一兩年,總在 Windows XP 的環境下,安裝 Apache HTTP Server 和 PHP 環境,用來開發簡單的網頁程式,但一直忘了,自己根本連 HTTPS 都還沒安裝過。前幾天,彷彿操起老本業,開始系統整合的工作,才想起該設定 HTTPS 的部分了,想著想著,一直以為用了 AppServ 就免痛,事實證明,我真的把 HTTPS 忘的一乾二淨了,無論是 AppServ 還是 Appache HTTP Server 皆要自行產生憑證,憑證就是用來提供加密連線的重要資訊,詳情可以多參考 RSA 演算法 啦。


最近開發時已經不用 AppServ ,反璞歸真般地,我開始只安裝需要的環境,即只安裝 Apache HTTP Server(including OpenSSL) + PHP 罷了。這次實作的環境是 Apache 2.2.11 + PHP 5.2.9-2 ,皆在 Windows XP with SP3 ,此篇跟 PHP 沒關係。


當晚處理完憑證試裝的結果,碰到第一個問題是 SSLPassPhraseDialog !搞到最後我才又想起 Skype 這賊賊軟體!它總是愛佔 Port ,第一次它就佔了 80 Port ,害我 HTTPD 跑不起來,這次很快地又想到它啦,但實在太久沒設定 HTTPS,所以不敢確定哪邊有錯,最後,由於很晚了,則是選擇隔天再到實驗室的電腦安裝。該台電腦沒有安裝 Skype ,才真正確定沒什麼大問題,但卻碰到第二個問題:sec_error_bad_signature!原先就知道自己產生的憑證沒有公信力,因此好心的瀏覽器都會提醒,詢問後再允許通過,如 Firefox 新增例外網站等,但這個訊息連新增例外都不行!所幸地,沒多久就在網路上找到答案,至少可以將錯誤訊息修成 sec_error_ca_cert_invalid ,這次就能新增成例外網站啦!


實作過程:



  1. 建立憑證

    • openssl genrsa -des3 -out server.key 2048

      openssl req -new -key server.key -out server.csr

      openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt

      openssl rsa -in server.key -out server.key

    • 以 Windows XP 為例,預設的 Apache HTTP Server 2.2.11 安裝目錄是 "C:\Program Files\Apache Software Foundation\Apache2.2",以該目錄為基準,簡寫為 "~\Apache2.2"

      • 所謂的 openssl 是在 "~\Apache2.2\bin\openssl.exe"

      • 上述部份指令執行時會說找不到 config 檔案,config 檔是在 "~\Apache2.2\conf\openssl.cnf" ,請多加參數 -config "~\Apache2.2\conf\openssl.cnf"

      • 我習慣切換到 "~\Apache2.2" 去執行上述指令,如 cmd mode 下執行 bin\openssl genrsa -des3 -out server.key 4096 ,碰到要增加 config 則用 -config conf\openssl.cnf 囉



    • 建立 server.key 時記得輸入一下密碼,該密碼後面還會詢問到。

    • 簡單的詢問範例,"()"內不用打,是簡單的敘述註解
      Country Name (2 letter code) [AU]:TW
      State or Province Name (full name) [Some-State]:Taiwan
      Locality Name (eg, city) []:YunLin Country (城市)
      Organization Name (eg, company) [Internet Widgits Pty Ltd]:CYY(組織,例如公司)
      Organizational Unit Name (eg, section) []:CYY (單位,例如公司部門等)
      Common Name (eg, YOUR name) []:localhost (主機的全名)
      Email Address []:cyy@localhost (信箱)

      Please enter the following 'extra' attributes
      to be sent with your certificate request
      A challenge password []:(可按Enter即可)
      An optional company name []:(可按Enter即可)



  2. 設定 Apache httpd.conf

    • 將上述產生的 server.key 跟 server.crt ,就直接擺到 "~\Apache2.2\conf" 即可(預設的憑證用的檔名跟位置)

    • 設定 httpd.conf

      • 打開 LoadModule ssl_module modules/mod_ssl.so 註解

      • 打開 Include conf/extra/httpd-ssl.conf

      • 基本上重新啟動 Apache 即可搞定囉!






最後,有任何問題請多看看 ~\Apache2.2\logs\error.log 或 ~\Apache2.2\logs\access.log ,這幫助很大的!


 


3 則留言:

  1. 您好 , 請問是否能讓我轉錄這篇文章至我個人部落格做為紀錄使用 ? , 部落格位址 http://magicmomo19-blog.logdown.com/ , 如部同意轉載請告知刪除 , 謝謝 !

    回覆刪除
  2. 你好,我已經照上面的方法做,大致都沒有問題。但我要如何知道已經變成HTTPS連線?

    回覆刪除