详细说明 Apache 2.2、2.4、2.5 版本之间的 SSL 配置差异,帮助您正确配置 SSL 证书
所有 Apache 版本都需要加载 SSL 模块才能使用 HTTPS。不同版本的模块加载方式略有不同:
LoadModule ssl_module modules/mod_ssl.so
LoadModule ssl_module modules/mod_ssl.so
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
这是不同 Apache 版本之间最重要的配置差异:
<VirtualHost *:443>
ServerName yourdomain.com
DocumentRoot "/var/www/html"
SSLEngine on
SSLCertificateFile /path/to/your_domain.crt
SSLCertificateKeyFile /path/to/your_domain.key
SSLCertificateChainFile /path/to/intermediate_ca.crt
</VirtualHost>
<VirtualHost *:443>
ServerName yourdomain.com
DocumentRoot "/var/www/html"
SSLEngine on
SSLCertificateFile /path/to/fullchain.crt
SSLCertificateKeyFile /path/to/your_domain.key
# # 已弃用,但仍可用</VirtualHost>
SSLCertificateChainFile 指令已被弃用 - 从 Apache 2.4.8 开始,SSLCertificateChainFile 指令已被弃用<VirtualHost *:443>
ServerName yourdomain.com
DocumentRoot "/var/www/html"
SSLEngine on
SSLCertificateFile /path/to/your_domain.crt
SSLCertificateKeyFile /path/to/your_domain.key
SSLCertificateChainFile /path/to/intermediate_ca.crt # # 已弃用,但仍可用</VirtualHost>
| 配置项 | Apache 2.2.x | Apache 2.4.x | Apache 2.5.x |
|---|---|---|---|
| SSLProtocol | SSLProtocol all -SSLv2 -SSLv3 | SSLProtocol all -SSLv2 -SSLv3 -TLSv1 | SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 |
| 推荐协议 | TLSv1.2 | TLSv1.2 TLSv1.3 | TLSv1.2 TLSv1.3 |
| SSLCipherSuite | SSLCipherSuite HIGH:!aNULL:!MD5 | SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256 | SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256 |
| HTTP/2 支持 | ❌ 不支持 | ✅ 支持(需 mod_http2) | ✅ 支持 |
| OCSP Stapling | ❌ 不支持 | ✅ 支持 | ✅ 支持 |
<VirtualHost *:443>
ServerName yourdomain.com
DocumentRoot "/var/www/html"
SSLEngine on
SSLCertificateFile /path/to/your_domain.crt
SSLCertificateKeyFile /path/to/your_domain.key
SSLCertificateChainFile /path/to/intermediate_ca.crt
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite HIGH:!aNULL:!MD5
SSLHonorCipherOrder on
</VirtualHost>
<VirtualHost *:443>
ServerName yourdomain.com
DocumentRoot "/var/www/html"
SSLEngine on
SSLCertificateFile /path/to/fullchain.crt
SSLCertificateKeyFile /path/to/your_domain.key
# # 现代 TLS 协议配置 SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384
SSLHonorCipherOrder on
# # HTTP/2 支持(需要 mod_http2) Protocols h2 http/1.1
# # OCSP Stapling(提升性能) SSLUseStapling on
SSLStaplingCache "shmcb:logs/ssl_stapling(32768)"
SSLStaplingResponderTimeout 5
SSLStaplingReturnResponderErrors off
# # SSL 会话缓存 SSLSessionCache "shmcb:logs/ssl_scache(512000)"
SSLSessionCacheTimeout 300
</VirtualHost>
<VirtualHost *:80>
ServerName yourdomain.com
Redirect permanent / https://yourdomain.com/
</VirtualHost>
<VirtualHost *:80>
ServerName yourdomain.com
Redirect permanent / https://yourdomain.com/
</VirtualHost>
# # 或者使用 mod_rewrite(更灵活)<VirtualHost *:80>
ServerName yourdomain.com
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</VirtualHost>
# 禁用不安全的协议SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
# 使用强加密套件SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384
# 启用 HSTS(HTTP Strict Transport Security)Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
# 启用安全头Header always set X-Frame-Options "SAMEORIGIN"
Header always set X-Content-Type-Options "nosniff"
Header always set X-XSS-Protection "1; mode=block"
# Linux
httpd -v
# # 或apache2 -v
# # 查看已加载的模块httpd -M | grep ssl
# # 测试配置文件语法httpd -t
# # 或apache2ctl configtest
# # 如果配置正确,会显示 "Syntax OK"
SSLCertificateChainFile: file '/path/to/chain.crt' does not exist or is emptySSL library error: error:140A90A1:SSL routines:SSL_CTX_new:unable to find ssl methodAH00558: httpd: Could not reliably determine the server's fully qualified domain name# 使用在线工具验证https://www.ssllabs.com/ssltest/
https://myssl.com/
# 使用命令行工具openssl s_client -connect yourdomain.com:443 -servername yourdomain.com
cp -r /etc/httpd /etc/httpd.backupcat your_domain.crt intermediate_ca.crt > fullchain.crtSSLCertificateChainFile,使用合并后的 fullchain.crthttpd -t 检查语法systemctl restart httpd