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协议正常访问网站,但浏览器会提示证书错误,因为是自签证书所以并不会被浏览器所信任,此处可不予理会。