如何在CentOS配置Apache的HTTPS服務

Web服務器在默認狀況下使用HTTP,這是一個純文本的協議。正如其名稱所暗示的,純文本協議不會對傳輸中的數據進行任何形式的加密。而基於HTTP的Web服務器是很是容易配置,它在安全方面有重大缺陷。任何"中間人",經過精心防止的數據包嗅探器,是可以看到任何通過的數據包內容。更進一步,惡意用戶甚至能夠在傳輸路徑設置一個假冒的WEB服務器冒名頂替實際的目標Web服務器。在這種狀況下,最終用戶可能實際上與假冒者服務器,而不是真正的目的服務器進行通訊。這樣,惡意用戶能夠經過精心設計的表單欺騙終端用戶獲取到敏感信息,如用戶名密碼。html

爲了處理這些類型的漏洞,大多數供應商每每在他們的web服務器應用HTTPS協議。對於只讀類型的網站,用戶只能讀取內容,並無實際提交任何信息,HTTP仍然是一個可行的選擇。可是,對於保存敏感信息的網站,好比:用戶須要登陸來得到網站的服務,那麼HTTPS是必須的。 HTTPS可以爲一個網站提供如下能力。web

  • 確保全部通過服務器傳輸的數據包都是通過加密的。vim

  • 創建了一個官方數字證書證書,使得假冒服務器沒法冒充真正的服務器。安全

須要創建支持HTTPS的WEB服務器所要作的第一件事就是得到數字證書。數字證書能夠在如下任一方法來得到。bash

  1. 自簽名證書被推薦用於測試目的和我的項目。自簽名證書,也能夠用於服務提供商,不過通常適用於用戶互相信任的情形。另外,自簽名證書不用花錢購買。服務器

  2. 證書能夠由社區爲基礎的認證供應商如StartSSL和CACERT辦法。這些證書也不須要花錢,但建議爲我的項目。網絡

  3. 對於全球性商業網站,建議從值得信賴的知名證書頒發機構購買證書。這些證書須要花錢,但他們增長了網絡服務提供商的信譽。ide

準備

在這篇文檔中,咱們將使用自簽名證書。假設CentOS已經安裝了Apache Web服務器。咱們須要使用OpenSSL生成自簽名證書。若是還沒有安裝OpenSSL,它可使用yum來安裝。測試

# yum install mod_ssl openssl

生成一個自簽名證書

下面的命令能夠被用來產生一個自簽名的證書。首先,生成2048位的加密私鑰。網站

# openssl genrsa -out ca.key 2048

而後生成證書籤名請求(CSR)。

# openssl req -new -key ca.key -out ca.csr

13595105125_f2d3935539_z.jpg

最後,生成類型爲X509的自簽名證書。

# openssl x509 -req -days 365 -in ca.csr -signkey ca.key -out ca.crt

建立證書後,將文件複製到對應的目錄。

# cp ca.crt /etc/pki/tls/certs/ # cp ca.key /etc/pki/tls/private/ # cp ca.csr /etc/pki/tls/private/

配置Apache Web服務器

首先,修改下面的配置文件。

# vim /etc/httpd/conf.d/ssl.conf
### overwrite the following parameters ### SSLCertificateFile /etc/pki/tls/certs/ca.crt SSLCertificateKeyFile /etc/pki/tls/private/ca.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

而後從新啓動httpd服務使更改生效。

# service httpd restart

Web服務器如今可使用HTTPS了!

調整虛擬主機

Apache Web服務器能夠配置爲多個Web站點。這些站點在httpd的配置文件中以虛擬主機的形式定義。例如,讓咱們假設咱們的Apache Web服務器託管站點爲virtual-web.example.com,網站全部的文件都保存在/var/www/html/virtual-web目錄。
對於虛擬主機,典型的HTTP配置是這樣的。

# vim /etc/httpd/conf/httpd.conf
NameVirtualHost *:80 <VirtualHost *:80>     ServerAdmin email@example.com     DocumentRoot /var/www/html/virtual-web     ServerName virtual-web.example.com </VirtualHost>

咱們能夠參考上面的配置建立HTTPS虛擬主機。

# vim /etc/httpd/conf/httpd.conf
NameVirtualHost *:443 <VirtualHost *:443>     SSLEngine on     SSLCertificateFile /etc/pki/tls/certs/ca.crt     SSLCertificateKeyFile /etc/pki/tls/private/ca.key     <Directory /var/www/html/virtual-web>         AllowOverride All     </Directory>     ServerAdmin email@example.com DocumentRoot /var/www/html/virtual-web ServerName virtual-web.example.com </VirtualHost>

須要按照上面的配置,定義每一個虛擬主機。添加虛擬主機後,從新啓動Web服務。

# service httpd restart

如今的虛擬主機就可使用HTTPS了!

可選的配置:強制Apache Web服務器始終使用https

若是因爲某種緣由,你須要站點的Web服務器僅使用HTTPS,您須要將全部HTTP請求(端口80)重定向到HTTPS(端口443)。 Apache Web服務器能夠容易地作到這一點。

1,強制主站使用

若是要強制主站使用HTTPS,咱們能夠這樣修改httpd配置文件:

# vim /etc/httpd/conf/httpd.conf
ServerName www.example.com:80 Redirect permanent / https://www.example.com
# service httpd restart

2,強制虛擬主機

若是要強制在虛擬主機上使用HTTPS,對於HTTP能夠按照下面進行配置:

# vim /etc/httpd/conf/httpd.conf
<VirtualHost *:80>     ServerName virtual-web.example.com     Redirect permanent / https://virtual-web.example.com/ </VirtualHost>
# service httpd restart

綜上所述,當存在如用戶登陸等交互時HTTPS老是推薦的方式,能夠提升服務器的安全性。證書能夠經過各類方式得到,如:自簽名、社區提供的甚至商業機構夠哦買的。管理員應當謹慎選擇將要使用的證書的類型。

相關文章
相關標籤/搜索