Web服務(wù)器在默認(rèn)情況下使用HTTP,這是一個(gè)純文本的協(xié)議。正如其名稱所暗示的,純文本協(xié)議不會(huì)對傳輸中的數(shù)據(jù)進(jìn)行任何形式的加密。而基于HTTP的Web服務(wù)器是非常容易配置,它在安全方面有重大缺陷。任何”中間人”,通過精心防止的數(shù)據(jù)包嗅探器,是能夠看到任何經(jīng)過的數(shù)據(jù)包內(nèi)容。更進(jìn)一步,惡意用戶甚至可以在傳輸路徑設(shè)置一個(gè)假冒的WEB服務(wù)器冒名頂替實(shí)際的目標(biāo)Web服務(wù)器。在這種情況下,最終用戶可能實(shí)際上與假冒者服務(wù)器,而不是真正的目的服務(wù)器進(jìn)行通信。這樣,惡意用戶可以通過精心設(shè)計(jì)的表單欺騙終端用戶獲取到敏感信息,如用戶名密碼。
為了處理這些類型的漏洞,大多數(shù)供應(yīng)商往往在他們的web服務(wù)器應(yīng)用HTTPS協(xié)議。對于只讀類型的網(wǎng)站,用戶只能讀取內(nèi)容,并沒有實(shí)際提交任何信息,HTTP仍然是一個(gè)可行的選擇。但是,對于保存敏感信息的網(wǎng)站,比如:用戶需要登錄來獲得網(wǎng)站的服務(wù),那么HTTPS是必須的。 HTTPS能夠?yàn)橐粋€(gè)網(wǎng)站提供以下能力。
需要建立支持HTTPS的WEB服務(wù)器所要做的第一件事就是獲得數(shù)字證書。數(shù)字證書可以在以下任一方法來獲得。
自簽名證書被推薦用于測試目的和個(gè)人項(xiàng)目。自簽名證書,也可以用于服務(wù)提供商,不過一般適用于用戶互相信任的情形。另外,自簽名證書不用花錢購買。
證書可以由社區(qū)為基礎(chǔ)的認(rèn)證供應(yīng)商如StartSSL和CACERT辦法。這些證書也不需要花錢,但建議為個(gè)人項(xiàng)目。
對于全球性商業(yè)網(wǎng)站,建議從值得信賴的知名證書頒發(fā)機(jī)構(gòu)購買證書。這些證書需要花錢,但他們增加了網(wǎng)絡(luò)服務(wù)提供商的信譽(yù)。
1. 準(zhǔn)備
在這篇文檔中,我們將使用自簽名證書。假設(shè)CentOS已經(jīng)安裝了Apache Web服務(wù)器。我們需要使用OpenSSL生成自簽名證書。如果尚未安裝OpenSSL,它可以使用yum來安裝。
# yum install mod_ssl openssl
安裝完畢后,會(huì)自動(dòng)生成 /etc/httpd/conf.d/ssl.conf 文件,下文配置會(huì)用到!
2. 生成一個(gè)自簽名證書
下面的命令可以被用來產(chǎn)生一個(gè)自簽名的證書。
首先,生成2048位的加密私鑰
# openssl genrsa -out server.key 2048
然后,生成證書簽名請求(CSR),這里需要填寫許多信息,如國家,省市,公司等
# openssl req -new -key server.key -out server.csr
最后,生成類型為X509的自簽名證書。有效期設(shè)置3650天,即有效期為10年
# openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt
生成密鑰流程如下圖,供參考
創(chuàng)建證書后,將文件復(fù)制到對應(yīng)的目錄。
# cp server.crt /etc/pki/tls/certs/
# cp server.key /etc/pki/tls/private/
# cp server.csr /etc/pki/tls/private/
3. 配置Apache Web服務(wù)器
首先,修改下面的配置文件。僅需配置紅色部分 SSLCertificateFile 和 SSLCertificateKeyFile
# vim /etc/httpd/conf.d/ssl.conf
### overwrite the following parameters ###
SSLCertificateFile /etc/pki/tls/certs/server.crt
SSLCertificateKeyFile /etc/pki/tls/private/server.key
### The following parameter does not need to be modified in case of a self-signed certificate. ###
### If you are using a real certificate, you may receive a certificate bundle. The bundle is added using the following parameters ###
SSLCertificateChainFile /etc/pki/tls/certs/example.com.ca-bundle
然后,重新啟動(dòng)httpd服務(wù)使更改生效
# service httpd restart // 或者 /etc/init.d/httpd restart
Web服務(wù)器現(xiàn)在可以使用HTTPS
4. 調(diào)整虛擬主機(jī)
Apache Web服務(wù)器可以配置為多個(gè)Web站點(diǎn)。這些站點(diǎn)在httpd的配置文件中以虛擬主機(jī)的形式定義。例如,讓我們假設(shè)我們的Apache Web服務(wù)器托管站點(diǎn)為proxy.mimvp.com,網(wǎng)站所有的文件都保存在/var/www/html/virtual-web目錄。
對于虛擬主機(jī),典型的HTTP配置是這樣的。
# vim /etc/httpd/conf/httpd.conf
NameVirtualHost *:80
<VirtualHost *:80>
ServerAdmin email@example.com
DocumentRoot /var/www/html/virtual-web
ServerName proxy.mimvp.com
</VirtualHost>
我們可以參考上面的配置創(chuàng)建HTTPS虛擬主機(jī)。
# vim /etc/httpd/conf/httpd.conf
NameVirtualHost *:443
<VirtualHost *:443>
SSLEngine on
SSLCertificateFile /etc/pki/tls/certs/server.crt
SSLCertificateKeyFile /etc/pki/tls/private/server.key
<Directory /var/www/html/virtual-web>
AllowOverride All
</Directory>
ServerAdmin email@example.com
DocumentRoot /var/www/html/virtual-web
ServerName proxy.mimvp.com
</VirtualHost>
需要按照上面的配置,定義每個(gè)虛擬主機(jī)。添加虛擬主機(jī)后,重新啟動(dòng)Web服務(wù)。
# service httpd restart
現(xiàn)在的虛擬主機(jī)就可以使用HTTPS
實(shí)例見米撲代理: http://www.tjdsmy.cn
5. 強(qiáng)制Apache Web服務(wù)器始終使用https
如果由于某種原因,你需要站點(diǎn)的Web服務(wù)器都只使用HTTPS,此時(shí)就需要將所有HTTP請求(端口80)重定向到HTTPS(端口443)。 Apache Web服務(wù)器可以容易地做到這一點(diǎn)。
1,強(qiáng)制主站所有Web使用(全局站點(diǎn))
如果要強(qiáng)制主站使用HTTPS,我們可以這樣修改httpd配置文件:
# vim /etc/httpd/conf/httpd.conf
ServerName www.tjdsmy.cn:80
Redirect permanent / http://www.tjdsmy.cn
重啟Apache服務(wù)器,使配置生效:
# service httpd restart
2,強(qiáng)制虛擬主機(jī)(單個(gè)站點(diǎn))
如果要強(qiáng)制單個(gè)站點(diǎn)在虛擬主機(jī)上使用HTTPS,對于HTTP可以按照下面進(jìn)行配置:
# vim /etc/httpd/conf/httpd.conf
<VirtualHost *:80>
ServerName proxy.mimvp.com
Redirect permanent / http://www.tjdsmy.cnlandui.com/
</VirtualHost>
重啟Apache服務(wù)器,使配置生效:
# service httpd restart
單個(gè)站點(diǎn)全部使用HTTPS,則 http://www.tjdsmy.cnlandui.com/ 會(huì)強(qiáng)制重定向跳轉(zhuǎn)到 http://www.tjdsmy.cnlandui.com/
一般情況下,由于瀏覽器會(huì)自動(dòng)攔截https未被認(rèn)證的網(wǎng)址,因此建議同時(shí)保留 http://www.tjdsmy.cnlandui.com/ 和 http://www.tjdsmy.cnlandui.com/ ,或者購買權(quán)威的認(rèn)證服務(wù),讓用戶瀏覽器信任https瀏覽訪問。