安全连接方式SSL概论

安全连接方式SSL概论
安全连接方式SSL概论

安全连接方式SSL概论

对HTTP传输进行加密的协议为HTTPS,它是通过SSL(Secure socketlayer)进行HTTP 传输的协议,不但通过公用密钥的算法进行加密保证传输的安全性,而且还可以通过获得认证证书CA,保证客户连接的服务器没有被假冒。

安全连接方式SSL

通常的连接方式中,通信是以非加密的形式在网络上传播的,这就有可能被非法窃听到,尤其是用于认证的口令信息。为了避免这个安全漏洞,就必须对传输过程进行加密。对HTTP传输进行加密的协议为HTTPS,它是通过SSL(Secure socketlayer)进行HTTP 传输的协议,不但通过公用密钥的算法进行加密保证传输的安全性,而且还可以通过获得认证证书CA,保证客户连接的服务器没有被假冒。

使用公用密钥的方式可以保证数据传输没有问题,但如果浏览器客户访问的站点被假冒,这也是一个严重的安全问题。这个问题不属于加密本身,而是要保证密钥本身的正确性问题。要保证所获得的其他站点公用密钥为其正确的密钥,而非假冒站点的密钥,就必须通过一个认证机制,能对站点的密钥进行认证。当然即使没有经过认证,仍然可以保证信息传输安全,只是客户不能确信访问的服务器没有被假冒。如果不是为了提供电子商务等方面对安全性要求很高的服务,一般不需要如此严格的考虑。

下面我们就分几节来谈到如何在Apache服务器上实现SSL。

第一节SSL

SSL除了可以用在Web服务器与浏览器之间信息交换以外,还可以支持其他我们所熟识的网络应用。以TCP/IP网络层来看,SSL是定位在网络层之上的应用协议,如图:HTTP FTP SMTP

Secure Socket Layer

TCP层

IP层

任何以TCP/IP层以上的网络协议SSL都可以支持,因此HTTP、FTP、SMTP等等皆是SSL的保护范围。SSL协议一共包含两个部分:SSLHandshake协议和SSL Record协议。前者是负责通信前的一些参数协商,后者则是定义SSL的内部数据格式。

SSL Handshake协议

SSL中Handshake协议可以说是SSL的前置步骤,就好象初次见面的两个人回先自我介绍一番再开始谈话一样。通信的双方(商店的服务器与客户计算机)先进行“沟通”与“协调”有关SSL通信的参数设置,其中包括:

※通信中所使用的SSL版本※信息加密用的算法※客户端的身份验证要求※所使用的公开金钥算法

这个协议的大致步骤如下:

(1)Client Hello:首先,由客户端计算机向服务器Say Hello,并同时将客户端计算机所能支持的安全模块告诉对方,以便沟通。信息内容包括:SSL协议版本、本次联机的识别码以及加密模块等。

(2)Server Hello:这时商店端服务器在收到这个信息后,立即送出包含以下信息的响应信息给客户端:※服务器的数字证书,让客户端可以检查服务器的身份。

※如果服务器要求双方相互认证的话,则送出“认证请求”的信息。要求客户端也提出识别身份的数字证书。

※服务器用来加密的金钥。

(3)加解密参数:当客户端收到服务器的信息后,就可根据要求来响应,并且也将客户端的公用金钥也送给对方,作为后续信息的加解密之用。到这个阶段为止,通信双方都已经达成了共识,并准备传送真正的信息内容。

(4)HTTP数据流:协调的工作已经大功告成了!这时双方就可以HTTP协议来进行数据交换了。

SSL Record协议

顾名思义Record协议,是在描述SSL信息交换的过程中的记录格式。SSL协议是介于应用层和网络层之间,因此它会接收来自应用层的信息,并加以包装后交由下一层(也就是网络层来传送)。

第二节Apache上实现SSL

虽然Apache服务器不支持SSL,但Apache服务器有两个可以自由使用的支持SSL的相关计划,一个为Apache-SSL,它集成了Apache服务器和SSL,另一个为Apache+mod_ssl,它是通过可动态加载的模块mod_ssl来支持SSL,其中后一个是由前一个分化出的,并由于使用模块,易用性很好,因此使用范围更为广泛。还有一些基于Apache并集成了SSL 能力的商业Web服务器,然而使用这些商业Web服务器主要是北美,这是因为在那里SSL 使用的公开密钥的算法具备专利权,不能用于商业目的,其他的国家不必考虑这个专利问题,而可以自由使用SSL。

以下是我们安装所需要的各部分说明

apache_1.3.11.tar.gz(服务器)

mod_ssl-2.5.0-1.3.11.tar.gz(SSL接口模块)

openssl-0.9.4.tar.gz(ssl安全和算法类库)

mod_perl-1.21.tar.gz(perl接口模块)

rsaref20.tar.Z(RSA算法包)

perl5.005_03.tar.gz(perl环境)

如果你的系统是从头装起的话,建议你留出一个叫/chroot的分区用来运行Apache。

至于这个分区的大小,取决于你自已,一般来说,一个普通的网站有40M也就够了。但你的系统如果早就运行了Apache,你可以另外开辟一个分区,或者选择不用独立分区来安装,仅仅在根下面开一个目录。

另外我假定你的系统已经通过了一定的安全检测——在安装Apache之前(如果有其它漏洞存在的话,你认为运行在其上的Apache会怎样,所谓覆巢之下,焉有完卵:),检测至少要包括(但不仅限于)——移除不安全的SUID程序、升级某些守护进程,去掉不必要的服务。还假定你是的WEB SERVER是运行TCP/IP而且有自己的地址。

一、平台

以下测试都在下列平台下通过:

1、Slackware 4.x distribution using gcc 2.7.2.3and Perl v5.005_02

2、Solaris7on Sparc using gcc v2.8.1and Perl v5.005_03

3、Digital UNIX V4.0F distribution using gcc 2.7.2.3and Perl v5.005_03

二、获取所需要的软件

因为阿帕奇并没有在她的包里自己SSL,因此我们必须先下载到这些加密网页所必需的部份:

1、Apache Web Server-https://www.360docs.net/doc/e311272211.html,/dist/

不必多说,我们当然需要获得这个web server,现在的版本是1.3.11,阿帕奇是现在世界上使用最广泛的web server。

2、mod_ssl-https://www.360docs.net/doc/e311272211.html,/

这是一个为Apache1.3.x web server提供强力加密的的软件模块,它使用的是SSL v2和v3 以及TLS(Transport Layer Security)v1协议。该软件包是在BSD的license 下开发的,在非商业的情况下,你可以自由地使用它,要判断该使用哪一个版本的mod_ssl 很简单,它的版本号是-格式的,也就是说,你如果用的是 1.3.11的Apache,那么就该用

2.50-1.

3.11的mod_ssl。

3、mod_perl-https://www.360docs.net/doc/e311272211.html,/dist/

Apache1.3.x 的perl接口模块

4、Open SSL-https://www.360docs.net/doc/e311272211.html,/ ??????

这一软件包提供了SSL v2/v3(Secure Sockets Layer)及TLS v1(Transport Layer Security) 协议的加密保护。

5、RSAref-用搜索引擎查找一下"rsaref20.tar.Z"应该就能找到了RSA加密算法的实现软件包

6、Perl减压缩、安装(详见Perl介绍)

Perl是一种编程语言。它是一种非常流行的编程语言,在文本处理、端口通信、协调多个不同应用以及完成其他诸多任务时都受到人们的欢迎。Perl同时也是一种颇有名气的流行CGI编程语言,不过这只是Perl诸多应用中的一种

我们将把这些程序安装于/usr/local目录下增加功能模块可以给阿帕奇更强大的功能,如果你需要更多的模块的话,自己去获得它并且加载,比如mod_php这一模块也是现在流行的,可以使阿帕奇提供php脚本支持……

三、软件包的安装

在实际安装前我们要决定我们将把web server安装在什么环境下,对于一个对安全有相当高要求的人来说,可以将服务器和软件安装于chroot环境,chroot改变root目录并且仅在这一目录中执行程序,这提供了一个内建的小环境,即使入侵者已经通过cgi程序或者其它办法通过80端口获得了系统的进入权限,它也只能够在这一受限的环境中活动,从安全角度考量,这当然是最好的,但对系统管理员来说,这样安装相对麻烦一些,还必须把一些必要的库,perl以及相关工具也搬到chroot中,所以——你自己决定吧,这里我们介绍的是在chroot下安装。

展开这些软件包:

#gzip-d-c apache_1.3.11.tar.gz|tar xvf-

#gzip-d-c mod_ssl-2.5.0-1.3.11.tar.gz|tar xvf-

#gzip-d-c openssl-0.9.4.tar.gz|tar xvf-

#gzip-d-c mod_perl-1.21.tar.gz|tar xvf-

展开并且编译rsaref

#mkdir rsaref

#cd rsaref

#gzip-d-c../rsaref20.tar.Z|tar xvf-

#tar xvf rsaref.tar

#cp-rp install/unix temp

#cd temp

#make

#mv rsaref.a librsaref.a

#cd../../

编译OpenSSL

#cd openssl-0.9.4

#perl util/perlpath.pl/usr/bin/perl(Path to Perl)

#./config-L`pwd`/../rsaref/temp/

#make

#make test

#cd..

将mod_perl加到Apache的编译选项里

#cd mod_perl-1.21

#perl Makefile.PL APACHE_PREFIX=/usr/local/apache\

APACHE_SRC=../apache_1.3.11/src\

USE_APACI=1

你会得到下面的提示:

Configure mod_perl with../apache_1.3.11/src?[y]

直接按enter就是默认的yes

然后Makefile会问你是否建立httpd,可以用n选择不。

#make

#make install

#cd..

将mod_ssl加到Apache中

#cd mod_ssl-2.5.0-1.3.11

#./configure--with-apache=../apache_1.3.11\

--prefix=/usr/local/apache\

--with-ssl=../openssl-0.9.4\

--with-rsa=../rsaref/temp\

--activate-module=src/modules/perl/libperl.a

#cd..

编译Apache:

#cd apache_1.3.11

在编译以前我们可以再做一件事——编辑包含http server版本号的文件,使想得到它的入侵者摸不着脑袋长哪儿:)

#src/include/httpd.h

寻找下面的行(approx.454)并且改变server的名字及版本号——可以随便用你想改成的东西。

define SERVER_BASEVERSION"Apache/1.3.11"

现在你可以编译阿帕奇了

#make

现在你可以生成一个CA了(actual certificate).

#make certificate

按照该授权书的安装介绍做。

#make install

这将会把阿帕奇装在/usr/local/apache。

测试web server(还没装SSL)是否运行正常----调用web server:

/usr/local/apache/bin/apachectl start ??

当WEB服务器运行起来后,你可以用lynx或者任意什么浏览器连接你的80端口,如果能看到apache的欢迎页,就OK了。

停止server:

/usr/local/apache/bin/apachectl stop

测试web server(同时起SSL)-调用带SSL的WEB服务器

/usr/local/apache/bin/apachectl startssl

服务器运行时你用Netscape或者其它支持SSL的浏览器来看https://your.ip.here/,看到欢迎页了么?

要停止SERVER:

/usr/local/apache/bin/apachectl stop ????

四、阿帕奇的配置

现在我们可以来看看阿帕奇的配置文件了——需要记住的是如果你对它做了更改,

在未重新启动httpd守护进程前,它是不会发生作用的。好,现在我们可以进目录

/usr/local/apache/conf看看了。

httpd.conf-

这是阿帕奇的主要配置文件,你可以在这里设定服务器启动时的基本环境,比如服务 ??

器的启动方式、端口号、允许的最多连接数等等,这一文件的注释非常详细,要看明 ??

白应该没什么问题。

access.conf-

这一文件是设定系统中的存取方式和环境的,但现在已经可以在httpd.conf中设定了,所以推荐你别动它,放空好了。

srm.conf-

这家伙主要做的是资源上的设定,你也可以放空,仅仅设定httpd.conf中的相关项。

现在重启web server来使改动生效:

#/usr/local/apache/bin/apachectl restart

五、将阿帕奇设定在chroot环境下

现在我们开始把刚才建立的东西移到chroot环境下——包括阿帕奇服务器以及所有需要的库文件。当然如前面所说的,这部份是可选的,如果你怕麻烦的话就算了,但转移后可以对你的web server多一个可靠的保护。

建立/chroot目录

#mkdir/chroot

建立一些必需的子目录

#mkdir/chroot/dev

#mkdir/chroot/lib

#mkdir/chroot/etc

#mkdir/chroot/bin

#mkdir/chroot/usr

#mkdir/chroot/usr/local

在我们的chroot建立/dev/null

#mknod-m666/chroot/dev/null c1 3 ????

将阿帕奇拷贝到/chroot目录中

#cp-rp/usr/local/apache//chroot/usr/local

拷贝必需的二进制文件

#cp/bin/sh/chroot/bin

确定哪些库是必需的——这取决于你编译时内建了哪些模块

#ldd/usr/local/apache/bin/httpd

将需要的库拷贝到chroot目录

#cp/lib/libm.*/chroot/lib/

#cp/lib/libgdbm.*/chroot/lib

#cp/lib/libdb.*/chroot/lib

#cp/lib/libdl.*/chroot/lib

#cp/lib/libc.*/chroot/lib

拷贝网络连接所需要的函数库

#cp/lib/libnss*/chroot/lib

拷贝必需的/etc下的文件到chroot

#cp/etc/passwd/chroot/etc

#cp/etc/shadow/chroot/etc

#cp/etc/group/chroot/etc

#cp/etc/resolv.conf/chroot/etc

#cp/etc/hosts/chroot/etc

#cp/etc/localtime/chroot/etc

#cp/etc/localtime/chroot/etc

#cp/etc/ld.so.*/chroot/etc

测试chroot下的阿帕奇

#chroot/chroot/usr/local/apache/bin/apachectl start

现在再

#chroot/chroot/usr/local/apache/bin/apachectl stop

服务器就停下来了,如果不行的话,再次确认是否所有需要的库都拷到了/chroot/lib下了,如果仍然无帮助的话,或者可以以strace方式运行httpd,它的输出可能会有一些有价值的内容可以帮助确定是丢失了哪些库或者二进制文件。然后我们可以做一些小工作了:默认情况下阿帕奇是以nobody用户及用户组运行的,不要更改它。在passwd\shadow\group等文件中包含了大量系统信息,所以你可以替换掉它们。

建立一个用户名为httpd,UID为80

建立一个组名为httpd,GID为80

用下面的命令来将/chroot下的passwd,shadow,group替换掉

#echo"httpd:x:80:100:,,,:/home/httpd:/bin/false">/chroot/etc/passwd

#echo"httpd:*LK*:11010:0:99999:7:::">/chroot/etc/shadow

#echo"httpd:x:80:">/chroot/etc/group

设定好文件的许可权限

#chmod600/chroot/etc/passwd shadow group

现在我们可以编辑apache的配置文件并进行需要的配置,文件在

/chroot/usr/local/apache/conf/httpd.conf,寻找到包含apache运行用户

及组的信息的行并改变它(approx.line263),当然是改成httpd/httpd。

一切运行正常后我们可以删除前面的那些服务器安装的东西——/usr/local下的,

包括服务器以及那些内建的模块等等。

#rm-rf/usr/local/apache

#rm-rf/usr/local/mod_ssl-2.5.0-1.3.11/

#rm-rf/usr/local/mod_perl-1.21/

#rm-rf/usr/local/openssl-0.9.4/

#rm-rf/usr/local/rsaref

如果以后还想改变它们的配置,增加新的模块,那么将原先的apache留下来也行。

将阿帕奇设定为在开机时自启动,修改/etc/rc.d/rc.local并且加入以下行:

echo"Starting Apache-SSL"

/usr/sbin/chroot/apache/bin/apachectl startssl

如果一切都运行正常的话,那么恭喜你,你已经成功地运行了带SSL支持的阿帕奇 ??

了,这会使你的web server更加安全,如果你希望加入更多的模块实现其它功能的话,自己动手吧,最后要说明的是:在chroot环境中最好只有必需的一些二进制程序,而SUID程序还是干掉比较好些。(https://www.360docs.net/doc/e311272211.html,/) 进入【UNIX论坛】注明:

在局域网中这样是可行的,但是在广域网可能会出现这样一种情况:

由于加密证书是我们自己生成并自签的,并没有得到广域证书提供商认可,可能在html 连接上,会弹出提问,是否信任证书提供商(这个时候的证书提供商就是本公司)。如果想要得到广域证书提供商的证书,可以寻找相关网站,花费大概300-500美元,这样在html 连接上,由于有了广域证书,就不会弹出上面的提问了。

第三节Perl介绍及安装

以版本 5.00503 为例,上述命令会在目前目录下建立一个 perl5.005_03 的子目录, 接著

cd perl5.005_03

./Configure

这时 Configure 会尝试取得针对你的系统应有的设定值, 都按 [Enter] 就行了

如果您觉得按 [Enter]回答问题很累的話, ./Configure 这个命令可以换成./Configure -des, 那么 Configure 会直接使用它找出来的设定值, 不再寻求使用者的确认. 接下来make

make test

测试一下,最后将 perl 安裝到系统上 make install // 注意:perl在/usr/local/bin/目录下换成perl5名安裝好的 perl 会放在

位置说明

/usr/loca/binperl 主程式与一些工具程式

/usr/local/lib/perl5/5.00503perlmodule 和POD(perl online document)

/usr/local/man/man1perl 的 man page

相关主题
相关文档
最新文档