在Linux中实现https访问web站点

一、基础知识:

    web本意是蜘蛛网和网的意思。现广泛译作网络、互联网等技术领域。表现为三种形式,即超文本(hypertext)、超媒体(hypermedia)、超文本传输协议(HTTP)等。

1、WEB服务器种类: news.netcrfat.com 最常用的调查网站;
    1)、Apache

    2)、Microsoft

    3)、Nginx Linux;

    4)、Google

2、apache支持MPM(多道处理模块):

其出现的目的是让apache server有着更强的实用性和能够更好的与它所依赖的平台的特性进行交互并能够实现快速响应用户的一种机制;apache中的MPM有多种,其中最著名的有以下两种:

  1)、worker 每一个请求用一个线程响应;在一个进程中创建多个线程,用每一个线程去响应用户的请求;
进程有多个执行流;每个流就称为一个线程;线程也是CPU资源分配的单位;线程可以共享同一个进程;线程是进程的子单位,响应速度优于进程,但是当线程去改变一个文件时,其它线程就不能访问该文件了,就是说当文件正在被线程写入时是不能被读的(有写锁和读锁控制,缺点是会出现锁竞争; 
linix线程和进程是不明显区分开的,所以线程响应速度并不比进程快;
进程靠自己生成的子进程中的各个线程来响应用户请求;
但是线程稳定性较差,如果一个用户请求导致一个线程崩溃,容易产生连动效应导致其它线程同时崩溃;
定义进程能打开最多的线程数;
   2)、prefork 每一个请求用一个进程响应,默认apche用此种机制;
先定义生成一定数量的空闲进程;用户请求来后直接将空闲进程拿来用;多余的空闲进程由父进程收回;
MAXSpare 定义最多空闲进程多少个;
MINSpare 定义最少空闲进程多少个;
MaxClient 定义最大的客户端请求个数;
prefork 稳定性极佳;
module 模块的装载是基于DOS(Dynamic Shared Object动态共享对象)实现;
nginx 一个进程同时响应多个用户的请求,基于事件驱动实现,不靠线程实现,占用内存较小,效率极高;

3、HTTPS简介:

HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。
HTTPS主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。

4、SSL简介:

SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密。 SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。

5、SSL 协议的验证的具体过程:

SSL 的握手协议非常有效的让客户和服务器之间完成相互之间的身份认证,其主要过程如下:

① 浏览器发送一个连接请求给安全服务器。
② 服务器将自己的证书,以及同证书相关的信息发送给客户浏览器。证书中包括标识、公钥、发证机关、防伪标识;
③ 客户利用服务器传过来的信息验证服务器的合法性,服务器的合法性包括:证书是否过期,发行服务器证书的 CA 是否可靠,发行者证书的公钥能否正确解开服务器证书的“发行者的数字签名”,服务器证书上的域名是否和服务器的实际域名相匹配。如果合法性验证没有通过,通讯将断开;如果合法性验证通过,将继续进行第四步。
④ 用户端随机产生一个用于后面通讯的“对称密码”K,然后用服务器的公钥(服务器的公钥从步骤②中的服务器的证书中获得)对其加密,然后将加密后的“预主密码”传给服务器。
⑤ 如果服务器要求客户的身份认证(在握手过程中为可选),用户可以建立一个随机数然后对其进行数据签名,将这个含有签名的随机数和客户自己的证书以及加密过的“预主密码”一起传给服务器。
⑥ 如果服务器要求客户的身份认证,服务器必须检验客户证书和签名随机数的合法性,具体的合法性验证过程包括:客户的证书使用日期是否有效,为客户提供证书的 CA 是否可靠,发行 CA 的公钥能否正确解开客户证书的发行 CA 的数字签名,检查客户的证书是否在证书废止列表(CRL)中。检验如果没有通过,通讯立刻中断;如果验证通过,服务器将用自己的私钥解开加密的“预主密码”,然后执行一系列步骤来产生主通讯密码(客户端也将通过同样的方法产生相同的主通讯密码)。
⑦ 服务器和客户端用相同的主密码即“通话密码”,一个对称密钥用于 SSL 协议的安全数据通讯的加解密通讯。同时在 SSL 通讯过程中还要完成数据通讯的完整性,防止数据通讯中的任何变化。
⑧ 客户端向服务器端发出信息,指明后面的数据通讯将使用的步骤⑦中的主密码为对称密钥,同时通知服务器客户端的握手过程结束。
⑨ 服务器向客户端发出信息,指明后面的数据通讯将使用的步骤⑦中的主密码为对称密钥,同时通知客户端服务器端的握手过程结束。
⑩ SSL 的握手部分结束,SSL 安全通道的数据通讯开始,客户和服务器开始使用相同的对称密钥进行数据通讯,同时进行通讯完整性的检验。

二、案例 - 1

1、实验说明:

在一个企业网中有一台web站点,为了实现访问的安全性,公司要求使用https访问web站点,并实现身份验证;

2、拓扑图:

3、拓扑说明:

在本实验中,我们在公司web站点上创建CA服务器,来使web站点获取证书;

4、实验要求:

    1)、用户访问web站点需要进行身份验证;

    2)、当用户访问web站点时,web站点是需要出示证书;

    3)、禁止使用http来访问web站点;

5、环境搭建:

使用Red Hat Enterprise Linux 5.4平台;

6、实验步骤:

1)、在Linux建立一个证书服务器(CA);

  <1>编辑CA的主配置文档:

允许外部站点获取证书:

更改证书产生时的初始配置:

  <2>创建证书服务器必要的三个目录,两个文件:

  <3>给serial一个证书发布的初始序列号:

  <4>产生CA服务器自己的私钥:

  <5>保护CA私钥的安全性,改变私钥文件的权限:

  <6>使用CA的私钥来产生CA自己的证书:

2)、建立web站点,并从CA申请证书;

  <1>、挂载光盘:

[root@localhost ~]# mount /dev/cdrom /mnt/cdrom

mount: block device /dev/cdrom is write-protected, mounting read-only

[root@localhost ~]#

  <2>、安装httpd:

[root@localhost ~]# cd /mnt/cdrom/Server/

[root@localhost Server]# rpm -ivh httpd-2.2.3-31.el5.i386.rpm

warning: httpd-2.2.3-31.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186

Preparing...                ########################################### [100%]

   1:httpd                  ########################################### [100%]

[root@localhost Server]#

  <3>、安装ssl的相应的一个模块:

  <4>在web站点主目录中创建一个证书目录(用于存放证书):

  <5>在web站点上生成一个属于web站点的私钥:

  <6>通过web站点的私钥来产生一个证书请求:

  <7>通过证书请求来获取web站点自己的证书:

  <8>保护证书的安全性,改变相应文件的权限:

3)编辑web站点的配置文档;

  <1>编辑http的主配置文档:

[root@localhost ~]# vim /etc/httpd/conf/httpd.conf

取消监听80端口:

开启身份验证:

  <2>、编辑http相应的ssl安全套接字配置文件:

指明监听端口:

指明证书存放位置:

指明私钥存放位置:

4)、设置web站点的身份验证

  <1>创建并编辑身份验证文件:

  <2>创建web站点登录用户:

5)、启动httpd服务:

7、验证测试:

1)、在客户端hosts文件中添加一条本地dns记录:(便于测试)

2)、访问https://www.shanghai.com,t弹出安全警报;

3)、获得web站点初始的证书

4)、查看证书信息:

5)、当客户机获取证书后,页面弹出登录页面:

6)、输入用户信息后,成功登录:

8、实验小结:

正式由于HTTPS能够建立一个信息安全通道,来保证数据传输的安全和可以确认网站的真实性等特性,所以在对于安全要求比较高的企业网中HTTPS是被广泛应用的;