如何使用Axios获取服务器支持的所有TLS版本与Cipher套件列表
结论
Axios本身的请求/响应对象未提供任何原生属性或方法,可以直接获取目标服务器支持的完整TLS版本和Cipher套件列表。
你当前使用的request.connection.ssl.getCurrentCipher()确实仅能返回当前连接协商使用的单个Cipher套件,TLS版本信息同理仅能获取到当前连接正在使用的版本,无法拿到服务端完整的支持列表。
原因解释
TLS握手是单次协商机制:客户端和服务端只会在握手时选择一组双方都支持的最高优先级TLS版本+Cipher组合用于当前连接,单次Axios请求只会触发一次TLS协商,因此不可能通过单次请求直接拿到服务端所有支持的组合。
可行的实现方案
要获取目标服务端完整的TLS版本和Cipher支持列表,需要主动发起多轮探测,具体逻辑如下:
- 遍历所有主流TLS版本(TLSv1.0、TLSv1.1、TLSv1.2、TLSv1.3)
- 对每个指定的TLS版本,遍历所有可能的Cipher套件,逐个尝试建立TLS连接
- 所有连接成功的TLS版本和Cipher组合,就是该服务端支持的完整列表
你可以基于Node.js原生tls模块实现上述探测逻辑,再封装到Axios的自定义请求逻辑或拦截器中,无需依赖Axios原生能力。
单连接TLS信息获取示例
如果你仅需要当前连接的TLS相关信息,可以从Axios响应对象的底层socket中获取,示例代码如下:
const axios = require('axios').default; const https = require('https'); axios.head('https://example.com', { httpsAgent: new https.Agent({ // 测试环境可临时关闭证书校验,生产环境请勿开启 rejectUnauthorized: false }) }).then(r => { const socket = r.request.socket; // 获取当前连接使用的TLS版本 const usedTlsVersion = socket.getProtocol(); // 获取当前连接使用的Cipher套件信息 const usedCipher = socket.getCipher(); console.log('当前连接TLS版本:', usedTlsVersion); console.log('当前连接Cipher套件:', usedCipher); });
内容的提问来源于stack exchange,提问作者qUEnbcAr
相关产品推荐
相关产品推荐

