TLS 配置生成

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 头放在 里;SSLProtocol、SSLCipherSuite、SSLHonorCipherOrder、SSLSessionTickets 可以放在全局(VirtualHost 之外),所有站点共用;SSLStaplingCache 必须放在全局。

提示 Invalid command 'SSLOpenSSLConfCmd' 怎么办?

只有 mod_ssl 基于 OpenSSL 1.0.2 及以上编译时才有这条指令,基于 LibreSSL 或老版 OpenSSL 的构建没有。删掉这一行,或者升级。

资料来源

  1. Apache mod_ssl
  2. Mozilla Server Side TLS