问题标签 [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 投票
2 回答
1618 浏览

apache - 从 PEM 文件中获取 ASN.1 颁发者字符串?

我最近遇到了 Windows 2003 的一个问题(显然它也存在于其他版本中),如果 SSL/TLS 服务器正在请求客户端证书身份验证并且它具有超过 16KB 的受信任证书 DN、Internet Explorer(或任何其他应用程序)使用 schannel.dll)无法完成 SSL 握手。(简而言之,根据 RFC 2246 sec. 6.2.1,服务器将消息分成 2^14 字节的块,但 Schannel 并未被编写为支持这一点。我已从 Microsoft 支持部门确认这是一个Schannel 中的缺陷,他们正在考虑在未来的版本中修复它。)

所以我试图找到一种方法来轻松解析我的受信任证书(我使用 Apache 作为我的服务器,所以它们都是 PEM 格式)以获得 DN 的总 ASN.1 格式长度(这就是它们在握手期间通过电线发送),从而查看我是否太接近极限。不过,我还没有找到一种方法来做到这一点:OpenSSL asn1parse 函数很接近,但它似乎没有提供一种方法来获取仅针对发行者名称的 ASN.1 序列,这就是我需要。

有什么建议么?

0 投票
2 回答
1420 浏览

ssl - 处理 SChannel 中的 SEC_I_RENEGOTIATE 和 TLS1_ALERT_NO_RENEGOTIATION

我目前正在与 SChannel 合作开发基于异步 (IOCP) 的服务器,我的大部分工作都正常,但我在重新协商时遇到了问题。具体来说,当对等点 A 向对等点 B 发送重新协商请求并且对等点 B 以 TLS1NO RENEGOTIATION警报响应时,对等点 A 如何继续?我在收到SEC_I_NO_RENEGOTIATION响应时似乎有一个无效的上下文,这使我无法继续使用流...

更新我已经做了一些更多的测试,它似乎不是一个无效的上下文,但我确实SEC_E_ENCRYPT_FAILURE从下一次调用 Encrypt 中得到......

重新谈判的请求真的可以拒绝吗?还是NO RENEGOTIATIONalert 只是一条信息性错误消息,现在意味着连接无用?如果是这样,为什么将其评论为“警告”而不是“错误”?没有; TLS RFC (5246) 明确指出,在没有重新协商警报后,我们是否可以继续由对等方决定......

更新如果我使用...发送 TLS 警报没有任何区别ApplyControlToken() or if I send it using EncryptMessage() with SECQOP_WRAP_OOB_DATA

0 投票
1 回答
1506 浏览

windows - 使用 SChannel 重用 SSL 会话 (Windows)

我有一个使用 schannel.dll 与远程服务器建立 SSL 连接的程序。但我想经常断开与服务器的连接并重新连接,而无需再次重新协商共享密钥。我知道 SSL 支持这一点,但不知道如何使用 SChannel 来实现。

你能帮助我吗?

以下是一些可以提供帮助的链接:

使用 Schannel 创建安全连接:http: //msdn.microsoft.com/en-us/library/aa374782 (VS.85).aspx

SSL 会话重用 - 如何查找是否支持?:http ://royontechnology.blogspot.com/2008/01/how-to-find-out-if-server-supports-ssl.html

0 投票
2 回答
6336 浏览

winapi - EncryptMessage 返回 SEC_E_INVALID_TOKEN

当使用具有有效上下文的 win32 API 中的 EncryptMessage (SChannel) 时,我以正确的顺序提供四个缓冲区,我得到 SEC_E_INVALID_TOKEN 响应,根据文档,该响应是没有找到 SECBUFFER_DATA 类型的缓冲区。我知道应该从连续内存中分配 pvBuffers 集以提高速度,但为简单起见,我已经清楚地表明了什么是什么。谁能看到问题可能是什么?

谢谢,布鲁斯

代码如下;

我使用 STRACE 注入可执行文件,这一行看起来很有趣;

这看起来好像操作系统正在获取正确的信息。

我搜索了一下,发现 80090308 通常意味着证书有问题,因为服务器的全名应该在主题中,CN=www.foobar.com 但这也没有解决问题,证书和CA 是使用 OpenSSL 生成的。

0 投票
1 回答
414 浏览

windows - 我可以使用 SChannel 获得 SOCKET 吗?

我想使用 SChannel 或其他一些 Microsoft API 来支持我的 TCP/IP 应用程序的 TLS。理想情况下,我想做的是使用 SChannel 在我的应用程序中创建一种 TLS 隧道,这样我就可以将 SOCKET 句柄传递给另一个库。这是 SChannel 可以为我做的事情,还是我必须自己实现隧道?

0 投票
1 回答
557 浏览

winapi - 传输文件 + SChannel

我正在使用带有 I/O 完成端口的 TransmitFile API 在 Windows 上实现高效的多线程文件服务器。

这一切都很好,但我现在也使用SChannel实现了安全套接字。因为 TransmitFile 将文件直接流式传输到套接字,所以我看不到调用 EncryptMessage 的方法 - 我需要分块读取文件,手动加密和传输它们吗?

当 TransmitFile 仅出于高性能文件传输的目的而提供时,这似乎有点愚蠢,并且安全套接字非常普遍。我想知道 IIS 做了什么,考虑到我相信 TransmitFile 首先是为 IIS 实现的?

(我最初制作了“TransmitFile”和“EncryptMessage”超链接,但垃圾邮件保护只允许一个 - 抱歉)

0 投票
1 回答
417 浏览

c++ - Microsoft Windows SChannel SSPI 自检?

该问题与一些规范 (FIPS) 有关,这些规范要求用​​于 TLS 的 SChannel 模块在使用之前执行自检以验证它们没有受到损害。FIPS 就是一个例子。在开源库中内置了自测。SChannel 有这个能力吗?我找不到对此的任何参考,但似乎很奇怪,这会被忽略。

我希望这可以使问题不那么模糊和模棱两可。我相信这是一个对 SChannel API 有深入了解的人可以合理回答的问题。

补充:我对 FIPS 1 级和第 2 级的理解是,算法的操作需要在运行时(自检)进行验证,而不仅仅是在最初获得认证时。此外,内存中的图像需要使用散列或类似的方法进行验证,以确保它没有被更改。

如果这些事情没有在运行时完成,那么存在修补库的可能性不是吗?

0 投票
1 回答
3653 浏览

c++ - 在 C++ 中使用 SSPI 实现安全连接 - 澄清一些术语

我必须编写一个应用程序,使用 Microsoft API 实现客户端和服务器之间的安全连接。谷歌给了我很多结果,我有一个大麻烦 - 需要有人在我的脑海里给我一些命令:

问题:

  1. 什么是 SSPI 接口?什么是 Schannel.dll 库?有什么不同?(我看到我可以包含“SSPI.h”、“Schannel.h”和“security32.h”——我真的需要哪个头文件?)
  2. 我怎样才能找到一个真正简单的示例来解释我如何创建安全套接字?

  3. 在开始之前,您是否有一些我必须知道的指导方针?

如果您能提供帮助,我将不胜感激。

0 投票
1 回答
3728 浏览

c++ - InitializeSecurityContext (Schannel) 的 TLS 握手过程

我必须使用 SSPI 接口实现 TLS 握手过程。
我的应用程序实现了客户端,正如我从这里看到的一般流程是:

  1. InitializeSecurityContext - 第一次调用返回一个指向 SecBufferDesc 结构的指针。
  2. 使用输出缓冲区调用发送(=WinSock API) 函数。
  3. 调用recv函数
  4. 使用缓冲区再次调用 InitializeSecurityContext。

关于这些缓冲区的MSDN解释:

“在初始调用后调用此函数时,必须有两个缓冲区。第一个缓冲区的类型为 SECBUFFER_TOKEN,包含从服务器接收到的令牌。第二个缓冲区的类型为 SECBUFFER_EMPTY;将 pvBuffer 和 cbBuffer 成员都设置为零。”

我的问题:

  1. 我需要更多解释:缓冲区的含义是什么?第二个缓冲区包含什么?它们是干什么用的?
  2. 在 MSDN 中写到 InitializeSecurityContext 函数的 TargetDataRep 输入参数是用于 Schannel 的坚果,但我看到的许多示例将其设置为 SECURITY_NATIVE_DREP。什么是 SECURITY_NATIVE_DREP 标志?为什么 MSDN 说将其设置为零?

我将非常感谢任何帮助。
谢谢!。

0 投票
1 回答
509 浏览

windows - SSPI Schannel API - 可以重复使用凭据句柄吗?

我目前正在向 libcurl 添加 SSPI Schannel API 支持,以便可以在 Windows 上使用启用 SSL 的协议,而无需任何外部依赖,例如 OpenSSL。

我已经有一个有效的 SSL/TLS 实现,但我有一个非常具体的问题,即重用由函数AcquireCredentialsHandle返回的凭据句柄。

通过创建新句柄、重新使用现有句柄并将其多次传递给InitializeSecurityContext来重复使用 SSL/TLS 会话是否正确且可能?

我在 libcurl 的 Schannel 模块上的工作可以在这里找到,尝试重用的实验版本可以在这里找到。

我将不胜感激有关此问题的任何提示或反馈。那么,凭证句柄可以以这种方式重复使用吗?它是正确的吗?

提前致谢!