为了处理这些类型的漏洞,大多数供应商往往在他们的web服务器应用HTTPS协议。对于只读类型的网站,用户只能读取内容,并没有实际提交任何信息,HTTP仍然是一个可行的选择。但是,对于保存敏感信息的网站,比如:用户需要登录来获得网站的服务,那么HTTPS是必须的。 HTTPS能够为一个网站提供以下能力。
-
确保所有经过服务器传输的数据包都是经过加密的。
-
建立了一个官方数字证书证书,使得假冒服务器无法冒充真正的服务器。
需要建立支持HTTPS的WEB服务器所要做的第一件事就是获得数字证书。数字证书可以在以下任一方法来获得。
- 自签名证书被推荐用于测试目的和个人项目。自签名证书,也可以用于服务提供商,不过一般适用于用户互相信任的情形。另外,自签名证书不用花钱购买。
-
证书可以由社区为基础的认证供应商如StartSSL和CACERT办法。这些证书也不需要花钱,但建议为个人项目。
-
对于全球性商业网站,建议从值得信赖的知名证书颁发机构购买证书。这些证书需要花钱,但他们增加了网络服务提供商的信誉。
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
生成密钥流程如下图,供参考
创建证书后,将文件复制到对应的目录。
# cp server.crt /etc/pki/tls/certs/
# cp server.key /etc/pki/tls/private/
# cp server.csr /etc/pki/tls/private/
3. 配置Apache Web服务器
1、首先,修改下面的配置文件。仅需配置红色部分SSLCertificateFile和SSLCertificateKeyFile
# vim /etc/httpd/conf.d/ssl.conf
### overwrite the following parameters ###
SSLCertificateFile /etc/pki/tls/certs/server.crt
SSLCertificateKeyFile /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
2、其次,修改端口号,将httpd.conf中Listen 80 这项给注释掉
# vim /etc/httpd/conf.d/httpd.conf
#Listen 80
3、在次,在httpd.conf导入配置文件
Include conf.d/ssl.conf
Include conf.d/vhost/*.conf
4、最后,配置虚拟主机,让http和https共存
在 /etc/httpd/conf.d/vhost/ 目录下建立虚拟主机配置文件,
如:lamp1.com使用https,如下配置:
NameVirtualHost *:443
<VirtualHost *:443>
DocumentRoot /www/lamp1
ServerName localhost
ServerAlias www.lamp1.com lamp1.com
SSLEngine on
SSLCertificateFile /etc/pki/tls/certs/server.crt
SSLCertificateKeyFile /etc/pki/tls/private/server.key
<Directory "/webdata/www/lamp1">
Options FollowSymLinks
AllowOverride all
Order allow,deny
Allow from all
</Directory>
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)-htm-(.*)$ .PHP?
RewriteRule ^(.*)/simple/([a-z0-9\_]+\.html)$ /simple/index.PHP?
</IfModule>
</VirtualHost>
@H_290_404@ 如:lamp2.com使用http,如下配置:
Listen 80
@H_290_404@ NameVirtualHost *:80 <VirtualHost *:80>
DocumentRoot /www/lamp2
ServerName localhost
ServerAlias www.lamp2.com lamp2.com
<Directory "/webdata/www/lamp1">
Options FollowSymLinks
AllowOverride all
Order allow,deny
Allow from all
</Directory>
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)-htm-(.*)$ .PHP?
RewriteRule ^(.*)/simple/([a-z0-9\_]+\.html)$ /simple/index.PHP?
</IfModule>
</VirtualHost>
然后,重新启动httpd服务使更改生效
# service httpd restart // 或者 /etc/init.d/httpd restart
Web服务器现在可以同时使用HTTPS和HTTP
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:80
Redirect permanent / https://www.example.com
重启Apache服务器,使配置生效:
# service httpd restart
2,强制虚拟主机(单个站点)
如果要强制单个站点在虚拟主机上使用HTTPS,对于HTTP可以按照下面进行配置:
<VirtualHost *:80>
ServerName proxy.mimvp.com
Redirect permanent / https://proxy.mimvp.com/
</VirtualHost>
单个站点全部使用HTTPS,则http://proxy.mimvp.com会强制重定向跳转到https://proxy.mimvp.com
一般情况下,由于浏览器会自动拦截https未被认证的网址,因此建议同时保留http://proxy.mimvp.com和https://proxy.mimvp.com,或者购买权威的认证服务,让用户浏览器信任https浏览访问。