返回介绍

Apache 2 配置 SSL

发布于 2024-06-22 18:37:49 字数 4509 浏览 0 评论 0 收藏 0

本文档指导您在 Apache 2.x HTTP 服务器上安装并配置 SSL 证书,关于 Apache 2.x 在各个平台上的安装不再涉及。

由于近年 OpenSSL 高危漏洞不断,因此强烈推荐您在开始配置之前首先升级 OpenSSL 到最新版本

确保 Apache SSL 模块开启

sudo a2enmod ssl

配置 SSL 证书

完整的 SSL 证书分为四个部分:

  • CA 根证书 (root CA)
  • 中级证书 (Intermediate Certificate)
  • 域名证书
  • 证书密钥 (仅由您持有)

以 COMODO PositiveSSL 证书为例,您将收到四份文件:

  • 根证书 - AddTrustExternalCARoot.crt
  • 中级证书 - COMODORSAAddTrustCA.crt
  • 中级证书 - COMODORSADomainValidationSecureServerCA.crt
  • 您的域名证书 - example_com.crt

您要依照 中间证书 -> 根证书 的顺序串联为证书链,才能被绝大多数浏览器信任。使用 cat 命令串联证书:

cat COMODORSADomainValidationSecureServerCA.crt COMODORSAAddTrustCA.crt AddTrustExternalCARoot.crt > ca-bundle.crt

得到 ca-bundle.crt 后,和证书文件 example_com.crt,密钥文件 example_com.key 一同上传至服务器并保存在安全的位置,例如 /etc/ssl/private 目录下 (没有此目录请创建)。

修改 Apache 站点配置

下面是一份针对 Apache 2.4 的 SSL 部分配置

SSLEngine on
SSLCertificateFile    /etc/ssl/private/example_com.crt
SSLCertificateKeyFile /etc/ssl/private/example_com.key
SSLCertificateChainFile /etc/ssl/private/ca-bundle.crt

以下为 <VirtualHost> 的详细配置

<VirtualHost *:443>
DocumentRoot /var/www/
SSLEngine on
SSLCertificateFile    /etc/ssl/private/example_com.crt
SSLCertificateKeyFile /etc/ssl/private/example_com.key
SSLCertificateChainFile /etc/ssl/private/ca-bundle.crt
</VirtualHost>

请注意如果您的 Apache2 版本大于 2.4.8,您可以将所有证书串联为一个文件作为 SSLCertificateFile 的值,而不必写 SSLCertificateChainFile

强制定向到 HTTPS

首先,我们需要确认 Apache 开启 mod_rewrite 模块,如果没有开启,请使用 sudo a2enmod rewrite 命令开启。

其次,你需要在站点配置文件中开启 AllowOverride,这样 .htaccess 文件才会起作用。

开启并重启 Apache 后,复制一下代码到你目录的 .htaccess 文件

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

SSL 安全配置

禁用压缩
SSLCompression off
禁用 SSLv2 和 SSLv3
SSLProtocol All -SSLv2 -SSLv3
抵御 Poodle 和 SSL Downgrade 攻击

您需要支持 TLS-FALLBACK-SCSV 以自动开启此功能。下列 OpenSSL 版本包含对 TLS-FALLBACK-SCSV 的支持,Lighttpd 会自动启用此特性。

  • OpenSSL 1.0.11.0.1j 及之后的版本中支持
  • OpenSSL 1.0.01.0.0o 及之后的版本中支持
  • OpenSSL 0.9.80.9.8zc 及之后的版本中支持
加密和交换算法

一份推荐的配置:

SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH

如果您需要兼容老式系统和浏览器 (Windows XP, IE6),请使用下面的:

SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:ECDHE-RSA-AES128-SHA:DHE-RSA-AES128-GCM-SHA256:AES256+EDH:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4
Forward Secrecy 和 DHE 参数
cd /etc/ssl/certs
openssl dhparam -out dhparam.pem 4096

建议您使用性能强劲的平台生成此文件,例如最新版的至强物理机。如果您只有一台小型 VPS,请使用 openssl dhparam -out dhparam.pem 2048 命令生成 2048bit 的参数文件。

添加到配置文件:

SSLOpenSSLConfCmd DHParameters "/etc/ssl/certs/dhparam.pem"
启用 HSTS

添加到配置文件:

# Optionally load the headers module:
LoadModule headers_module modules/mod_headers.so

<VirtualHost 67.89.123.45:443>
    Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
</VirtualHost>

重启 Apache

sudo service apache2 restart

您可能需要:

按这里购买 SSL 证书

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文