Linux Apache 的 HTTPS 配置
我以前在 Windows 上配置过 Apache 的 SSL/HTTPS 双向认证,即对 Web 服务器与浏览器同时进行认证,而建立的 HTTPS 安全连接。最近,我在 Linux 下也配置了下 Apache 的 HTTPS,并将配置过程和遇到的问题记录了一下。
配置环境
∙ Web 服务器系统:VMware Workstation 6.0.2,Debian Linux 5.0.2,kernel=2.6.26-2-686
∙ Web 服务器:Apache 2.2.9-10
∙ Web 浏览器系统:Windows XP Professional
∙ Web 浏览器:Firefox 3.0.11
Linux Apache 的基本配置
现在 Linux 下较新的 Apache 配置,要比 Windows 下的配置方便、灵活的多。比如,我的
Debian 5 下的 Apache2 包安装后,就将 Apache 的配置文件放在:/etc/apache2 目录下,并按照 Linux 下经典的:xxx-available,xxx-enabled,xxx.d 目录来组织配置文件,看到这里有没有想到 Emacs 的配置文件组织方式呢?(*^_^*)。玩 Linux 的人看到这里,大多都能猜地出 Linux Apache 是怎么组织的。下面简单列举一下 Apache 配置文件的组织结构:
∙ f:Apache 的入口配置文件,包含其它配置文件的主控文件
∙ conf.d/:包含一些零碎的配置,一般不和具体的 mod 相关,是全局性质的,比如:字符集 chart、安全选项 curity。
∙ 考研复试需要准备什么材料f:设置 Apache 的监听端口,默认时,HTTP 为 80,HTTPS 为 443。
∙ envvars:导出一些环境变量,比如:
∙ 外语歌曲export APACHE_RUN_USER=www-data
∙ export APACHE_RUN_GROUP=www-data
∙ export APACHE_PID_FILE=/var/run/apache2.pid
∙ f:额外的用户设置的配置,默认里面内容为空。Windows 下的 Apache 喜欢用这个名字作为主控配置文件,但在 Linux 下,作用不大。
∙ mods-available/:包含 Apache 中所有可用 mod 的加载和设置配置,加载配置一般用 xxx.load 表示,设置配置一般用 f 表示,比如:mod_ssl 的加载配置为:ssl.load,设置配置为:f
∙ mods-enabled/:实际启动的 mod 的加载和设置配置,是到 mods-available/ 中配置文件的符号链接。
∙ sites-available/:Web 站点的配置,可以是全局的,或虚拟主机作用域的。默认有两个附带的配置文件:default、default-ssl,其中 default 为一般的 HTTP 服务的虚拟主机配置,而 default-ssl 就是 HTTPS 服务的虚拟主机配置。这两个配置文件可以直接使用,配置内容只需做适当的调整即可。
∙ sites-enabled/:实际启动的 Web 站点配置,是到 sites-available/ 中配置文件的符号链
接。默认时,只有一个 000-default 链接指向 sites-available/default,说明默认的 Apache 配置,只启动 HTTP 服务,而不启动 HTTPS 服务。
另外,列举一下配置 HTTPS 时,Apache 的相关文件路径:
∙ Apache 日志文件:在:/var/log/apache2 目录中保存。错误日志为:error.log,HTTP 访问日志为:access.log,HTTPS 访问日志为:ssl_access.log。
∙ Apache 的启动:可以使用 Apache 在:/etc/init.d/ 中安装的 Run Level 脚本:apache2,来启动/停止 Apache 服务。和大多数 Run Level 脚本一样,使用参数 start 启动服务,使用参数 stop 停止服务,如下:
∙ # /etc/init.d/apache2 start
∙ Starting web rver: apache2apache2: Could starburynot reliably determine the rver's fully qualified domain name, using 192.168.2.108 for ServerName
铁娘子电影
vomit∙ mdac
huazhuang
∙ # /etc/init.d/tony abbottapache2 stop
∙ Stopping web rver: apache2apache2: Could not reliably determine the rver's fully qualified domain name, using 192.168.2.108 for ServerName
∙ ... waiting .
∙ Web 文件目录:使用 sites-available 中,配置文件 default 和 default-ssl 的 DocumentRoot 选项,默认指定的 Web 文件目录:/var/www/。
/var/www 目录下默认只有一个 Web 文件:index.html,我就用它作为 HTTPS 配置的测试页面,并更改了下它的内容:
<html><body><h1>Hello World! --zy</h1></body></html>
证书、密钥和测试场景
有 2 台主机系统:
∙ 一个 Linux 安装 Apache 服务器,主机名:zy-13
∙ 另一个为 Windows,使用 Firefox 作为浏览器,主机名:zy-1郑州培训公司。使用 Firefox 作为浏览器,是因为 HTTPS 基于的 SSL 最早是由 Netscape 提出的,并且 Netscape 一直在发展 SSL 技术(参考:Mozilla SSL/TLS),而 Mozilla 是 Netscape 的开源社区,所以我想 Mozilla 的 Firefox 应该比其它浏览器对 SSL 支持地更完善(其实这是借口,我只是喜欢用 Firefox 而已)。
有3套证书,用openssl工具生成,作用如下:
∙ :用作CA证书,PEM格式,对其它两个证书进行签发,它自己是自签的。
∙ :用作Web服务器证书,PEM格式。它的密钥文件为:zy-13.key,用DES3加密保护。
注意:
服务器证书中的通用名属性,即CN:Common Name字段,应该和服务器的主机名一致,我都设定为:zy-13,否则,浏览器会报错:ssl_error_bad_cert_domain,如下:
这个要求的作用是显然的,目的是防止其它人冒用服务器证书,比如:当服务器证书,和服务器密钥zy-13.key,同时落入攻击者手中,并且zy-13.key不使用密码保护时,这种冒充攻击就可能奏效。
在实际工作中,CN名应该设定为服务器主机的全域名(FQDN:Fully Qualified Domain Name)。
我在测试中,用IP地址访问HTTPS服务时,浏览器也会出现该错误,这可能是因为主机名和IP地址的映射不是由DNS系统完成的,而是由Windows LAN完成的。
另外,对于这种“无效的安全证书”错误,Firefox有一种“迁就的”用户放过的方法:通过服务器证书的散列码(指纹)和其它属性信息,人工验证证书的有效性,如果最后你确定信任这个证书,可以在Firefox中加入一条“安全例外”。“安全例外”型证书是Firefox对待证书认证的一种灵活方式,但使用这种方式后安全性交由Firefox用户自己负责,而依靠授权证书链的认证策略也荡然无存了,这也不是HTTPS认证的正常使用方式。
安全例外可以在Firefox的报错页面上点击“或者,您可以添加一个例外”来增加,例外的证书被放置在“证书管理器”中的“服务器”类别中,在那里也可以点击“添加例外”增加例外证书。
∙ :用作浏览器中使用的Web客户端证书,PEM格式。它的密钥文件为:zy-1.key,用DES3加密保护。将与zy-1.key合成为PKCS#12格式的文件:zy-1.p12,并设定导出密码(Export Password)保护zy-1.p12文件。
注意:
这个导出密码就是在浏览器中导入PKCS#12文件时,提示输入的密码,而原来的密钥文件zy-1.key的DES3保护密码是没有用的。
HTTPS服务器端认证配置
Apache中对服务器端的HTTPS认证配置、使用过程如下:
1. 启用连衣裙英语怎么说Apache默认附带的HTTPS服务配置文件:sites-available/default-ssl,只需在目录:sites-enabled 中建立一个指向它的符号链接即可:
2. #cd sites-enabled
3. #ln -s -T ../sites-available/default-ssl 001-default-ssl
4. 在:sites-available/default-ssl 中设置HTTPS服务器端认证的选项。首先,启动SSL传输层引擎SSLEngine,如下:
5. # SSL Engine Switch:
6. # Enable/Disable SSL for this virtual host.
7. SSLEngine on
8. 使用SSLCertificateFile和SSLCertificateKeyFile选项,设置服务器证书和服务器密钥zy-13.key。
9. # A lf-signed (snakeoil) certificate can be created by installing
10. # the ssl-cert package. See
11. # /usr/share/doc/apache2.2-common/ for more info.
12. # If both key and certificate are stored in the same file, only the
13. # SSLCertificateFile directive is needed.
14. SSLCertificateFile /root/common/