HTTP 與 HTTPS 的差別 apache


HTTPS以保密為目標研發,簡單講是HTTP的安全版。其安全基礎是SSL協議,因此加密的詳細內容請看SSL。全稱Hypertext Transfer Protocol over Secure Socket Layer。

它是一個URI scheme,句法類同http:體系。它使用了HTTP,但HTTPS存在不同於HTTP的默認埠及一個加密/身份驗證層(在HTTP與TCP之間)。這個協議的最初研發由網景公司進行,提供了身份驗證與加密通訊方法,現在它被廣泛用於網際網路上安全敏感的通訊,例如交易支付方面。

和 HTTP 相比,最大的差異就是 HTTP 所有的東西都是直接透過明碼傳輸,如果被竊聽封包的話,可以輕易取得資料。而 HTTPS 有經過加密,因此即使被竊聽封包,也滿難取得封包內的資料。

所以現在要輸入信用卡卡號的網站,應該都是使用 HTTPS。而不少網站的登入頁面也改用 HTTPS 了。

SSL: SSl是為Http傳輸提供安全的協議,通過證書認證來確保客戶端和網站服務器之間的數據是安全。也就是說在SSL下http傳輸是安全的,我們成為 https.

http://blog.roodo.com/myroodo/archives/4219557.html
http://blog.ericsk.org/archives/215
http://www.pczone.com.tw/vbb3/thread/47/96241/
這兩個網站基本上說明的已經算很清楚,但對於Apache不熟悉的人,可能還有一些問題,因此把資料匯整一下。


(1)首先下載Apache的OpenSSL版本:


http://209.61.202.80/apache/Apache_2.2.3-Openssl_0.9.8d-Win32.zip


假設你把它安裝在D:\Apache2.2\目錄下
安裝時會詢問你domain name、server name與admin email
你輸入的內容會寫到httpd.conf檔案內 (d:\apache2.2\conf\httpd.conf)


httpd.conf是啟動Apache的主要設定檔案


(2)打開httpd.conf


將LoadModule ssl_module modules/mod_ssl.so前面的#去掉
將Include conf/extra/httpd-ssl.conf前面的#去掉
將httpd.conf存檔


(3)打開D:\apache2.2\conf\extra\httpd-ssl.conf


將#SSLMutex "file:D:/Apache2.2/logs/ssl_mutex"
改成SSLMutex none


並確認:


# General setup for the virtual host
DocumentRoot "D:/Apache2.2/htdocs"
ServerName your.server.com.tw:443
ServerAdmin your@email.com
ErrorLog "D:/Apache2.2/logs/error_log"
TransferLog "D:/Apache2.2/logs/access_log"


以上your.server.com是你的機器名稱,如果沒有domain name,可以用ip來代替


這個檔案主要是Apache開啟後,需要知道SSL的設定組態


(4)繼續看httpd.conf


SSLCertificateFile "D:/Apache2.2/conf/ssl/server.crt"


SSLCertificateKeyFile "D:/Apache2.2/conf/ssl/server.key"


如果不需要瀏覽端認證,以下可以不管他:


#SSLVerifyClient require
#SSLVerifyDepth 10


如果自發認證,以下可以不管他:


#SSLCertificateChainFile "D:/Apache2.2/conf/server-ca.crt"
#SSLCACertificatePath "D:/Apache2.2/conf/ssl.crt"
#SSLCACertificateFile "D:/Apache2.2/conf/ssl.crt/ca-bundle.crt"
#SSLCARevocationPath "D:/Apache2.2/conf/ssl.crl"
#SSLCARevocationFile "D:/Apache2.2/conf/ssl.crl/ca-bundle.crl"


修改完後將httpd.conf存檔


(5)要產生SSL所需要的key的前置動作


這個動作牽涉到幾個:
(a)Apache目錄下的/bin/openssl.exe
(b)Apache目錄下的/bin/openssl.cnf (不是openssl.conf喔)


打開openssl.cnf,看看內容:


[ CA_default ]
dir= ./ssl


你先在Apache目錄下的/bin/下建立ssl目錄
也就是有了 d:\apache2.2\bin\ssl,這個目錄放置SSL檔案
(6)在 d:\apache2.2\bin\ssl下建立一個空檔案
index.txt
(7)在 d:\apache2.2\bin\ssl下建立一個檔案serial,內容就輸入01
(不要副檔名喔)
所以目前d:\apache2.2\bin\ssl有兩個檔案: index.txt與serial
在d:\apache2.2\bin\ssl下再新建一個目錄newcerts

(8)產生SSL key
以dos command進到d:\apache2.2\bin
並以下面指令產生key(中間過程會要你輸入一些組態...自己看看...應該沒問題)
.\openssl.exe genrsa -des3 -out ssl/ca.key 1024
.\openssl.exe req -config ..\conf\openssl.cnf -new -key ssl/ca.key -out ssl/ca.csr
.\openssl.exe x509 -days 3650 -req -signkey ssl/ca.key -in ssl/ca.csr -out ssl/ca.crt
.\openssl.exe genrsa -out ssl/server.key 1024
.\openssl.exe req -config ..\conf\openssl.cnf -new -key ssl/server.key -out ssl/server.csr
.\openssl.exe ca -config ..\conf\openssl.cnf -days 3650 -cert ssl/ca.crt -keyfile ssl/ca.key -in ssl/server.csr -out ssl/server.crt

檢查你的d:\apache2.2\bin\ssl下
是否有了11個檔案及一個目錄 ,將整個ssl目錄copy到d:\apache2.2\conf下

(9)現在重新開啟Apache,應該已經可以用https://來開你的SSL
如果不能的話,看看d:\apache2.2\logs\error.log是哪裡出問題

關掉HTTP
#Listen 80

留言

這個網誌中的熱門文章

網路筆記 File Upload on PHP Server in Android

LA流浪記

杜拜