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

下面是实验的拓扑图。



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

环境准备

准备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的简单实现介绍完毕,不足之处,请多指正。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349

推荐阅读更多精彩内容