Apache SSL 配置生成器
为 Apache httpd 生成带 TLS 1.2/1.3、HSTS 和 HTTPS 跳转的 mod_ssl 配置,并列出需要的模块和版本。
浏览器本地运行 你输入的内容只在本地用 JavaScript 处理,不会上传到 ssl.sh。
TLS 配置生成器的 Apache 预设生成 Apache httpd 的 mod_ssl 配置。选好档位和选项,把结果复制到站点配置(比如 /etc/apache2/sites-available/example.com-ssl.conf 或 /etc/httpd/conf.d/ssl.conf),用 apachectl configtest 测试后重载。
示例:中级档
<VirtualHost *:80>
ServerName example.com
RewriteEngine On
RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]
</VirtualHost>
<VirtualHost *:443>
ServerName example.com
SSLEngine on
SSLCertificateFile /etc/ssl/example.com/fullchain.pem
SSLCertificateKeyFile /etc/ssl/example.com/privkey.pem
Protocols h2 http/1.1
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains"
</VirtualHost>
# 全局设置(VirtualHost 之外)
SSLProtocol -all +TLSv1.2 +TLSv1.3
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305
SSLOpenSSLConfCmd Curves X25519:prime256v1:secp384r1
SSLHonorCipherOrder off
SSLSessionTickets off
国内环境说明
- 阿里云、腾讯云下载的 Apache 证书包通常有三个文件:站点证书、证书链(chain/root_bundle)和私钥。Apache 2.4.8 及以上可以把站点证书和证书链合并成一个文件给
SSLCertificateFile;更老的版本分别写SSLCertificateFile和SSLCertificateChainFile。 - CentOS 7 自带 Apache 2.4.6 和 OpenSSL 1.0.2,不支持 TLS 1.3,也不支持在
SSLCertificateFile里放证书链,需要用SSLCertificateChainFile。
版本要求
- Apache 2.4.37+ 和 OpenSSL 1.1.1+ 才有 TLS 1.3(用
apachectl -V和openssl version查看)。 - mod_http2 才能用
Protocols h2 http/1.1,没有就删掉这一行。 - X25519MLKEM768:httpd 链接 OpenSSL 3.5+ 时,把 Curves 那一行换成
SSLOpenSSLConfCmd Groups X25519MLKEM768:X25519:prime256v1:secp384r1。
测试并重载
sudo apachectl configtest && sudo systemctl reload apache2 # CentOS/Rocky 上是 httpd
常见错误
- SSLProtocol 写了好几处:发行版的
ssl.conf、certbot 写的options-ssl-apache.conf里都可能有,最后读到的生效。用grep -ri sslprotocol /etc/apache2 /etc/httpd找出来。 - HSTS 头没出来:没启用
mod_headers,或者只写在了 80 端口的 VirtualHost 里。 - 证书链文件过期:续期后
SSLCertificateChainFile还指向旧的中间证书。改用SSLCertificateFile放完整证书链。
常见问题
需要哪些模块?
mod_ssl 提供 TLS,mod_headers 加 HSTS 头,mod_rewrite 做跳转,mod_http2 提供 HTTP/2。Debian/Ubuntu 用 a2enmod ssl headers rewrite http2 启用;CentOS/Rocky 装 mod_ssl 包即可。
各个指令放在哪里?
证书文件、ServerName、HSTS 头放在
提示 Invalid command 'SSLOpenSSLConfCmd' 怎么办?
只有 mod_ssl 基于 OpenSSL 1.0.2 及以上编译时才有这条指令,基于 LibreSSL 或老版 OpenSSL 的构建没有。删掉这一行,或者升级。