服务器 频道

Linux服务器安全策略详解之Apache配置

  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>

 

0
相关文章