SSL证书的配置过程
Apache 2配置SSL证书
本文描述在 Apache 2.x HTTP 服务器上安装并配置 SSL 证书。
确保Apache SSL模块的开启
1 | sudo a2enmod ssl |
配置SSL证书
完整的SSL证书分为四个部分:
- CA 根证书 (root CA)
- 中级证书 (Intermediate Certificate)
- 域名证书
- 证书密钥 (仅本人持有)
以 COMODO PositiveSSL 证书为例,将收到四份文件:
- 根证书 -
AddTrustExternalCARoot.crt
- 中级证书 -
COMODORSAAddTrustCA.crt
- 中级证书 -
COMODORSADomainValidationSecureServerCA.crt
- 您的域名证书 -
example_com.crt
要依照 中间证书 -> 根证书 的顺序串联为证书链,才能被绝大多数浏览器信任。使用 cat
命令串联证书:
1 | 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 部分配置
1 | SSLEngine on |
以下为
1 | <VirtualHost *:443> |
请注意如果你的 Apache2 版本大于 2.4.8,您可以将所有证书串联为一个文件作为 SSLCertificateFile 的值,而不必写 SSLCertificateChainFile
强制定向到HTTPS
首先,我们需要确认 Apache 开启 mod_rewrite
模块,如果没有开启,请使用 sudo a2enmod rewrite
命令开启。
其次,你需要在站点配置文件中开启 AllowOverride
,这样 .htaccess
文件才会起作用。
开启并重启 Apache
后,复制一下代码到你目录的 .htaccess
文件
1 | RewriteEngine On |
SSL安全配置
禁用压缩
1 | SSLCompression off |
禁用 SSLv2 和 SSLv3
1 | SSLProtocol All -SSLv2 -SSLv3 |
抵御 Poodle 和 SSL Downgrade 攻击
您需要支持 TLS-FALLBACK-SCSV
以自动开启此功能。下列 OpenSSL 版本包含对 TLS-FALLBACK-SCSV
的支持,Lighttpd 会自动启用此特性。
- OpenSSL 1.0.1 在
1.0.1j
及之后的版本中支持 - OpenSSL 1.0.0 在
1.0.0o
及之后的版本中支持 - OpenSSL 0.9.8 在
0.9.8zc
及之后的版本中支持
加密和交换算法
一份推荐的配置:
1 | SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH |
如果您需要兼容老式系统和浏览器 (Windows XP, IE6),请使用下面的:
1 | 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 参数
1 | cd /etc/ssl/certs |
建议您使用性能强劲的平台生成此文件,例如最新版的至强物理机。如果您只有一台小型 VPS,请使用 openssl dhparam -out dhparam.pem 2048
命令生成 2048bit 的参数文件。
添加到配置文件:
1 | SSLOpenSSLConfCmd DHParameters "/etc/ssl/certs/dhparam.pem" |
启用 HSTS
添加到配置文件:
1 | Optionally load the headers module: |
重启 Apache
1 | sudo service apache2 restart |