首先简单介绍一下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

  保存退出,开始测试

     

posted on 2017-11-25 15:44  卢伸乐  阅读(5797)  评论(0编辑  收藏  举报