首先简单介绍一下SSL会话的过程:
SSL会话的简化过程:
(1) 客户端发送可供选择的加密方式,并向服务器请求证书
(2) 服务器端发送证书及选定的加密方式给客户端
(3) 客户端去得证书并进行证书验证
如果信任给其发证书的CA:
(a) 验证证书的来源合法性:用CA的公钥解密证书上的数字签名
(b) 验证证书的内容合法性,完整性验证
(c) 检查证书的有效期限
(d) 检查证书是否被吊销
(e) 证书中拥有者的名字与访问的目标主机要一致
(4) 客户端生成临时会话密钥(对称密钥),并使用服务器端的公钥加密此数据发送给服务器,完成密钥交换
(5) 服务器用此密钥加密用户请求的资源,响应给客户端
需要注意的是SSL会话是基于IP地址创建的,所以单IP的主机上,仅可以使用一个https虚拟主机,不过实验环境可随意添加IP地址(ip addr add x.x.x.x/xx dev DEVICE)据说Linux下也有一个开源工具可以基于主机名创建多不个不同的https虚拟主机,不过配置起来没有那么容易。
配置http支持https的大致步骤如下:
(1) 为服务器申请数字证书
测试:通过私建CA发证书
(a) 创建私有CA
(b) 在服务器上创建证书签署请求
(c) CA签证
(2) 配置httpd支持使用ssl,及使用证书
~]# yum install -y mod_ssl
配置文件:/etc/httpd/conf.d/ssl.conf
DocumentRoot
ServerName
SSLCertificateFile
SSLCertificateKetFile
(3) 测试基于https访问相应的主机
~]# openssl s_clirnt [-connect host:port] [-cert filename] [-CApath directory] [-CAfile filename]
集体配置过程如下:
基本环境:
CA主机:
CentOS 6.9/192.168.119.135
提供http服务的主机:
CentOS 7.2/192.168.119.132
httpd-2.4.6(yum方式安装的默认版本)
期间,两个主机的防火墙都是关闭状态,SELinux也是disabled
首先创建一个CA,服务器端(提供http的主机)发起证书请求,由CA给其签证,得到证书后服务器即可配置实现https
在CA(CentOS 6.9/192.168.119.135)主机上创建CA
~]# cd /etc/pki/CA/
CA]# (umask 077;openssl genrsa -out private/key.pem 2048) #指明所创建的文件为当前目录下的private目录下名为key.pem,密钥长度为2048
CA]# touch index.txt #创建一个index.txt的文件
CA# echo 01 > serial #指定之后生成证书的编号从01开始
为自己创建自签证书
CA]# openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 730 #假设CA的有效期为2年,接下来的内容根据实际情况填即可,完毕,可查看当前目录下是否生成cacert.pem文件
CA]# ll #可看到已然生成cacert.pem,CA主机的CA创建完成,到提供http(CentOS 7.2/192.168.119.132)服务的主机生发起CA证书签署请求
切换到服务器(CentOS 7.2/192.168.119.132)上,发起CA证书签署请求
切换到/etc/httpd/目录,并创建ssl目录,#目录可以随意创建#并再切换到ssl目录下
~]# cd /etc/httpd/
httpd]# install -d ssl
httpd]# cd ssl
ssl]# (umask 077;openssl genrsa -out httpd.key 1024) #生成密钥,指明放在当前目录下,密钥长度为1024
ssl]# openssl req -new -key httpd.key -out httpd.csr #生证书签署请求文件,在此处也可使用-days 来指明时间,但证书可以使用时间最终由CA所决定,指不指都作用不大
需要注意的是,此时所填写的信息需与之前CA服务器上的一致,Server's name 为http服务器的域名,否则浏览器整会提示不一致
将csr文件发送到CA服务器
ssl]# scp httpd.csr root@192.168.119.135:/tmp/ #以root身份上传到CA服务器的/tmp目录下
此时切换到CA(CentOS 6.9/192.168.119.135)服务器上签署证书即可
CA]# openssl ca -in /tmp/httpd.csr -out certs/www.lushenle.com.crt -days 365 #证书有效期为一年
查看newcerts目录下是否生成了证书,若01.pem文件存在标明已经生成了证书,此时,将正说传给http服务器即可
CA]# scp certs/www.lushenle.com.crt root@192.168.119.132:/etc/httpd/ssl #
接下来接配置http服务器支持https服务
需要确认服务器是否支持ssl模块
~]# httpd -M | grep ssl #若不支持,需安装模块
~]# yum install -y mod_ssl
切换到/etc/httpd/conf.d/目录下,编辑ssl.conf文件,当然在编辑之前建议先备份一分
~]# cd /etc/httpd/conf.d/
conf.d]# cp ssl.conf{,.bak}
conf.d]# vim ssl.conf
DocumentRoot "/vhosts/lushenle/htdocs"
ServerName www.lushenle.com:443
<VirtualHost _default_:443> 改为:
<VirtualHost *:443> 或者 <VirtualHost 192.168.119.132:443>
SSLCertificateFile /etc/pki/tls/certs/localhost.crt 改为:
SSLCertificateFile /etc/httpd/ssl/www.lushenle.com.crt
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key 改为:
SSLCertificateKeyFile /etc/httpd/ssl/httpd.key
保存退出,开始测试