You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Node.js HTTPS服务器中检测客户端的TLS版本

可以实现,以下是具体方案

服务器配置层面(高效拦截,推荐)

直接在Web服务器层面针对敏感路径限制TLS版本,握手阶段就拒绝不符合要求的连接,性能更优。

Nginx

通过ssl_protocols指令针对特定路径做严格限制:

# 全局允许TLS 1.2和1.3(非敏感路径可正常访问)
ssl_protocols TLSv1.2 TLSv1.3;

# 敏感页面路径仅允许TLS 1.3
location /sensitive {
    ssl_protocols TLSv1.3;
    # 保留原有业务配置(如代理、静态文件规则等)
}

使用TLS 1.2及以下版本的客户端访问该路径时,会直接握手失败,无法建立连接。

Apache

通过SSLProtocol指令结合目录配置实现:

# 全局允许TLS 1.2和1.3
SSLProtocol TLSv1.2 TLSv1.3

# 敏感目录仅允许TLS 1.3
<Directory "/var/www/html/sensitive">
    SSLProtocol TLSv1.3
</Directory>

同样,不符合要求的客户端会在握手阶段被拦截。

应用代码层面(灵活自定义提示)

如果需要给用户返回自定义拒绝提示(而非直接握手失败),可以在应用层获取TLS版本信息并做判断:

PHP

通过$_SERVER['SSL_PROTOCOL']获取当前连接的TLS版本:

if ($_SERVER['SSL_PROTOCOL'] !== 'TLSv1.3') {
    http_response_code(403);
    echo "敏感页面仅支持TLS 1.3连接,请升级您的浏览器或客户端";
    exit;
}
// 后续敏感页面业务逻辑

Node.js(Express)

通过req.socket.getProtocol()获取TLS版本:

app.get('/sensitive', (req, res) => {
    const tlsVersion = req.socket.getProtocol();
    if (tlsVersion !== 'TLSv1.3') {
        res.status(403).send('敏感页面仅支持TLS 1.3连接,请升级您的浏览器或客户端');
        return;
    }
    // 处理敏感页面逻辑
});

注意事项

  • 服务器配置层面的拦截效率更高,无需走到应用层即可拒绝请求。
  • 确保服务器软件版本支持TLS 1.3:Nginx需1.13.0+,Apache需2.4.36+,且依赖的OpenSSL版本在1.1.1及以上。
  • 若需兼容旧客户端访问非敏感页面,全局配置保留TLS 1.2即可,仅针对敏感路径单独限制。

内容的提问来源于stack exchange,提问作者Und Der

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 05:16:03