配置httpd工作于https模型下具实现步骤:使用的httpd服务器IP为192.168.1.132。

(1) 安装mod_ssl模块

# yum install -y mod_ssl

安装该模块后生成的主要文件有:

# rpm -ql mod_ssl

wKiom1PnZbnxIajLAAD7K7nGTDs686.jpg

其中/etc/httpd/conf.d/ssl.conf为配置文件。

(2) 为服务端生成私钥,并为其提供证书;

因为是模拟测试使用https的,需要自建CA服务器为httpd服务器下发服务器端证书,所以需要先建立CA服务器,并建立私钥:

# cd /etc/pki/CA

#(umask 077;openssl genrsa –out private/cakey.pem 2048)

wKioL1PnZ4Ljj9VKAADWZrx0pFw167.jpg

CA服务器自身生成的私钥文件为cakey.pem:

wKioL1PnZ9WjmF4bAACRk7I7W64944.jpg

然后生成自签证书:

# openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3000

wKiom1PnaACxR87hAALDNktPGrI523.jpg

可以在/etc/pki/CA目录下看到生成的自签证书文件:

wKioL1PnaZiT6MjnAAEjwr-84nY032.jpg

初始化CA服务器,生成证书签署时用的serial和index.txt文件:

# cd /etc/pki/CA

# touch serial index.txt

为httpd服务器端生成签署证书文件,步骤:

# mkdir /etc/httpd/ssl && cd /etc/httpd/ssl

# (umask 077; openssl genrsa -out httpd.key 1024);生成私钥;

# openssl req -new -key httpd.key -out httpd.csr;生成证书签署请求文件

CA服务器为httpd服务器签署证书:

# openssl ca -in httpd.csr -out httpd.crt -days 1000

签署后的证书为:/etc/httpd/ssl/httpd.crt

(3) 配置使用https的虚拟主机,假定我们的虚拟主机名称为www2.stuX.com;

修改配置文件/etc/httpd/conf.d/ssl.conf

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

指定SSLCertificateFile和SSLCertificateKeyFile文件所在的具体路径:

wKioL1PncFnQ2lifAAEZqek9KOg777.jpg

在<VirtualHost IP:443>段中添加需要使用https模型的主机名称和对应的文档根目录:

wKiom1Pnc0CRHwSjAADJcGiEY8s667.jpg

(4) 重新装载配置 # service httpd restart

(5) 将CA服务器的公钥/etc/pki/CA目录下的cacert.pem文件导出到其他系统中,比如window操作系统中,将文件的后缀改为crt,然后导入到浏览器中测试:

wKioL1PndW-x-qqNAAC3F_r7gtM794.jpg

可以看到httpd服务器已经工作于https模型下,而且证书出于认证状态。

另外我们可以使用Linux系统自带的openssl s_client工具来测试,需要将公钥文件复制到测试机上:

# scp 192.168.1.132:/etc/pki/CA/cacert.pem ./

wKiom1Pnd1qjr28BAAD5w-ECzQk421.jpg

# openssl s_client -connect 192.168.1.132:443 -CAfile /root/cacert.pem

wKioL1PneVjyg-01AACeQCc826g034.jpg

可以看到,返回的结果说明,我们的服务器工作在https模型下工作正常。

注:如果在httpd的主配置文件中设置同一虚拟主机工作在http模型下也是可以的,两种模式共存,使用http和https都可以访问站点的资源,如果只在监听了443端口基于ssl模式工作的虚拟主机定义中定义了该虚拟主机,那么只能使用https方式访问。

在一个物理主机中如果同时运行多个虚拟主机,由于ssl会话是基于IP地址建立的,所以物理主机有几个IP地址,相应的就只能有几个虚拟主机使用ssl功能。