一:SSL会话的简化过程

    (1) 客户端发送可供选择的加密方式,并向服务器请求证书;

    (2) 服务器端发送证书以及选定的加密方式给客户端;

    (3) 客户端取得证书并进行证书验正:

         如果信任给其发证书的CA:

              (a) 验正证书来源的合法性;用CA的公钥解密证书上数字签名;

              (b) 验正证书的内容的合法性:完整性验正

              (c) 检查证书的有效期限;

              (d) 检查证书是否被吊销;

              (e) 证书中拥有者的名字,与访问的目标主机要一致;

    (4) 客户端生成临时会话密钥(对称密钥),并使用服务器端的公钥加密此数据发送给服务器,完成密钥交换;

    (5) 服务用此密钥加密用户请求的资源,响应给客户端;

注意:SSL会话是基于IP地址创建;所以单IP的主机上,仅可以使用一个https虚拟主机

二:配置httpd支持https

(1) 为服务器申请数字证书;

     测试:通过私建CA发证书

          (a) 创建私有CA

          (b) 在服务器创建证书签署请求

          (c) CA签证

    (2) 配置httpd支持使用ssl,及使用的证书;

     # yum -y install mod_ssl

     配置文件:/etc/httpd/conf.d/ssl.conf

          DocumentRoot

          ServerName

          SSLCertificateFile

          SSLCertificateKeyFile

    (3) 测试基于https访问相应的主机;

         # openssl s_client [-connect host:port] [-cert filename] [-CApath directory] [-CAfile filename]

三: 实验过程:

       (1)创建CA证书

        #(umask 077;openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)

        #touch /etc/pki/CA/index.txt

        #echo 01 >/etc/pki/CA/serial    

        #openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out cacert.pem -days 7300

        //切换到httpd服务主机

        #mkdir /etc/httpd/certs

        #(umask 077;openssl genrsa -out /etc/httpd/ssl/httpd.key 2048)

        #openssl req -new -x509 -key -out /etc/httpd/ssl/httpd.csr 

        //证书文件发送到CA主机

        #scp /etc/httpd/ssl/httpd.csr root@199.100.77.132:/tmp

        #openssl ca -in /tmp/httpd.csr -out /etc/pki/CA/certs/www.zenghui.wang.crt -days 365

        #scp  /etc/pki/CA/certs/www.zenghui.wang.crt 199.100.77.135:/etc/httpd/certs



针对Apache httpd软件默认配置中:

httpd软件默认没有使用ssl模块,需要安装相应的模块程序包

[root@www certs]# yum install mod_ssl -y

[root@www ~]# rpm -qa mod_ssl

mod_ssl-2.2.15-39.el6.centos.x86_64

安装之后会在/etc/httpd/conf.d/目录下生成ssl.conf的配置文件,我们配置https就在此文件中配置:

配置ssl.conf文件,重要配置都在下面文件中了:

[root@www conf.d]#vim  /etc/httpd/conf.d/ssl.conf

LoadModule ssl_module modules/mod_ssl.so

Listen 443

<VirtualHost 172.16.31.31:443>

         DocumentRoot"/web/vhosts/www2"

         ServerName www2.stu31.com:443

         SSLEngineon

         SSLCertificateFile /etc/httpd/certs/httpd.crt

         SSLCertificateKeyFile /etc/httpd/certs/httpd.key

</VirtualHost>

测试文件语法:

[root@www conf.d]# httpd -t

Syntax OK

重启httpd服务

[root@www conf.d]# service httpd restart

Stopping httpd:                                           [  OK  ]

Starting httpd:                                           [  OK  ]

查看服务监听端口:

[root@www conf.d]# ss -tunl |grep 443

tcp   LISTEN     0      128                   :::443                  :::*

到windows端进行测试:

先将CA服务器的证书安装进windows中;将cacert.pem发送到windows中,改名cacert.crt,安装证书: