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