phpEnv配置站点启用TLS 1.3 phpEnv安全加密升级
phpEnv 本身不直接处理 TLS 协议协商,它只是一个 Windows 下的 PHP 环境集成包(含 Apache/Nginx + PHP + MySQL),真正启用 TLS 1.3 的责任在它所搭载的 Web 服务器上 —— 你用的是 Apache 还是 Nginx?两者配置逻辑完全不同,混用会导致ssl_protocols不生效甚至服务启动失败。
确认底层 Web 服务器和 OpenSSL 版本
phpEnv 默认捆绑的 Apache 或 Nginx 往往基于较旧的 OpenSSL(如 1.0.2 或 1.1.0),而 TLS 1.3 要求 OpenSSL ≥ 1.1.1。不升级就硬加TLSv1.3,Nginx 会静默忽略,Apache 则可能报错或降级到 TLS 1.2。
- 打开 phpEnv 控制面板 → “软件管理” → 查看 Apache/Nginx 的版本及编译信息;
- 在命令行执行:
phpenv\nginx\nginx.exe -V或phpenv\apache\bin\httpd.exe -V,搜索OpenSSL字样; - 若显示
OpenSSL 1.1.1或更高(如1.1.1w),可继续;否则必须手动替换 OpenSSL DLL 并重编译/替换服务器二进制(风险高,不推荐新手操作); - 注意:phpEnv 官方未提供 TLS 1.3 就绪版,绝大多数用户实际运行的是 OpenSSL 1.0.2u,此时
TLSv1.3配置无效。
Nginx 模式下启用 TLS 1.3 的最小安全配置
如果你确认 phpEnv 使用的是 Nginx 且 OpenSSL ≥ 1.1.1,修改站点对应的nginx/conf/vhost/xxx.conf中的server块:
ssl_protocols必须显式包含TLSv1.2 TLSv1.3,不能只写TLSv1.3(否则 IE11、旧安卓 WebView 会直连失败);ssl_ciphers必须**严格区分 TLS 1.3 和 TLS 1.2 套件**:TLS 1.3 套件名以TLS_AES_或TLS_CHACHA20_开头,不能混入ECDHE-RSA-AES256-GCM-SHA384这类 TLS 1.2 套件;- 推荐写法:
ssl_ciphers "TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384"; - 删掉
ssl_prefer_server_ciphers on;—— TLS 1.3 下该指令已无作用,保留反而干扰调试; - 配置后务必运行
nginx -t测试语法,再用 phpEnv 面板重启 Nginx。
Apache 模式下 TLS 1.3 配置陷阱
Apache 2.4.37+ 才原生支持 TLS 1.3,但 phpEnv 捆绑的 Apache 多为 2.4.23 或更早。即使强行升级,SSLProtocol指令不支持TLSv1.3字面量(需用+TLSv1.3且依赖 mod_ssl 编译选项)。
