1. 程式人生 > >Apache 使用ssl模組配置HTTPS

Apache 使用ssl模組配置HTTPS

               

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

為了處理這些型別的漏洞,大多數供應商往往在他們的web伺服器應用HTTPS協議。對於只讀型別的網站,使用者只能讀取內容,並沒有實際提交任何資訊,HTTP仍然是一個可行的選擇。但是,對於儲存敏感資訊的網站,比如:使用者需要登入來獲得網站的服務,那麼HTTPS是必須的。 HTTPS能夠為一個網站提供以下能力。

  • 確保所有經過伺服器傳輸的資料包都是經過加密的。

  • 建立了一個官方數字證書證書,使得假冒伺服器無法冒充真正的伺服器。

需要建立支援HTTPS的WEB伺服器所要做的第一件事就是獲得數字證書。數字證書可以在以下任一方法來獲得。

  1. 自簽名證書被推薦用於測試目的和個人專案。自簽名證書,也可以用於服務提供商,不過一般適用於使用者互相信任的情形。另外,自簽名證書不用花錢購買。

  2. 證書可以由社群為基礎的認證供應商如StartSSL和CACERT辦法。這些證書也不需要花錢,但建議為個人專案。

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

1. 準備

在這篇文件中,我們將使用自簽名證書。假設CentOS已經安裝了Apache Web伺服器。我們需要使用OpenSSL生成自簽名證書。如果尚未安裝OpenSSL,它可以使用yum來安裝。

# yum install mod_ssl openssl

安裝完畢後,會自動生成 /etc/httpd/conf.d/ssl.conf 檔案,下文配置會用到!

2. 生成一個自簽名證書

下面的命令可以被用來產生一個自簽名的證書。

首先,生成2048位的加密私鑰

# openssl genrsa -out server.key 2048

然後,生成證書籤名請求(CSR),這裡需要填寫許多資訊,如國家,省市,公司等

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

最後,生成型別為X509的自簽名證書。有效期設定3650天,即有效期為10年

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

生成金鑰流程如下圖,供參考

use-ssl-httpd-module-configuration-https

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

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

3. 配置Apache Web伺服器

首先,修改下面的配置檔案。僅需配置紅色部分 SSLCertificateFile 和 SSLCertificateKeyFile

# vim /etc/httpd/conf.d/ssl.conf

### overwrite the following parameters ###SSLCertificateFile /etc/pki/tls/certs/server.crtSSLCertificateKeyFile /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

然後,重新啟動httpd服務使更改生效

# service httpd restart           // 或者  /etc/init.d/httpd restart

Web伺服器現在可以使用HTTPS

4. 調整虛擬主機

Apache Web伺服器可以配置為多個Web站點。這些站點在httpd的配置檔案中以虛擬主機的形式定義。例如,讓我們假設我們的Apache Web伺服器託管站點為proxy.mimvp.com,網站所有的檔案都儲存在/var/www/html/virtual-web目錄。對於虛擬主機,典型的HTTP配置是這樣的。

# vim /etc/httpd/conf/httpd.conf

NameVirtualHost *:80

<VirtualHost *:80>    ServerAdmin [email protected]    DocumentRoot /var/www/html/virtual-web    ServerName proxy.mimvp.com</VirtualHost>

我們可以參考上面的配置建立HTTPS虛擬主機。

# 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 protected] /var/www/html/virtual-webServerName proxy.mimvp.com</VirtualHost>

需要按照上面的配置,定義每個虛擬主機。新增虛擬主機後,重新啟動Web服務。

# service httpd restart

現在的虛擬主機就可以使用HTTPS

5. 強制Apache Web伺服器始終使用https

如果由於某種原因,你需要站點的Web伺服器都只使用HTTPS,此時就需要將所有HTTP請求(埠80)重定向到HTTPS(埠443)。 Apache Web伺服器可以容易地做到這一點。

1,強制主站所有Web使用全域性站點

如果要強制主站使用HTTPS,我們可以這樣修改httpd配置檔案:

# vim /etc/httpd/conf/httpd.conf

ServerName www.example.com:80Redirect permanent / https://www.example.com

重啟Apache伺服器,使配置生效:

# service httpd restart

2,強制虛擬主機單個站點

如果要強制單個站點在虛擬主機上使用HTTPS,對於HTTP可以按照下面進行配置:

# vim /etc/httpd/conf/httpd.conf

<VirtualHost *:80>    ServerName proxy.mimvp.com    Redirect permanent / https://proxy.mimvp.com/</VirtualHost>

重啟Apache伺服器,使配置生效:

# service httpd restart

一般情況下,由於瀏覽器會自動攔截https未被認證的網址,因此建議同時保留 http://proxy.mimvp.com 和 https://proxy.mimvp.com ,或者購買權威的認證服務,讓使用者瀏覽器信任https瀏覽訪問。

米撲部落格例項:

綜上所述,當存在如使用者登入,付款交易等互動時推薦HTTPS方式,可以提高伺服器的安全性。

證書可以通過各種方式獲得,如:自簽名、社群提供的甚至商業機構夠哦買的。管理員應當謹慎選擇將要使用的證書的型別。