6.3.11 使用SSL加固Apache
使用具有SSL功能的Web服务器,可以提高网站的安全性能。SSL协议工作在Linux TCP/IP协议和HTTP协议之间,其关系如图6-12所示。
图6-12 SSL协议与Linux TCP/IP协议和HTTP协议之间关系
SSL使用加密方法来保护Web服务器和浏览器之间的信息流。SSL不仅用于加密在互联网上传递的数据流,而且还提供双方身份验证。这样就可以安全地在线购物而不必担心别人窃取信用卡的信息。这种特性使得SSL适用于那些交换重要信息的地方,像电子商务和基于Web的邮件。
SSL使用公共密钥加密技术,服务器在连接结束时给客户端发送公用密钥用来加密信息,而加密的信息只有服务器用它自己持有的专用密钥才能解开。客户端用公用密钥加密数据,并且发送给服务器自己的密钥,以唯一确定自己,防止在系统两端之间有人冒充服务器或客户端进行欺骗。加密的HTTP连接用443端口号代替80端口号,以区别于普通的不加密的HTTP。客户端使用加密HTTP连接时会自动使用443端口而不是80端口,这使得服务器更容易做出相应的响应。SSL验证和加密的具体过程如下:
① 用户使用浏览器,访问Web服务器站点,发出SSL握手信号;
② Web服务器发出回应,并出示服务器证书(公钥),显示系统Web服务器站点身份;
③ 浏览器验证服务器证书,并生成一个随机的会话密钥,密钥长度达到128位;
④ 浏览器用Web服务器的公钥加密该会话密钥;
⑤ 浏览器将会话密钥的加密结果发送Web服务器;
⑥ Web服务器用自己的私钥解密得出真正的会话密钥;
⑦ 现在浏览器和Web服务器都拥有同样的会话密钥,双方可以放心使用这个会话密钥来加密通信内容;
⑧ 安全通信通道建立成功。
Apache服务器使用SSL时通常有两种选择,即主服务器或虚拟Web站点。
如果使用的是RHEL 3.0~4.0,那么可以直接使用命令"rpm -qa | grep mod_ssl"检查,如果没有安装,可以以root的身份登录系统,输入命令"system-config-packages"。利用GUI套件管理工具的网页服务器,点选"详细信息",然后勾选"mod_ssl",提示放入适当的光盘,便可完成安装工作,如图6-13所示。
图6-13 安装mod_ssl软件包
下面产生SSL凭证,使用以下命令可以产生.key和.csr文档:
# openssl genrsa -out server.key 1024
Generating RSA private key, 1024 bit long modulus
......++++++
........++++++
e is 65537 (0x10001)
# chmod 600 server.key
# openssl req -new -key server.key -out server.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [GB]:CN
State or Province Name (full name) [Berkshire]:China
Locality Name (eg, city) [Newbury]:beijing City
Organization Name (eg, company) [My Company Ltd]:x41
Organizational Unit Name (eg, section) []:x41
Common Name (eg, your name or your server's hostname) []:localhost
Email Address []:goodcjh@2911.net
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:goodcjh
An optional company name []:goodcjh
注意 黑体部分是需要手工输入的。下面要自行签署才有效,然后再让使用者汇入你的凭证才行。
以下将示范如何自己签署金钥:
openssl x509 -req -days 365 -in server.csr -signkey www. server.key -out server.crt
完成之后,你应该就会产生三个文件:server.csr、server.key、server.crt。将它们复制到ca存放的目录/etc/httpd/conf/ca,然后修改Apache配置文件httpd.conf,添加以下两行:
SSLCertificateFile /etc/httpd/conf/ca/server.crt
SSLCertificateKeyFile /etc/httpd/conf/ca/server.key
重新启动Apache:
apachectl stop
apachectl startssl
使用浏览器访问Apache服务器的首页,输入"https://localhost",此时出现屏幕提示,如图6-14所示。
图6-14 HTTPS安全性提示的界面
单击"确定"按钮,即可进入加密显示的Apache首页,注意浏览器的位置栏和右下角的标志,如图6-15所示。
如果使用的Linux发行版本没有包括mod_ssl软件,可以使用APT命令添加。Debian GNU/Linux 是APT(Advanced Package Tool)的缔造者。其初衷是利用工具来解决软件安装时的依赖性问题。工作原理大致为:用户安装APT客户端工具,查寻APT服务器的资料库(repositories)上的RPM软件包信息,并分析软件包之间的依赖性,然后下载并进行安装。APT 除了可以让你很方便且快速地安装 RPM 软件外,你也可以用它来更新系统。虽然APT是基于Debian的软件包管理工具,但是已经被一个巴西公司Conectiva移植到基于RPM的系统上。因此,对于基于RPM软件包管理的平台,如 Red Hat、TurboLinux、SuSe、Mandrake等Linux发行版本,APT是一个非常优秀的软件管理工具。
图6-15 加密显示的Apache首页
运行APT之前需要确认服务器上Apache是否已经可以提供WWW服务,并且/var分区是否有足够的空间。
# wget http://ftp.freshrpms.net/pub/freshrpms/fedora/linux/3/apt/apt-0.5.15cnc6- 1.1.fc3.fr.i386.rpm
# wget http://ftp.freshrpms.net/pub/freshrpms/fedora/linux/3/apt/apt-devel-0.5. 15cnc6-1.1.fc3.fr.i386.rpm
# rpm -ivh apt-devel-0.5.15cnc6-1.1.fc3.fr.i386.rpm
# rpm -ivh apt-0.5.15cnc6-1.1.fc3.fr.i386.rpm
接着需要加入freshrpms.net的公共密钥GPG-KEY,然后在/etc/apt下建立一个/gpg文件夹,将GPG-KEY保存在那里,以便日后管理。
# rpm --import http://ftp.freshrpms.net/pub/freshrpms/RPM-GPG-KEY
安装图形界面,freshrpms.net站点提供了一个图形界面的apt-rpm接口Synaptic,使用图形界面的APT更加方便,可以直接利用APT安装Synaptic:
# apt-get install synaptic
在几行提示之后Synaptic就安装好了,进入X Window后,Synaptic会出现在"系统设置"菜单里面。界面如图6-16所示。
图6-16 APT图形化接口Synaptic
APT系统主要包括以下命令,如表6-1所示。
表6-1 APT系统的主要命令
命 令 | 描 述 |
apt-get update | 更新apt-get的本地数据库,使其与服务器的pkglist文件同步。在升级以前一般都要执行本命令实现与服务器的一致 |
apt-get check | 验证本地系统的完整性 |
apt-get dist-upgrade | 安装所有的基础软件包,升级一切软件包,并在需要时安装新软件包 |
apt-get remove package_name | 删除该软件包,同时会删除依赖于它的软件包 |
apt-get install package_name | 安装某个软件包及其相关软件包 |
apt-get source package_name | 下载软件包的source rpm |
apt-get clean | 删除保存在缓存目录下(/var/cache/apt/archives)的被下载的软件包 |
apt-get upgrade package_name | 升级指定的软件包,并升级其依赖的软件包 |
apt-cdrom add | 自动安装光盘并建立列表 |
apt-cache depends package_name | 显示软件包的依赖性关系 |
apt-cache package_name | 在网络上搜索指定的软件包 |
apt-config dump | 显示目前的配置信息 |
其中用户使用最多的就是apt-get命令。
# apt-get install openssl
# apt-get install libapache-mod-ssl
# apache-modconf apache enable mod_ssl
然后产生认证文件。方法和上面相似。
# cd /etc/apache/ssl.key/
# openssl genrsa -out server.key 1024
# chmod 600 server.key
# openssl genrsa -des3 -out server.key 1 024
# cd ../ssl.csr/
# openssl req -new -key ../ssl.key/server.key -out server.csr
# cd ../ssl.crt/
# openssl req new -x509 -nodes -sha1 -days 365 -key /ssl.key/server.key -out server.crt
如果使用的是虚拟主机,还要修改Apache配置文件:
Listen *:443
<VirtualHost *:443>
ServerName secure.example.org
DocumentRoot /home/username/public_html/
User username
Group groupname
DirectoryIndex index.php index.html index.htm
SSLEngine On
SSLCertificateKeyFile /etc/apache/ssl.key/server.key
SSLCertificateFile /etc/apache/ssl.crt/server.crt
SSLCACertificateFile /etc/apache/ssl.crt/ca.crt
</VirtualHost>