您的位置:首页 > 理论基础 > 计算机网络

在Linux中实现https访问web站点

2012-08-22 20:07 411 查看
一、基础知识:

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

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

1)、Apache

2)、Microsoft iis

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、网络中需要一台CA服务器,还需一台web服务器,为了实验的方便,CA和WEB都建立在一台主机上。

2、在主机上,首先要架构一个CA。需要产生私钥、证书。

3、在架构一台web服务器需要产生私钥、证书的申请、申请到的证书。

4、客户机使用https://www.zzu.edu.cn来访问,需要安装信用的CA证书。

配置方案如下:

挂载光盘,并安装apache服务器









编辑/etc/pki/tls/openssl.cnf文件





根据openssl.cnf文件的说明,需要创建三个目录:certs newcerts crl 和两个文件:index.txt serial新建需要的目录和文件,都是用来存放CA的相关信息的





创建CA证书的初始序列号为01,





CA证书服务器生成自己的私钥cakey.pem,





将88行到90 行的match改为optional,否则和CA在同一个国家、省份、组织的主机才能从CA获得证书。

这样所有的用户都可以申请证书了。









在httpd.conf文件中添加默认选项的内容,方便申请证书时的快速填写:





CA申请自己的证书:





需要修改私钥和证书的权限,这两个文件是保密的。





CA服务器已经架设完成!

web服务器的配置如下:

在WWW服务器上新建文件夹/etc/httpd/certs,用来存放服务器的私钥,请求,以及证书





产生需要的私钥





根据私钥产生证书申请文件





向CA申请需要证书,有了证书请求文件才可以。





修改私钥、申请证书、证书文件的权限,





由于客户端使用https访问web服务器时,需要借助mod_ssl来完成。

安装mod_ssl模块





打开产看ssl的目录,并编辑/etc/httpd/conf.d/ssl.conf文件











重新启动httpd服务





这样web端的配置就做好了。

使用 一个pc机来访问web站点:





缺少的信任证书信息









在web服务器端重新编辑/etc/httpd/conf.d/ssl.conf,打开证书链,指向CA的证书所在的位置





再次用客户机访问站点,安装来自CA的证书









为实验的方便性,不再建设DNS服务器了,直接修改PC机的host文件。





再次访问站点,成功了。




本文出自 “时大伟的博客” 博客,请务必保留此出处http://shdw1999.blog.51cto.com/5558851/970258
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: