Apache配置HTTPS訪問

介紹:

HTTPS協議是加密後的HTTP協議,瀏覽器和伺服器間的通訊被加密傳輸,有效的防止了網頁劫持並保護了使用者的資料安全。HTTPS加密會使用到SSL證書,本例中使用OpenSSL這個開源軟體來生成SSL證書做測試用。網站正式上線後需去專門的CA機構申請SSL證書,自己生成的證書是不被瀏覽器信任的。

安裝軟體:

[root@localhost ~]# yum install -y openssl       //安裝OpenSSL軟體包用於生成SSL證書,此軟體包通常已隨系統預設安裝。
[root@localhost ~]# yum install -y httpd         //安裝Apache。
[root@localhost ~]# yum install -y mod_ssl       //安裝Apache的SSL加密模組。

生成證書:

使用OpenSSL在/etc/httpd/ssl目錄下生成一個自簽名證書(儲存位置隨意)。

[root@localhost ~]# mkdir /etc/httpd/ssl       //建立SSL儲存資料夾
[root@localhost ~]# openssl req -newkey rsa:2048 -nodes -keyout /etc/httpd/ssl/ssl.key -x509 -days 365 -out /etc/httpd/ssl/ssl.crt       //生成SSL證書檔案

隨後程式會依次要求輸入所在的國家、地區、城市等等的資訊,因為我們是做測試用的,這裡全部直接回車即可。但是在下圖中紅色箭頭所指的位置上要填上啟用HTTPS的站點的域名,否則客戶端瀏覽器可能會因為簽名域名和站點實際域名不同而斷開連結。

檢視剛剛生成的證書。

[root@localhost ~]# ls /etc/httpd/ssl/

其中,.crt檔案是證書檔案,.key檔案是私鑰檔案。

Apache配置部分:

配置Apache的ssl.com子配置檔案,此配置檔案必須是安裝過mod_ssl模組才會有。

[root@localhost ~]# vim /etc/httpd/conf.d/ssl.conf

我看到網上很多教程說,在修改/etc/httpd/conf.d/ssl.conf子配置檔案前還要在/etc/httpd/conf/httpd.conf主配置檔案中引入mod_ssl模組。這裡特殊說明一下,在CentOS 6.5下/etc/httpd/conf.d/ssl.conf子配置檔案中就已經引入了mod_ssl模組,不需要再另外引入,另外,此配置檔案中也預設開啟了對443埠(HTTP使用80埠傳輸,HTTPS使用443埠傳輸)的監聽。

本例中修改成如下圖所示,“*”代表監聽所有IP地址,虛擬主機所使用的域名必須使用DNS伺服器解析到Apache伺服器的IP上。

在105行和112行找到下圖中的選項,將這輛個選項的引數修改為證書檔案及私鑰檔案的儲存位置。

建立網站首頁檔案。

[root@localhost ~]# echo 'hello,world!' > /var/www/html/index.html

如果在啟用HTTPS訪問的同時還要禁止HTTP訪問可以做如下修改。

編輯Apache主配置檔案。

[root@localhost ~]# vim /etc/httpd/conf/httpd.conf

方法1:暴力修改法。

轉到第136行左右位置將監聽80埠的選項直接禁用掉,這將會影響主配置檔案中所有的虛擬主機。

修改後如圖。

方法2:將需要禁用HTTP訪問的虛擬主機配置資訊刪掉即可,如下圖就是一個監聽80埠(HTTP使用80埠)的虛擬主機配置資訊。

最後,儲存配置檔案,並在保證防火牆及selinux均已關閉的情況下重啟Apache。

[root@localhost ~]# service httpd restart

測試:

此時,透過HTTP協議已無法訪問網站。

HTTPS協議正常訪問網站,但瀏覽器會提示證書錯誤,因為是自簽證書所以並不會被瀏覽器所信任,此處可不予理會。