问题标签 [schannel]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
461 浏览

windows - Windows LDAP 客户端 - 通过 CRL 启用撤销

我正在使用 Windows LDAP 客户端 DLL (wldap32.dll) 连接到远程 LDAP 服务器。连接通过 TLS(端口 636 上的 LDAPS 协议)完成。

我的问题是启用 CRL 撤销。我发现可以使用以下方法为 LDAP 会话设置 schannel 选项:

ldap_set_option(LDAP_OPT_SCH_FLAGS, &uLong);

所以我尝试将 SCH_CRED_REVOCATION_CHECK_CHAIN 选项传递给上述调用(当然是在 ldap_bind_s 之前),但是在检查了 wireshark 流量之后,我看到效果是客户端正在从服务器请求 OCSP 状态,这似乎失败了( TLS 握手被中止,因为没有返回 OCSP 状态)但是,服务器证书确实包含 CDP,我希望客户端使用它通过指定的 CRL 执行吊销检查,而不是通过 OCSP。

这只是 schannel 的限制还是我做错了什么?

谢谢

阿米特

0 投票
1 回答
407 浏览

c++ - 使用 SCH_CRED_FORMAT_CERT_HASH 时,AcquireCredentialsHandle 在内核模式下失败

我在内核驱动程序中调用AcquireCredentialsHandle ,传入SCHANNEL_CREDdwCredFormat设置为SCH_CRED_FORMAT_CERT_HASH. 它失败了SEC_E_NO_CREDENTIALS。这是我的代码:

对于用户帐户和本地计算机,我的证书哈希绝对正确,并且正确安装在 MY 商店中。我知道这一点是因为它在用户模式下工作正常,如下所示:

我相信我按照 MSDN 关于如何使用的说明进行操作SCH_CRED_FORMAT_CERT_HASH- 有什么问题?

0 投票
1 回答
123 浏览

windows - 添加符合 SSPI (Windows) 的第三方密码套件

我们有一个当前通过 SSPI 调用使用 schannel 的套接字类(这是一个遗留的 Windows 桌面应用程序)。问题是我们的应用程序必须支持密码套件 TLS_ECDHE_ECDSA_WITH _AES_128_CCM_8,据我所知,这在 schannel 中不可用。该套件在 OpenSSL 中可用,但重写大量套接字代码以适应 OpenSSL 将是一个非常糟糕的选择 - 理想的情况是将 OpenSSL 包装为 SSPI 格式并让代码保持相同的接口。我希望我可以追求以下选择之一:

A. 添加(或安装)OpenSSL 作为 Windows 的备用 SSP,以实现 SSP 接口(这甚至可能“开箱即用”吗?)

B. 作为下一个最好的方法,编写一个包含 OpenSSL 的自定义 SSP 并将其添加到 windows - 我还没有找到很多关于如何做到这一点的好例子,但它显然是可能的。

对于如何将 TLS_ECDHE_ECDSA_WITH _AES_128_CCM_8 引入我们当前在 Windows 中的套接字代码,我愿意接受任何其他(微创)建议。有没有人面临类似的问题?你是怎么解决的?

0 投票
0 回答
2323 浏览

ssl - VBScript 中的 MSXML2.ServerXMLHTTP.6.0 对象 - SSL 证书链信任问题

我需要从 VBScript 向受 SSL 保护的域发出 HTTP 请求。由于 SSL 证书信任失败,我用来执行此操作的库 ServerXMLHTTP 似乎无法连接。这看起来很奇怪,因为当我在 Google Chrome 中浏览域时,它会报告整个证书链是受信任的。

在 ServerXMLHTTP 对象上设置“SXH_SERVER_CERT_IGNORE_ALL_SERVER_ERRORS”选项没有任何区别。

Windows 事件查看器中的“系统”日志包含一个带有数字代码的错误,该代码转换为以下内容,这与 VBScript 错误一致:“TLS1_ALERT_UNKNOWN_CA 48 SEC_E_UNTRUSTED_ROOT 0x80090325”

虽然一个直接的解决方案显然是可取的,但我同样有兴趣知道如何开始解决这样的问题,而无需求助于 StackOverflow 寻求帮助。

这是我的脚本:

VBScript 报告证书信任错误 在事件查看器中查看的系统错误 Chrome 对证书链很满意

0 投票
0 回答
152 浏览

winapi - 如何从虚拟服务帐户访问系统私钥?

我正在开发使用 SChannel 支持客户端 TLS 连接的 NT 服务。证书通过本地计算机证书管理器 (certlm.msc) 手动安装到称为“公共集线器接口”的自定义证书存储中。该服务已经投入生产几个月了,除了以下问题外,运行平稳。

尽管在 LocalSystem 下一切正常,但为了最大限度地提高安全性,我正在尝试使用虚拟服务帐户,例如“NT Service\Public Hub Interface”。但是,由于帐户受到如此严格的限制,该服务不再有权访问系统的私钥,从而导致 AcquireCredentialsHandle 返回 SEC_E_UNKNOWN_CREDENTIALS。我已经尝试手动和以编程方式授予对各种文件和注册表对象的访问权限,如以下链接中所述,但部分成功 - CAPI 证书有效,但 CNG 无效。

https://social.msdn.microsoft.com/Forums/windowsdesktop/en-US/d2a477c4-c366-4a68-8014-83632651bc91/how-to-grant-an-account-access-to-the-certificate-in- a-service-store-programmatically?forum=windowssecurity

https://docs.microsoft.com/en-us/windows/desktop/seccng/key-storage-and-retrieval

https://docs.microsoft.com/en-us/windows/desktop/SecCrypto/modifying-key-container-access

https://www.codeguru.com/cpp/in/internet/security/article.php/c6211/Security-Certificates-Treatment-with-CryptoAPI.htm

还有其他人,但他们几乎都说同样的话。此外,许多解决方案都适用于单个证书,并假设可以直接访问它们,或者至少知道它们的位置。不幸的是,这不是我的情况,因为证书是通过 certlm 从外部安装的,并且单独的自定义证书安装应用程序不在游戏计划中。事实上,如果可能的话,我对访问容器更感兴趣,而不是处理它们的特定内容。此外,还有许多证书,其中没有一个是提前知道的,并且大多数通常在服务运行后安装好。

我宁愿不从本地机器的商店提供者切换到服务的(即当前用户的)商店提供者,特别是因为我非常接近发布并且没有时间修改/重新测试已经工作的代码,更不用说重新- 导入证书以及对操作员进行新程序的再培训。因此,我希望有一种简单可靠的方法来授予服务对 LocalSystem 帐户拥有的系统私钥的相同访问权限。

请注意,该服务是通过 MSI 包安装的,该包使用非托管 C++ 自定义操作 DLL 来执行高级操作,例如配置服务恢复选项和创建证书存储;我计划在安装过程中使用同一个 DLL 来设置所需的访问权限。也就是说,我更喜欢使用外部程序(例如 WinHttpCertCfg.exe 或 CertUtil.exe)的程序解决方案,它甚至可能无法在目标系统上运行,或者如果它必须包含在包中还不存在。

非常感谢您的帮助。

0 投票
0 回答
91 浏览

c++ - 可以使用 schannel 与 nginx 等网络服务器建立 ssl 连接

我想使用 schannel 与运行 https 的网络服务器建立 ssl 或 tls 连接,最好是 nginx。我现在正在运行一个 nginx 实例,并且正在通过 winsock 成功地将 http get 请求发送到服务器。现在我想用 schannel 来保护它。

我已经读过 schannel 是用于 Windows 客户端和服务器的方式,但是如果服务器不是 IIS 并且在 linux 上运行怎么办。这可能吗?我知道还有其他可以在 c++ 中使用的库,但我特别想使用 schannel。所有与 schannel 相关的代码示例似乎都有一个 Windows 服务器,这让我怀疑它是否有可能。

0 投票
0 回答
171 浏览

windows - 解密消息因访问冲突而失败

用于启动 Schannel 的函数

解密消息

这段代码工作得很好。但有时 DecryptMessage 因访问冲突而失败。它无法从 dword ptr [Cbuffer] 读取数据

我在调试器中看到它。错误后它说我没有分配来自 dword ptr [Cbuffer] 的内存

DecryptMessage windows api 函数内部发生访问冲突。

发生的指令

movzx ecx, 字节 ptr [edi + 3]

在 edi 中放置具有 dword ptr [Cbuffer] 的地址

0 投票
1 回答
280 浏览

c++ - Windows SChannel 支持 CURL SFTP?

我正在努力缩小可执行文件的大小,并且用 Windows 标准SChannel(所有 Windows 机器上的 DLL)替换OpenSSL/Libssh以实现curl的巨大节省

这可以正常工作并且对某些事情具有 SSL 支持,但是 curl 无法使用 SChannel 进行 SFTP(除非我配置错误)。我尝试将 LibSSH 添加回 curl 以处理 SFTP,但这依赖于 OpenSSL。

有什么方法可以在保持 SFTP 功能的同时使用 curl/Schannel 吗?


结论

最终使用 LibSSH2 构建 curl,它可以使用 Windows DLL 而不是 OpenSSL,完全不需要 OpenSSL。

0 投票
0 回答
85 浏览

c# - 未发送 Schannel 警报

调用我的 WCF 服务时无法获取要发送到客户端的 SChannel 警报消息。

通过将注册表编辑器中的“EventLogging”DWORD 设置为 0x0004 而不是 0x0001,我已启用将 SChannel 警报的详细日志记录到事件查看器。

我的 IIS 服务器使用有效证书的 HTTPS 绑定。我已将 IIS SSL 设置配置为需要 SSL 和需要客户端证书。

客户端应在特定事件中收到 SChannel 警报之一,例如在使用无效证书(如 bad_certificate、certificate_revoked、certificate_expired)时。当前的结果是 SChannel 总是成功连接,忽略这些验证。例如,当客户端使用损坏、过期、吊销的证书时,会记录以下事件: TLS 服务器握手成功完成。协商的密码参数如下。

事件查看器

0 投票
1 回答
941 浏览

ssl - 使用 OpenSSL 服务器和 SChannel 客户端的 TLS 会话恢复

我必须使用 RFC5077 TLS 会话恢复。我的客户端使用 Windows SChannel,服务器通常使用 OpenSSL。在我的测试中,结果如下。

  • OpenSSL 1.1.0(或更高版本)和 SChannel:始终重用会话,SChannel 发送以前的 Session Ticket。
  • OpenSSL 1.0.2(任何修订版)和 Schannel:始终是新会话,SChannel 不发送 Session Ticket。
  • OpenSSL 和 OpenSSL:始终重用会话。

所以我想知道

  • 为什么 Schannel 不仅对 OpenSSL 1.0.2 使用 TLS 会话恢复?
  • 1.0.2 和 1.1.0 的区别。
  • 如何在 OpenSSL 1.0.2 和 SChannel 中使用 TLS 会话恢复?

服务器代码:简单 TLS 服务器

客户端代码:Windows C++


我是 ftp 客户端的维护者。某些 ftps 服务器要求 DATA 连接必须重用 CONTROL 连接的 TLS 会话以确保安全。