天天看点

如何实现安全web服务

   SSL(Secure Sockets Layer)安全协议又叫“安全套接层协议”。它是在网络传输层之上提供的一种基于RSA和对称加密算法的,用于浏览器和Web服务器之间的安全连接技术,用来提供两个应用之间通信的保密,可信和身份认证。它被视为 Internet 上 Web 浏览器和服务器的标准安全性措施。

     HTTPS(Hypertext Transfer Protocol over Secure Socket Layer)是以安全为目标的http通道,即在http传输协议中加入ssl层,由于https的安全访问是基于ssl,因此要实现安全访问,要配置的就是让ssl如何工作。 https是由网景公司开发,现在它被广泛用于万维网上安全领域的通讯,例如网络银行等方面。 http是基于的tcp的80 端口,而https是基于tcp的443端口。 

安装mod_ssl 模块,建议使用yum来安装,因为安装此模块时会有一些依赖关系。 

yum install mod_ssl

如果使用rpm安装,还要安装的软件包有:

distcache-1.4.5-14.1.i386.rpm

确保http软件包已经安装过了。

要给客户端签发证书,首要前提服务器CA要有自签证书。因此首先来做的就是创建自签证书。

切换到/etc/pki/CA目录下,执行openssl –genrsa 1024 > private/cakey.pem

来生成一对密钥文件。

在图中可以看到创建的过程,完成后,到private目录下查看是否创建成功。也可以使用openssl –in cakey

<a href="http://linuxtro.blog.51cto.com/attachment/201003/23/1239505_1269319809QTsE.jpg"></a>

接下来执行命令:

openssl req –new –x509 –key private/cakey.pem –out cacert.pem –days 3695

来生成一个待签名的 CA根证书,用来给其他申请者进行颁发证书。

<a href="http://linuxtro.blog.51cto.com/attachment/201003/23/1239505_1269319811Af6m.jpg"></a>

在生成自签证书时,要填写证书信息以确保CA的真实性。红线框起来的是要填写的内容,在试验的时候可以有自己决定。

为了CA的证书安全性,建议将cakey.pem密钥文件的权限修改为600

<a href="http://linuxtro.blog.51cto.com/attachment/201003/23/1239505_12693198163ppj.jpg"></a>

接下来是编辑/etc/pki/tls/openssl.cnf 将里面的路径改为真实路径。

<a href="http://linuxtro.blog.51cto.com/attachment/201003/23/1239505_126931981722c8.jpg"></a>

建立文件index.txt和serial 目的是存放颁发证书的信息。完成后,查看是否创建成功。

<a href="http://linuxtro.blog.51cto.com/attachment/201003/23/1239505_1269319819uZHr.jpg"></a>

好了,CA的自签证书已经创建成功,接下来的CA任务就是给客户端的颁发证书了。但是在颁发证书之前,客户端要自己生成一对密钥文件,并向CA提出申请证书的请求。因此,下面要做的就是生成客户端的密钥,并且向CA提出申请了。具体步骤如下:

现在回到客户端,

切换到/etc/httpd目录下,创建ssl目录

<a href="http://linuxtro.blog.51cto.com/attachment/201003/23/1239505_1269319822aVF4.jpg"></a>

执行命令:openssl –genrsa 1024 &amp;gt; http.key 来生成一对http协议的密钥文件。

<a href="http://linuxtro.blog.51cto.com/attachment/201003/23/1239505_1269319824eflK.jpg"></a>

密钥生成了,下一步就是向CA提出申请证书的请求了。具体命令如下:

openssl req –new –key httpd.key –out httpd.csr

<a href="http://linuxtro.blog.51cto.com/attachment/201003/23/1239505_1269319825jT0X.jpg"></a>

申请证书,当然要填写申请者的信息了。

红线框起来的为示例。在信息题写完后,提示要输入密码,这个密码是用于保证证书安全性的密码,在查询修改密钥文件是会用到。这里就不再设定了。

<a href="http://linuxtro.blog.51cto.com/attachment/201003/23/1239505_1269319827ssFI.jpg"></a>

现在回到服务器端。客户端的申请证书的请求已经到达CA处,那么CA该如何来给客户端签发证书呢?执行命令:

openssl ca –in httpd.csr –out httpd .crt –days 3655

有点错误了,该如何来解决呢?先看看出现错误的原因。错误提示是说在/etc/pki/CA/目录下,没有newcerts文件,此时,可以看到,newcerts目录是用来存放CA签发证书信息的,再联想到前面生成CA自签证书后创建的index.txt文件和serial文件,因此可以总结出:

CA在颁发证书时要用到三个文件: newcerts、index.txt和serial

如果在前面不创建index.txt文件和serial文件,在此处也会出现找不到index.txt文件和serial文件的。

<a href="http://linuxtro.blog.51cto.com/attachment/201003/23/1239505_1269319830zL1z.jpg"></a>

错误既然找到了,那么就去/etc/pki/CA目录下创建newserts目录就行了。

<a href="http://linuxtro.blog.51cto.com/attachment/201003/23/1239505_1269319832umyy.jpg"></a>

再来执行签发证书的命令,OK!执行成功啦!

<a href="http://linuxtro.blog.51cto.com/attachment/201003/23/1239505_12693198350tDD.jpg"></a>

接下来就是一些交互过程,询问是否确认给客户端颁发证书。当然要颁发了,输入y就行了(如果不想颁发,也可以输入n)。

<a href="http://linuxtro.blog.51cto.com/attachment/201003/23/1239505_12693198379rBC.jpg"></a>

来查看一下刚刚生成的证书吧?

可以使用openssl x509 -in httpd.crt -noout -text查看生成的证书的信息 

也可以使用下面的命令查看证书持有人的标识信息 

openssl x509 -in httpd.cst -noout -subject

<a href="http://linuxtro.blog.51cto.com/attachment/201003/23/1239505_1269319839FU9P.jpg"></a>

证书生成了,可是以前用的http协议不知道已经生成证书了。因为在默认情况下http协议是关闭支持ssl安全访问的。因此,下面要做的就是让http协议记住以后访问服务器要用https协议。具体操作如下:

切换到/etc/httpd/conf.d/目录下,编辑ssl.conf文件

<a href="http://linuxtro.blog.51cto.com/attachment/201003/23/1239505_1269319840Q4Nd.jpg"></a>

找到SSLCertificateFile 和SSLCertificateKeyFile这两行,没有修改之前是这样的

<a href="http://linuxtro.blog.51cto.com/attachment/201003/23/1239505_1269319843FmdG.jpg"></a>

把这两行修改为:SSLCertificateFile /etc/httpd/ssl/httpd.crt

SSLCertificateKeyFile /etc/httpd/ssl/httpd.key

<a href="http://linuxtro.blog.51cto.com/attachment/201003/23/1239505_1269319846w4eq.jpg"></a>

修改完成后,保存退出。重启http服务。

<a href="http://linuxtro.blog.51cto.com/attachment/201003/23/1239505_1269319849OtL0.jpg"></a>

到此为止,所有的配置工作已经完成,嗯,是该验证一下的时候了!

在另外一台机器上,打开浏览器,输入IP地址,为了验证试验效果,先以http协议来访问服务器,在之前,服务器端已写好测试网页。

<a href="http://linuxtro.blog.51cto.com/attachment/201003/23/1239505_1269319852LG66.jpg"></a>

再来用https协议访问一下服务器,看看会出现什么效果呢?

选择“是”进入下一步。也可以先选择“查看证书”来查看一下证书信息来验证一下刚才的配置。

<a href="http://linuxtro.blog.51cto.com/attachment/201003/23/1239505_1269319854RDep.jpg"></a>

再次选择“是”。

<a href="http://linuxtro.blog.51cto.com/attachment/201003/23/1239505_1269319857I7jr.jpg"></a>

OK,通过https协议也可以访问到服务器端的测试页,那么与http访问的呢?留意下图中右下角的锁标志,这就代表访问协议是基于加密的安全访问。在实际生活中,访问一些支付网站会见到这样的标志。

<a href="http://linuxtro.blog.51cto.com/attachment/201003/23/1239505_1269319861JgCt.jpg"></a>

本文转自 linuxtro 51CTO博客,原文链接:http://blog.51cto.com/linuxtro/287003,如需转载请自行联系原作者

继续阅读