ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:155.22KB ,
资源ID:29903332      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/29903332.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Linux Apache 的 HTTPS 配置.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Linux Apache 的 HTTPS 配置.docx

1、Linux Apache 的 HTTPS 配置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 X

2、P 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 是怎么组织

3、的。下面简单列举一下 Apache 配置文件的组织结构: apache2.conf:Apache 的入口配置文件,包含其它配置文件的主控文件 conf.d/:包含一些零碎的配置,一般不和具体的 mod 相关,是全局性质的,比如:字符集 charset、安全选项 security。 ports.conf:设置 Apache 的监听端口,默认时,HTTP 为 80,HTTPS 为 443。 envvars:导出一些环境变量,比如: export APACHE_RUN_USER=www-data export APACHE_RUN_GROUP=www-data export APACHE_PID_F

4、ILE=/var/run/apache2.pid httpd.conf:额外的用户设置的配置,默认里面内容为空。Windows 下的 Apache 喜欢用这个名字作为主控配置文件,但在 Linux 下,作用不大。 mods-available/:包含 Apache 中所有可用 mod 的加载和设置配置,加载配置一般用 xxx.load 表示,设置配置一般用 xxx.conf 表示,比如:mod_ssl 的加载配置为:ssl.load,设置配置为:ssl.conf mods-enabled/:实际启动的 mod 的加载和设置配置,是到 mods-available/ 中配置文件的符号链接。 si

5、tes-available/:Web 站点的配置,可以是全局的,或虚拟主机作用域的。默认有两个附带的配置文件:default、default-ssl,其中 default 为一般的 HTTP 服务的虚拟主机配置,而 default-ssl 就是 HTTPS 服务的虚拟主机配置。这两个配置文件可以直接使用,配置内容只需做适当的调整即可。 sites-enabled/:实际启动的 Web 站点配置,是到 sites-available/ 中配置文件的符号链接。默认时,只有一个 000-default 链接指向 sites-available/default,说明默认的 Apache 配置,只启动

6、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 停止服务,如下: # /et

7、c/init.d/apache2 start Starting web server: apache2apache2: Could not reliably determine the servers fully qualified domain name, using 192.168.2.108 for ServerName # /etc/init.d/apache2 stop Stopping web server: apache2apache2: Could not reliably determine the servers fully qualified domain name, u

8、sing 192.168.2.108 for ServerName . waiting . Web 文件目录:使用 sites-available 中,配置文件 default 和 default-ssl 的 DocumentRoot 选项,默认指定的 Web 文件目录:/var/www/。/var/www 目录下默认只有一个 Web 文件:index.html,我就用它作为 HTTPS 配置的测试页面,并更改了下它的内容:Hello World! -zy证书、密钥和测试场景有 2 台主机系统: 一个 Linux 安装 Apache 服务器,主机名:zy-13 另一个为 Windows,使用

9、Firefox 作为浏览器,主机名:zy-1。使用 Firefox 作为浏览器,是因为 HTTPS 基于的 SSL 最早是由 Netscape 提出的,并且 Netscape 一直在发展 SSL 技术(参考:Mozilla SSL/TLS),而 Mozilla 是 Netscape 的开源社区,所以我想 Mozilla 的 Firefox 应该比其它浏览器对 SSL 支持地更完善(其实这是借口,我只是喜欢用 Firefox 而已)。有3套证书,用openssl工具生成,作用如下: zy-root.cer:用作CA证书,PEM格式,对其它两个证书进行签发,它自己是自签的。 zy-13.cer:用

10、作Web服务器证书,PEM格式。它的密钥文件为:zy-13.key,用DES3加密保护。注意:服务器证书zy-13.cer中的通用名属性,即CN:Common Name字段,应该和服务器的主机名一致,我都设定为:zy-13,否则,浏览器会报错:ssl_error_bad_cert_domain,如下:这个要求的作用是显然的,目的是防止其它人冒用服务器证书,比如:当服务器证书zy-13.cer,和服务器密钥zy-13.key,同时落入攻击者手中,并且zy-13.key不使用密码保护时,这种冒充攻击就可能奏效。在实际工作中,CN名应该设定为服务器主机的全域名(FQDN:Fully Qualifie

11、d Domain Name)。我在测试中,用IP地址访问HTTPS服务时,浏览器也会出现该错误,这可能是因为主机名和IP地址的映射不是由DNS系统完成的,而是由Windows LAN完成的。另外,对于这种“无效的安全证书”错误,Firefox有一种“迁就的”用户放过的方法:通过服务器证书的散列码(指纹)和其它属性信息,人工验证证书的有效性,如果最后你确定信任这个证书,可以在Firefox中加入一条“安全例外”。“安全例外”型证书是Firefox对待证书认证的一种灵活方式,但使用这种方式后安全性交由Firefox用户自己负责,而依靠授权证书链的认证策略也荡然无存了,这也不是HTTPS认证的正常使

12、用方式。安全例外可以在Firefox的报错页面上点击“或者,您可以添加一个例外”来增加,例外的证书被放置在“证书管理器”中的“服务器”类别中,在那里也可以点击“添加例外”增加例外证书。 zy-1.cer:用作浏览器中使用的Web客户端证书,PEM格式。它的密钥文件为:zy-1.key,用DES3加密保护。将zy-1.cer与zy-1.key合成为PKCS#12格式的文件:zy-1.p12,并设定导出密码(Export Password)保护zy-1.p12文件。注意:这个导出密码就是在浏览器中导入PKCS#12文件时,提示输入的密码,而原来的密钥文件zy-1.key的DES3保护密码是没有用的

13、。HTTPS服务器端认证配置Apache中对服务器端的HTTPS认证配置、使用过程如下:1. 启用Apache默认附带的HTTPS服务配置文件:sites-available/default-ssl,只需在目录:sites-enabled 中建立一个指向它的符号链接即可:2. #cd sites-enabled3. #ln -s -T ./sites-available/default-ssl 001-default-ssl4. 在:sites-available/default-ssl 中设置HTTPS服务器端认证的选项。首先,启动SSL传输层引擎SSLEngine,如下:5. # SSL

14、Engine Switch:6. # Enable/Disable SSL for this virtual host.7. SSLEngine on8. 使用SSLCertificateFile和SSLCertificateKeyFile选项,设置服务器证书zy-13.cer和服务器密钥zy-13.key。9. # A self-signed (snakeoil) certificate can be created by installing10. # the ssl-cert package. See11. # /usr/share/doc/apache2.2-common/README

15、.Debian.gz for more info.12. # If both key and certificate are stored in the same file, only the13. # SSLCertificateFile directive is needed.14. SSLCertificateFile /root/common/key/zy-13.cer15. SSLCertificateKeyFile /root/common/key/zy-13.key设置完后,服务器端认证大致就配置完成了,不要忘记重启Apache服务器。如果服务器密钥文件zy-13.key使用密码

16、加密保护,则在启动Apache时会提示用户输入密码,以解密zy-13.key获得明文的密钥信息,如下:# /etc/init.d/apache2 startStarting web server: apache2apache2: Could not reliably determine the servers fully qualified domain name, using 192.168.2.108 for ServerNameApache/2.2.9 mod_ssl/2.2.9 (Pass Phrase Dialog)Some of your private key files are

17、 encrypted for security reasons.In order to read them you have to provide the pass phrases.Server zy-13:443 (RSA)Enter pass phrase:(这里输入密码,无击键反馈回显)OK: Pass Phrase Dialog successful.16. 现在可以使用Firefox测试一下效果。用Firefox连接服务器端,地址中的服务器端主机名应该写为服务器证书zy-13中CN字段记录的值,不要使用IP地址来连接服务器,否则Firefox会报ssl_error_bad_cert_

18、domain错误。因此,连接地址为:https:/zy-13/index.html。一开始连接这个地址时,Firefox会报错:sec_error_unknown_issuer,如下:说明服务器证书的签发者不被Firefox信任,这是当然的,因为服务器证书zy-13.cer是我自己用另外一个证书zy-root.cer签的,zy-root.cer是我认为的CA证书,但Firefox并不认为它是,Firefox会预置一些CA证书,但通常它们都是由大的安全公司、机构生成的证书,比如:VeriSign、Thawte,所以需要手工导入自己的CA证书zy-root.cer到Firefox的证书管理器中。导

19、入在这里操作:选项高级加密查看证书证书机构导入。17. 再次测试Firefox连接服务器端,这次就可以连接成功,Firefox取回并显示index.html页面。在通过HTTPS验证的连接中,Firefox会在状态栏显示此图标:,双击此图标会弹出“页面信息”对话框,选择它的“安全”一栏就可以查看HTTPS连接的细节和相关的证书信息:点击“安全”中的“查看证书”可以查看当前服务器证书zy-13.cer的信息:注意上面显示的证书的组织名:zy-home,这是证书中的:O(Organization Name) 字段设置的,在Firefox中这个名字也被认为是验证者的名字。如果想查看服务器证书zy-1

20、3.cer的更多内容,可以换到证书查看器的“细节”选项卡,这里显示证书结构(即证书链),和证书字段,如下:HTTPS客户端认证配置Apache中对客户端(浏览器)的HTTPS认证配置,是建立在已完成的服务器端认证配置基础之上,也在HTTPS服务配置文件:sites-available/default-ssl 中设置。客户端的认证配置、使用过程如下:1. 设置SSLVerifyClient和SSLVerifyDepth,如下:2. # Client Authentication (Type):3. # Client certificate verification type and depth.

21、 Types are4. # none, optional, require and optional_no_ca. Depth is a5. # number which specifies how deeply to verify the certificate6. # issuer chain before deciding the certificate is not valid.7. SSLVerifyClient require8. SSLVerifyDepth 10设置完后,使用Firefox测试一下,Firefox会报:ssl_error_handshake_failure_a

22、lert 错误,如下:再看看Apache的错误日志error.log,其中记录到:Sun Oct 11 00:13:34 2009 warn Init: Oops, you want to request client authentication, but no CAs are known for verification!? Hint: SSLCACertificate*说明Apache中需要设置CA证书信息,此证书的作用就是:在服务器端,对客户端证书进行验签。上述的:SSLCACertificate*,指代两个选项:SSLCACertificatePath、SSLCACertificat

23、eFile,这两个选项都可以用来设置CA证书。9. 使用SSLCACertificatePath、SSLCACertificateFile 选项设置CA证书。将用于签名客户端证书zy-1.cer的CA证书zy-root.cer,拷贝到Apache2所装系统的某个目录下,比如拷贝到:/root/common/key/zy-root.cer,然后用SSLCACertificateFile设置该CA证书路径,如下:# Certificate Authority (CA):# Set the CA certificate verification path where to find CA# cert

24、ificates for client authentication or alternatively one# huge file containing all of them (file must be PEM encoded)# Note: Inside SSLCACertificatePath you need hash symlinks# to point to the certificate files. Use the provided# Makefile to update the hash symlinks after changes.# SSLCACertificatePa

25、th /etc/ssl/certs/SSLCACertificateFile /root/common/key/zy-root.cer当使用SSLCACertificatePath 选项,指定一个存储多个CA证书的目录时,要求这个目录中的CA证书必需是一个指向实际证书文件的符号链接,并且符号链接的名字应该是通过openssl工具对证书文件进行散列后的散列码,据说在mod_ssl中提供了一个Makefile来做这件事情,不过我始终没找到在Apache2安装包中还有什么SSL的Makefile,倒是在ssl-cert包中找到了一个叫:make-ssl-cert 的bash脚本,其中有几句:cd /

26、etc/ssl/certs/ln -sf ssl-cert-snakeoil.pem $(openssl x509 -hash -noout -in ssl-cert-snakeoil.pem)我感觉这就是用openssl产生证书散列码,并建立符号链接的过程,于是我仿照这个命令建立了自己的CA证书zy-root.cer的符号链接,但是测试后发现不行:Firefox一直处在连接中状态,似乎是Apache无法找到合适的CA证书来验证客户端证书的有效性(/etc/ssl/certs 下的证书符号链接很多),所以我干脆就用SSLCACertificateFile来设置CA证书了,注意:用SSLCACe

27、rtificateFile设置的CA证书必需是BASE64编码的PEM格式的证书。关于SSLCACertificatePath,有兴趣的人可以参考:Apache2 mod_ssl文档 中“SSLCACertificatePath 指令”一节,虽然它说地的内容很少,(-_-)。CA证书设置完成后,再用Firefox测试,仍然是错误:ssl_error_handshake_failure_alert。不要紧张,这是因为在浏览器中没有候选的客户端证书导致的,可以在Firefox的:选项高级加密查看证书您的证书,中导入PKCS#12格式的证书文件,因为PKCS#12证书中含有私钥部分,所以在导入时会提

28、示输入保护密码。另外,在 Firefox 的:选项高级加密,中有两种Firefox提供客户端证书给服务器的策略方式,可以在“当某个服务器请求我的个人证书:”选项下进行设置,分别是:“自动选择一个”和“每次均询问”,默认为:每次均询问。10. 看似一切均设置妥当,再用Firefox测试。如果设置“每次均询问”的方式提供客户端证书,则此时会弹出“使用确认请求”对话框,让用户选择一个已导入的客户端证书,证书以证书序号标识,并显示了证书的一些属性信息,如下图:确认客户端证书后,Firefox继续连接建立过程,但却报出错误:ssl_error_bad_cert_alert,如下:而Apache的错误日志

29、error.log 中记录:Fri Jan 01 00:05:28 2010 error Certificate Verification: Error (9): certificate is not yet valid我在网上查了半天也没找到问题的原因,又改了其它几个Apache配置选项还是不行,仍然出同样的错误。提示说错误证书,究竟是什么造成的呢?最后我直接搜Apache日志中的错误描述:certificate is not yet valid,在OpenSSL官方网站的:openssl工具的verify命令文档 中找到了点线索,摘录如下:9 X509_V_ERR_CERT_NOT_YET

30、_VALID: certificate is not yet validthe certificate is not yet valid: the notBefore date is after the current time. 证书中的Not Before时间和系统时间?难道是造成“错误证书”的原因是这个,我用:date +%Y-%m-%d %T 查了下Apache的系统时间,果然不对劲:我的Linux的系统时间,竟然比CA证书和客户端证书的Not Before时间还早,于是我终于想起来了:我用的VMware中Guest OS的Debian Linux系统,是我以前做的,拷贝到新的宿主机上后就没改过Linux的系统时间,(-_-)。知道这一点后,赶紧用:date -s yyyy-mm-dd,把Linux系统时间改成正确的时间,至少要在证书的Not Before与Not After两个时间之间。证书的有效时间信息可以用此命令显示:openssl x509 -noout -text -in file.cer。设置完系统时间后,重启Apache服务,再用Firefox测试,确认客户端证书后,Firefox终于完成与服务器的HTTPS连接,显示网页内容。至此,Apache的HTTPS客户端认证配置完成。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1