美文网首页
Apache Httpd 2.2实现https加密

Apache Httpd 2.2实现https加密

作者: KingFighting | 来源:发表于2017-10-11 13:36 被阅读0次

    本文将通过实验来实现https加密。主要内容如下:

    • https 简介以及与http的区别
    • SSL会话的简化过程
    • 实验实现https

    https 简介以及与http的区别

    https简介

    HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。HTTPS,即http over ssl,是HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。

    https和http区别

    超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息。HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此HTTP协议不适合传输一些敏感信息,比如信用卡号、密码等。
    为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS。为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。
    HTTPS和HTTP的区别主要为以下四点:
    一、https协议需要到ca申请证书,一般免费证书很少,需要交费。
    二、http是超文本传输协议,信息是明文传输,https 则是具有安全性加密传输协议。
    三、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
    四、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

    SSL会话的简化过程

    一、客户端发送可供选择的加密方式,并向服务器请求证书。
    二、服务器端发送证书以及选定的加密方式给客户端,这个证书是用CA的私钥加密的服务器的公钥以及证书的有效期等信息,也就是CA数字签名的证书。
    三、客户端取得证书并进行证书验证
    如果信任给服务器发证书的CA,客户端会实验得到CA的公钥

    1. 验证证书来源的合法性;用CA的公钥解密证书上数字签名
    2. 验证证书的内容的合法性:完整性验证
    3. 检查证书的有效期限
    4. 检查证书是否被吊销
    5. 证书中拥有者的名字,与访问的目标主机要一致

    四、客户端生成临时会话密钥(对称密钥),并使用服务器端的公钥加密此数据发送给服务器,完成密钥交换。
    五、 服务用此密钥加密用户请求的资源,响应给客户端。

    实验实现https

    下面是实验的拓扑图。



    基本要实现的功能大致可以从图中获取,这里不再仔细介绍。直接进行实验。

    环境准备

    准备4台虚拟机。
    A:系统是centos7.3,IP地址是192.168.1.7,充当CA,负责给websrv颁发证书;
    B:系统是centos6.9,IP地址是192.168.1.6,充当websrv,供客户端访问,需要向CA证书颁发者申请证书,websrv的站点是www.a.com
    C:系统是centos7.3,IP地址是192.168.1.8,充当DNS,负责向client解析域名;
    D:系统是centos7.3,IP地址是192.168.1.14,是client,DNS设置为192.168.1.8,用于最终访问websrv。

    实验过程

    一、在C上搭建 DNS

    1. 安装相关包,并启动服务
      yum install bind
      systemctl start named
      systemctl enable named
    
    1. 修改/etc/named.conf中的两行
      listen-on port 53 { localhost; };
      allow-query     { any; };
    
    1. /etc/named.rfc1912.zones中添加
      zone "a.com" IN {
            type master;
            file "a.com.zone";
      };
    
    1. 创建区域数据库
    vim /var/named/a.com.zone
    $TTL 1D
    @               IN SOA  dns1.a.com. admin.a.com. (
                                    2017101015 ; serial
                                    86400      ; refresh (1 day)
                                    3600       ; retry (1 hour)
                                    604800     ; expire (1 week)
                                    10800      ; minimum (3 hours)
                                    )
                            NS      dns1.a.com.
    dns1                    A       192.168.1.8
    websrv                  A       192.168.1.6
    www                     CNAME   websrv
    
    1. 语法检查以及重启服务
      named-checkconf
      named-checkzone  "a.com"  /var/named/a.com.zone
      systemctl restart named
    
    1. 客户端测试
      # 在D上面,把dns改为192.168.1.8,ping测试
      [root@centos7 ~]# ping www.a.com
      PING websrv.a.com (192.168.1.6) 56(84) bytes of data.
      64 bytes from 192.168.1.6 (192.168.1.6): icmp_seq=1 ttl=64 time=0.309 ms
      64 bytes from 192.168.1.6 (192.168.1.6): icmp_seq=2 ttl=64 time=0.345 ms
    

    二、在A上搭建CA

    1. 创建私钥文件
      cd /etc/pki/CA
      (umask 066; openssl genrsa -out private/cakey.pem 4096)
    
    1. 利用私钥文件生成自签名证书
      openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3650
      # 填写的信息如下
            Country Name (2 letter code) [XX]:CN
            State or Province Name (full name) []:henan
            Locality Name (eg, city) [Default City]:zhengzhou
            Organization Name (eg, company) [Default Company Ltd]:magedu.com
            Organizational Unit Name (eg, section) []:Opt
            Common Name (eg, your name or your server's hostname) []:ca.magedu.com
            Email Address []:
     # 查看签名证书的内容
      openssl x509 -in  cacert.pem -noout -text
    
    1. 创建数据库文件以及序列号文件
      touch index.txt
      echo 00 > serial
    

    三、在B上加载https模块以及申请证书

    1. 安装SSL模块
      一般系统都是安装httpd,所以只要安装https模块就可以了。
      yum install mod_ssl
      service httpd reload   # 安装完之后需要重新加载httpd服务
      [root@centos6 ~]#httpd -M | grep ssl
      Syntax OK
      ssl_module (shared)
    
    1. 申请证书
      cd /etc/httpd/conf.d/
      mkdir ssl;cd ssl
      # 创建私钥文件
      (umask 066; openssl genrsa -out httpd.key 1024)
      # 利用私钥生成证书申请文件
      openssl req -new -key httpd.key -out httpd.csr
      # 填写信息如下
                Country Name (2 letter code) [XX]:CN
                State or Province Name (full name) []:henan
                Locality Name (eg, city) [Default City]:luoyang
                Organization Name (eg, company) [Default Company Ltd]:magedu.com
                Organizational Unit Name (eg, section) []:opt
                Common Name (eg, your name or your server's hostname) []:*.a.com
                Email Address []:
    
                Please enter the following 'extra' attributes
                to be sent with your certificate request
                A challenge password []:
                An optional company name []:
      # 提交证书申请文件
      scp httpd.csr 192.168.1.7:/etc/pki/CA/
    

    四、A向B颁发证书

      cd /etc/pki/CA
      # 生成证书文件
      openssl ca -in httpd.csr -out certs/httpd.crt -days 300
      # 将证书发送给B(websrv)
      scp certs/httpd.crt 192.168.1.6:/etc/httpd/conf.d/ssl/
      # 将自签名证书发送给B
      scp cacert.pem 192.168.1.6:/etc/httpd/conf.d/ssl/
      # 将自签名证书发送给D(client)
      scp cacert.pem 192.168.1.14:
    

    五、在B上使用证书,以及实现HSTS
    HSTS:HTTP Strict Transport Security。服务器端配置支持HSTS后,会在给浏览器返回的HTTP首部中携带HSTS字段。浏览器获取到该信息后,会将所有HTTP访问请求在内部跳转到HTTPS。

      # 修改/etc/httpd/conf.d/ssl.conf文件中的三行
      SSLCertificateFile      /etc/httpd/conf.d/ssl/httpd.crt
      SSLCertificateKeyFile   /etc/httpd/conf.d/ssl/httpd.key
      SSLCACertificateFile    /etc/httpd/conf.d/ssl/cacert.pem
      # http重定向https,创建/etc/httpd/conf.d/test.conf,内容如下
        Header always set Strict-Transport-Security "max-age=15768000"
        RewriteEngine on
        RewriteRule ^(/.*)$ https://%{HTTP_HOST}$1 [redirect=301]
      # 重新加载http服务
      service httpd reload
    

    六、在D上测试
    在D(client)上面,向火狐浏览器中导入证书cacert.pem,访问测试一下。
    http://www.a.com
    https://www.a.com
    用上面两个都是可以的,最终效果图如下:


    至此,https的简单实现介绍完毕,不足之处,请多指正。

    相关文章

      网友评论

          本文标题:Apache Httpd 2.2实现https加密

          本文链接:https://www.haomeiwen.com/subject/kzmbyxtx.html