Apache Httpd 2.2实现https加密


本文将通过实验来实现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

下面是实验的拓扑图。


Apache Httpd 2.2实现https加密_第1张图片

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

环境准备

准备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
用上面两个都是可以的,最终效果图如下:

Apache Httpd 2.2实现https加密_第2张图片

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

你可能感兴趣的:(Apache Httpd 2.2实现https加密)