Apache站点安全

身份验证

身份验证又称“验证”、“鉴权”,是指通过一定的手段,完成对用户身份的确认。

身份验证的目的是确认当前所声称为某种身份的用户,确实是所声称的用户。在日常生活中,身份验证并不罕见,比如,通过检查对方的证件,我们一般可以确信对方的身份。“身份验证”更多地被用在计算机、通信等领域。身份验证的方法有很多,在计算机领域中基本上可分为:基于共享密钥的身份验证和基于公开密钥加密算法的身份验证。

基于共享密钥的身份验证是指服务器端和用户共同拥有一个或一组密码。当用户需要进行身份验证时,用户通过输入或通过保管有密码的设备提交由用户和服务器共同拥有的密码。服务器在收到用户提交的密码后,检查用户所提交的密码是否与服务器端保存的密码一致,如果一致,就判断用户为合法用户。如果用户提交的密码与服务器端所保存的密码不一致时,则判定身份验证失败。

基于公开密钥加密算法的身份验证是指通信中的双方分别持有公开密钥和私有密钥,由其中的一方采用私有密钥对特定数据进行加密,而对方采用公开密钥对数据进行解密,如果解密成功,就认为用户是合法用户,否则就认为是身份验证失败。使用基于公开密钥加密算法的身份验证的服务有:SSL、数字签名等等。

实验一:Linux下实现基于共享密钥身份验证

实验环境:www Server操作系统为RedhatEnterprise Linux AS v5.4

                    www 服务由Apache 2.2.3提供

                    Client操作系统为WindowsXP

需求描述:实现客户端对web服务访问需要通过身份验证

实验拓扑:

一、安装Apache

rpm  -ivh  /mnt/cdrom/Server/httpd-2.2.3-31.el5.i386.rpm

安装完成后生成的配置文件为/etc/httpd/conf/httpd.conf,下面就是来通过修改这个配置文件来操纵Apache的各种功能了

二、创建用户

编辑配置文件

281   DocumentRoot   "/var/www/html"   /////指明站点的根目录

399   AccessFileName   .htaccess  /////这里指明访问控制文件的名称和位置

还要修改下面这个选项

327  AllowOverride  all      /////它控制哪些指令可以被放置在.htaccess文件中

修改完之后就要去建立.htaccess文件和存放账号的文件了

三、测试

 

 

 

 

来源控制

简单的说就是依据访问者的一些唯一的属性来定义其是否具有访问权限

实验二:Linux下实现访问者的来源控制

实验环境:参照实验一需求描述:实现服务器对客户端的来源进行筛选,不允许IP地址为192.168.2.120的主机进行web访  问(在实验一的前提下进行)

实验拓扑:参照实验一

实验步骤:

一、实现实验一的各个步骤

二、修改配置文件/etc/httpd/conf/httpd.conf

以上是修改根目录/var/www/html参数,这三句话的匹配顺序为先允许后拒绝,则除了192.168.2.120之外都能访问,匹配顺序很重要,修改完成后要重启一下服务。

三、测试

换一台IP地址为192.168.2.121的主机试试:

 

 

 

 

 

HTTPS(全称:HypertextTransfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单的说就是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL它是一个URI scheme(抽象标识符体系),句法类同http:体系。用于安全的HTTP数据传输。https:URL表明它使用了HTTP,但HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTPTCP之间)。这个系统提供了身份验证与加密通讯方法,现在它被广泛应用于网络上安全敏感的通讯,例如电子银行、交易支付等方面。

HTTPS实际上应用了Netscape的安全套接层(SSL)作为HTTP应用层的子层,HTTPS使用端口443,而不是像HTTP那样使用端口80来和TCP/IP进行通信。SSL使用40 位关键字作为RC4流加密算法,这对于商业信息的加密是合适的。HTTPSSSL支持使用X.509数字认证,如果需要的话用户可以确认发送者是谁。也就是说它的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。

采用https的服务器必须从CA Certificate Authority)申请一个用于证明服务器用途类型的证书。该证书只有用于对应的服务器的时候,客户端才信任此主机。所以目前所有的银行系统网站,关键部分应用都是https。客户通过信任该证书,从而信任了该主机。

安全套接层SSL(Secure Socket Layer)

SSL(SecureSocket Layer)是目前解决传输层安全问题的一个主要协议,其设计的初衷是基于TCP协议之上提供可靠的端到端安全服务,SSL的实施对于上层的应用程序是透明的,用以保障在Internet上数据传输的安全,利用数据加密(Encryption)技术,可确保数据在网络上的传输过程中不会被截取及窃听,被广泛地用于Web浏览器与服务器之间的身份认证和加密数据传输。SSL协议位于传输层与应用层之间,为数据通讯提供安全支持。SSL协议可分为两层:SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。其协议栈如下图所示:

SSL 握手协议

SSL修改密文协议

SSL 告警协议

HTTP

SSL记录协议

TCP

IP

SSL协议提供的主要服务

1)认证用户和服务器,确保数据发送到正确的客户机和服务器

2)加密数据以防止数据中途被窃取

3)维护数据的完整性,确保数据在传输过程中不被改变。

SSL协议的工作流程

服务器认证阶段:

1)客户端向服务器发送一个开始信息“Hello”以便开始一个新的会话连接;

2)服务器根据客户的信息确定是否需要生成新的主密钥,如需要则服务器在响应客户的“Hello”信息时将包含生成主密钥所需的信息;

3)客户根据收到的服务器响应信息,产生一个主密钥,并用服务器的公开密钥加密后传给服务器;

4)服务器用自己的私钥恢复该主密钥,并返回给客户一个用主密钥认证的信息,以此让客户认证服务器。

用户认证阶段:

在此之前,服务器已经通过了客户认证,这一阶段主要完成对客户的认证。经认证的服务器发送一个提问给客户,客户则返回数字签名后的提问和其公开密钥,从而向服务器提供认证。

 

 

 

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

①客户端的浏览器向服务器传送客户端SSL 协议的版本号,加密算法的种类,产生的随机数,以及其他服务器和客户端之间通讯所需要的各种信息。

②服务器向客户端传送SSL 协议的版本号,加密算法的种类,随机数以及其他相关信息,同时服务器还将向客户端传送自己的证书。

③客户利用服务器传过来的信息验证服务器的合法性,服务器的合法性包括:证书是否过期,发行服务器证书的CA 是否可靠,发行者证书的公钥能否正确解开服务器证书的发行者的数字签名,服务器证书上的域名是否和服务器的实际域名相匹配。如果合法性验证没有通过,通讯将断开;如果合法性验证通过,将继续进行第四步。

④用户端随机产生一个用于后面通讯的对称密码,然后用从步骤②中的服务器的证书中获得服务器的公钥对其加密,然后将加密后的预主密码传给服务器。

⑤如果服务器要求客户的身份认证(在握手过程中为可选),用户可以建立一个随机数然后对其进行数据签名,将这个含有签名的随机数和客户自己的证书以及加密过的预主密码一起传给服务器。

⑥如果服务器要求客户的身份认证,服务器必须检验客户证书和签名随机数的合法性,具体的合法性验证过程包括:客户的证书使用日期是否有效,为客户提供证书的CA 是否可靠,发行CA 的公钥能否正确解开客户证书的发行CA 的数字签名,检查客户的证书是否在证书废止列表(CRL)中。检验如果没有通过,通讯立刻中断;如果验证通过,服务器将用自己的私钥解开加密的预主密码,然后执行一系列步骤来产生主通讯密码(客户端也将通过同样的方法产生相同的主通讯密码)。

⑦服务器和客户端用相同的主密码即通话密码,一个对称密钥用于SSL 协议的安全数据通讯的加解密通讯。同时在SSL 通讯过程中还要完成数据通讯的完整性,防止数据通讯中的任何变化。

⑧客户端向服务器端发出信息,指明后面的数据通讯将使用的步骤⑦中的主密码为对称密钥,同时通知服务器客户端的握手过程结束。

⑨服务器向客户端发出信息,指明后面的数据通讯将使用的步骤⑦中的主密码为对称密钥,同时通知客户端服务器端的握手过程结束。

SSL 的握手部分结束,SSL 安全通道的数据通讯开始,客户和服务器开始使用相同的对称密钥进行数据通讯,同时进行通讯完整性的检验。

实验三:Linux下实现https

实验环境:wwwServer操作系统为RedhatEnterprise Linux AS v5.4

                www 服务由Apache 2.2.3提供

                Client操作系统为Windows XP

apacheSSL的结合使用mod_ssl-2.2.3-31.el5模块

需求描述:web服务器同时担任CA的角色,为自身的网站颁发数字证书

 实现客户端对web服务访问使用https方式

实验拓扑:参照实验一

实验步骤:

一、安装Apache(详见实验一中的步骤一)

安装OpenSSL使Apache支持SSL

[root@server1~]# rpm /mnt/cdrom/Server/openssl-0.9.8e-12.el5.i386.rpm

二、实现CA

一般来说获得一个数字证书大致分为三步“产生私钥à通过私钥生成证书请求文件àCA请求证书”,但是由于现在这台服务器自身要作为一个CA,则不需要第二步了,可以直接生成数字证书。下面就来实现CA

1、先修改OpenSSL的一些参数

2、新建那些需要但系统默认没有的目录和文件

[root@server1 CA]# mkdir certs  newcerts   crl

[root@server1 CA]# touch   index.txt   serial

serial文件一个初始值

[root@server1 CA]# echo "01">serial

3、生成CA的私钥

[root@server1 CA]# openssl genrsa 1024>private/cakey.pem

为了安全将CA的私钥文件修改下权限

[root@server1 CA]# chmod   600   private/*

4、通过私钥产生数字证书

先来修改一下openssl的配置文件以符合我们自己的一些要求

通过下面这条命令来生成一个数字证书

[root@server1 CA]# openssl  req  -new  -key  private/cakey.pem  -x509  -out  cacert.pem

 

 

三、web服务器申请数字证书

1、首先HTTP要加装模块来支持SSL,还要安装其所依赖的模块

[root@server1 ~]# rpm -ivh  /mnt/cdrom/Server/distcache-1.4.5-14.1.i386.rpm 

warning: /mnt/cdrom/Server/distcache-1.4.5-14.1.i386.rpm:Header V3 DSA signature: NOKEY, key ID 37017186

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

1:distcache########################################### [100%]

[root@server1 CA]# rpm -ivh  /mnt/cdrom/Server/mod_ssl-2.2.3-31.el5.i386.rpm 

warning: /mnt/cdrom/Server/mod_ssl-2.2.3-31.el5.i386.rpm:Header V3 DSA signature: NOKEY, key ID 37017186

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

1:mod_ssl########################################### [100%]

2、请求数字证书

首先新建一个目录用来存放web服务器的公钥、私钥和数字证书

[root@server1 ~]# mkdir -pv  /etc/httpd/certs

切换至这个目录

[root@server1 ~]# cd /etc/httpd/certs/

生成私钥文件

[root@server1 certs]# openssl genrsa 1024>httpd.key

为了安全修改一下私钥文件的权限

[root@server1 certs]# chmod 600 httpd.key

根据私钥文件长生证书请求文件,具体参数依实际情况而定

[root@server1 certs]# openssl req -new -key  httpd.key -out httpd.req

CA请求数字证书

[root@server1 certs]# openssl ca -in httpd.req  -out  httpd.cert

四、数字证书与http服务捆绑

1、编辑mod_ssl的配置文件,指明web服务器数字证书、私钥文件的存放位置

[root@server1 ~]# vim  /etc/httpd/conf.d/ssl.conf

2、关闭apache的配置文件,关闭80端口,配置完成后重启一下httpd服务

五、测试

修改完上面的这些东西以后再来访问一下这个站点,可以看到能够正常访问了!

 

你可能感兴趣的:(apache,https,身份验证,站点安全,来源控制)