在Apache中启用TLSv1.3,除了你提到的OpenSSL版本要求外,还需要特别注意客户端兼容性、密码套件配置以及特定的Apache版本。

以下是详细的配置步骤和关键注意事项:

一、核心前提

在开始配置前,请务必确认以下环境要求:

1.    OpenSSL版本:必须为  1.1.1  或更高版本。这是启用TLSv1.3的绝对前提。

2.    Apache版本:建议使用  2.4.36  及以上版本,以获得对TLSv1.3的完整支持。

二、配置步骤

1.    定位配置文件:根据你的操作系统,主配置文件通常位于以下路径:

              RHEL/CentOS/Fedora:  `/etc/httpd/conf.d/ssl.conf`

              Ubuntu/Debian:  `/etc/apache2/mods-available/ssl.conf`

2.    编辑`SSLProtocol`指令:找到并修改`SSLProtocol`指令,明确启用TLSv1.3。

              同时启用  TLSv1.2  和  TLSv1.3(推荐,兼容性更好):

                ```apache

                SSLProtocol  -all  +TLSv1.2  +TLSv1.3

                ```

                这条指令会禁用所有其他协议,只开启TLS  1.2和1.3。

              仅启用  TLSv1.3(更严格,但可能影响旧客户端):

                ```apache

                SSLProtocol  -all  +TLSv1.3

                ```

3.    (可选)配置密码套件:TLSv1.3的密码套件与旧版本不同,且无法通过传统的`SSLCipherSuite`指令完全控制。

              Apache  2.4.38及以上版本支持使用`SSLCipherSuite`指令为TLSv1.3单独配置密码套件。

              如果未特别指定,Apache通常会使用OpenSSL的默认安全密码套件,这通常已经足够。若需自定义,可参考如下配置:

                ```apache

                #  为  TLSv1.3  设置专用密码套件

                SSLCipherSuite  TLSv1.3  TLS_AES_256_GCM_SHA384:TLS_AES_128_GCM_SHA256

                ```

4.    重启Apache服务:修改配置后,需要重启Apache使更改生效。

        ```bash

        sudo  systemctl  restart  httpd      #  RHEL/CentOS/Fedora

        sudo  systemctl  restart  apache2  #  Ubuntu/Debian

        ```

三、关键注意事项

      客户端兼容性:部分旧版客户端(如Python的某些版本、旧款浏览器)可能不支持TLSv1.3或其后握手认证。

              Firefox:可能需要手动启用`security.tls.enable_post_handshake_auth`参数。

              建议:在生产环境中,强烈推荐同时启用TLSv1.2和TLSv1.3,以确保最大范围的客户端兼容性。

      FIPS模式:如果你的服务器运行在  RHEL  9.2  或更高版本,并启用了FIPS模式,那么客户端必须支持  Extended  Master  Secret  (EMS)扩展  或使用  TLS  1.3  协议。否则,TLS  1.2的连接会失败。

      虚拟主机配置:`SSLProtocol`指令可以在全局或独立的`<VirtualHost>`块中设置。如果不同站点有不同需求,可以在虚拟主机级别进行覆盖。

      性能优化:在Apache  2.4.37+版本中,`SSLBufferLimit`指令需要配合`SSLProtocol  TLSv1.3`和`SSLHonorCipherOrder  on`才能稳定生效,以优化加密吞吐量。

四、验证方法

配置完成后,可以用以下命令验证TLSv1.3是否成功启用:

```bash

openssl  s_client  -connect  your-domain.com:443  -tls1_3

```

如果连接成功,则说明TLSv1.3已正确启用。