繁体   English   中英

无法在我的系统中正确利用客户端 SNI

[英]Unable to properly utilize client-side SNI across my system

这个问题与我的另一个问题密切相关: Python `urllib3`:突然的“证书验证失败:证书已过期”错误

出于某种原因,我为 SNI 提供正确主机名的尝试似乎没有成功。 这首先体现在链接问题的代理中,因为如果没有正常工作的 SNI,它就无法成功验证证书。 然后,当我使用安装 OpenSSL(与 Python 和系统分开)调试问题时,它也显示相同的标志。 我决定使用此脚本查看至少 Node.js 是否与 SNI 正确配合,但没有运气:

fs = require('fs/promises');
tls = require('tls');

const [,, host, port, file] = process.argv;
const socket = tls.connect({
    host, port,
    servername: host,
    rejectUnauthorized: false,
}, async () => {
    const cert = socket.getPeerCertificate(false);
    result = tls.checkServerIdentity(host, cert) ? 'No.' : 'Yes.';
    console.log('Valid for', cert.subjectaltname + '?', result);
    //await fs.writeFile(file, cert.raw)
    socket.destroy()
});

我认为这个 output 很好地展示了这个问题:

> node .\sni-helper.js i.stack.imgur.com 443 test.tmp
Valid for DNS:*.imgur.com, DNS:imgur.com? No.

许多其他主机名似乎也没有正确反映在提供的证书中。

我的配置:

  • Windows 10 x64 在撰写本文时完全是最新的。
  • Python 3.9.1。
  • Node.js v15.5.1。
  • OpenSSL 1.1.1i 2020 年 12 月 8 日。

其他人有这个问题吗? 除了可能在 OpenSSL 存储库中提交问题外,我不知道 go 的位置在哪里,但我可能只是无法正确设置我的客户而忽略了一些明显的事情,所以我想先和你们核实一下。

原来 NetLimiter 4 是罪魁祸首。 在排除原因时,我最初确实怀疑它,但问题持续了一段时间,我关闭了系统服务,所以我认为它一定是别的东西。 但我当时不知道它还安装了一个独立于服务工作的驱动程序。 一旦我意识到(诚然花了我很长时间)我完全卸载了该程序,现在问题就消失了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM