SNI detector,一个用于验证 SNI 服务器域名的 Nodejs 命令行工具

发布于 1周前 作者 ionicwang 来自 nodejs/Nestjs

SNI detector,一个用于验证 SNI 服务器域名的 Nodejs 命令行工具

当我们需要验证一个服务器上的 SNI 域名是否正常的时候,通常需要在浏览器或 openssl 来获取到证书,然后检查证书里相应的字段是否包含域名,但这种方式极为不便。

为了简化验证的过程,我使用 Nodejs 开发了一个小工具 sni-detector 用于验证指定服务 器上的 SNI 是否包含指定的测试域名。

使用方式非常简单,先使用 NPM 来安装:

npm install -g sni-detecotr

在安装成功后,就可以使用 sni-detect 命令来验证了。

使用 sni-detect --help 可以查看相应的参数说明,在此,我以测试域名 www.baidu.comimg.baidu.com 来验证 IP 为 14.215.177.52 的服务器为例:

sni-detect -t www.baidu.com,img.baidu.com 14.215.177.53

如果返回 14.215.177.52 OK 表明验证通过,如果返回 14.215.177.52 Failue 表明验证失败。 这里如果需要查看失败的详细信息,可以加上 --verbose 参数:

sni-detect -t www.baidu.com,img.baidu.com --verbose 14.215.177.53

PS :本工具仅支持 Node.js v6+

本工具也同时开源在 Github 上,欢迎提 issue 和 PR 。


3 回复

不错 想试试 感谢

针对您提到的SNI detector——一个用于验证SNI服务器域名的Nodejs命令行工具,我可以提供一个基于Node.js的SNI检测工具开发思路及部分代码示例。

首先,SNI(Server Name Indication)是TLS协议的一个扩展,允许客户端在建立加密连接时指定要访问的服务器名称。开发一个Node.js命令行工具来验证SNI服务器域名,可以借助Node.js的tls模块和net模块。

以下是一个简单的代码示例,展示了如何使用tls模块连接到服务器并获取其SNI信息:

const tls = require('tls');
const net = require('net');

const options = {
  servername: 'target.com', // 目标服务器域名
  // 其他TLS选项...
};

const socket = tls.connect(443, options, () => {
  console.log('Connected to server!');
  // 在此处可以进一步处理服务器响应
  socket.end();
});

socket.on('secureConnect', () => {
  console.log('Secure connection established!');
  // 获取服务器证书并打印SNI信息
  const serverCert = socket.getPeerCertificate();
  console.log('SNI Hostname:', serverCert.subject.CN);
});

socket.on('error', (err) => {
  console.error('Error:', err);
});

请注意,上述代码仅展示了如何建立TLS连接并获取服务器证书的基本框架。要开发一个完整的SNI检测工具,您还需要添加域名验证逻辑、错误处理、命令行参数解析等功能。同时,考虑到安全性和效率,您可能还需要使用异步编程和并发处理技术。

回到顶部