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

c++ - querycontextattributes 返回的 SSL 标头大于使用 TLS1.2 的预期

我正在努力更新安全库,并且在完成 SSL 握手然后调用 querycontextattribute 以获取消息的标头、最大大小和尾部时注意到一些奇怪的行为。我注意到当我将 grbitEnabledProtocols 设置为 TLS 1_0 时,握手按预期发生,并按预期返回 SSL 数据包的 5 字节标头。

但是,当我将启用位的协议更改为 0 并且 schannel 选择 tls 1.2 时,或者如果我在调用查询消息大小的函数时将启用位的协议设置为使用 TLS 1.2,则会返回一个 21 字节的标头,其中 5 是预期的。

在迁移到 TLS 1.2 时是否应该进行任何额外的调用,因为使用 TLS 1.0 不需要这些调用?或者,返回 21 字节标头是否表示在处理 initializesecuritycontext 时出现错误,我目前没有捕获应该已经捕获的错误?

0 投票
1 回答
359 浏览

dts - Windows 7 上的 Schannel 是否支持 DTLS?

我看到了这个问题的相互矛盾的答案。我将如何DTLS使用 激活会话InitializeSecurityContext

0 投票
0 回答
1066 浏览

ssl - Windows 2008 R2 上的 SSL/TLS 问题

我正在尝试使用客户端证书进行 Web 服务调用我收到错误无法建立安全的 SSL/TLS 通道我已经检查了客户端证书凭据、权限。一切都很好。

在 schannel 的日志中,我看到了这个

  1. 第一个频道日志是

CSP 名称:Microsoft Strong Cryptographic Provider

CSP 类型:1 密钥名称:xxxxx 密钥类型:未知 密钥标志:0x20

  1. 第二个 schannel 日志是这个致命错误

schannel 致命警报 80. 内部错误状态为 301。

  1. 第三个频道日志是

SSL 客户端握手成功完成。协商的加密参数如下 协议:TLS 1.0 密码套件:0x2f 交换强度:2048

所以这个致命的错误打破了我的逻辑。我不明白为什么当 SSL 握手成功完成时它会被抛出。

请帮忙!!!!

谢谢

0 投票
1 回答
861 浏览

java - 无法使用 TLS 保护连接

我正在尝试在 Java 客户端小程序(使用 JDK 1.7.0_75-b13 构建)和 VC++ 服务器应用程序之间建立安全套接字连接。

作为测试工具,我使用了在 MSDN 论坛中找到的 VC++ 客户端/服务器示例,将其修改为使用 SChannel,并且能够使用密码套件 TLS_RSA_WITH_AES_128_CBC_SHA 建立套接字。它适用于任何 TLS 1.0/1.1/1.2。

当我尝试从 Java 小程序打开一个到同一个服务器应用程序的套接字时,连接被拒绝,服务器报告以下内容:

TLS 1.0 AcceptSecurityContext 失败:0x80090327

TLS 1.1 AcceptSecurityContext 失败:0x80090331

TLS 1.2 AcceptSecurityContext 失败:0x80090331

这是用于创建套接字的 Java 代码:

运行这个,对 getEnabledCipherSuites 的调用返回列表

TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA

TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA

TLS_RSA_WITH_AES_128_CBC_SHA

TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA

TLS_ECDH_RSA_WITH_AES_128_CBC_SHA

TLS_DHE_RSA_WITH_AES_128_CBC_SHA

TLS_DHE_DSS_WITH_AES_128_CBC_SHA

TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA

TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA

SSL_RSA_WITH_3DES_EDE_CBC_SHA

TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA

TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA

SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA

SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA

TLS_ECDHE_ECDSA_WITH_RC4_128_SHA

TLS_ECDHE_RSA_WITH_RC4_128_SHA

SSL_RSA_WITH_RC4_128_SHA

TLS_ECDH_ECDSA_WITH_RC4_128_SHA

TLS_ECDH_RSA_WITH_RC4_128_SHA

SSL_RSA_WITH_RC4_128_MD5

TLS_EMPTY_RENEGOTIATION_INFO_SCSV

其中包括所需的 TLS_RSA_WITH_AES_128_CBC_SHA 并传递给 setEnabledCipherSuites。

需要什么才能让 VC++ 服务器接受来自 Java 客户端的连接?

0 投票
0 回答
254 浏览

ssl - SChannel 从内存存储发送中间证书链

我正在使用使用 SChannel TLS 的服务器。我使用 SCHANNEL_CRED 和 AcquireSecurityCredentials 创建安全凭证,然后将其传递给 AcceptSecurityContext。一切似乎都正常,但如果最终证书不在系统或用户证书存储中,SChannel 将不会发送中间证书。我希望它从内存存储中发送证书,但这似乎不起作用。有没有办法指定临时中间证书而不将其添加到永久存储中?

0 投票
1 回答
930 浏览

ssl - 如何使用 Schannel API 添加 SNI 客户端 hello 扩展?

我正在尝试将 SNI 添加到我的客户端程序 (C/C++) 中,该程序使用 Microsoft SDK 的 Schannel API for TLS。

我到处搜索,但找不到任何关于 Schannel 如何支持 SNI 扩展的文档。我查找了 的文档 AcquireCredentialsHandle()InitializeSecurityContext()但没有成功。

那么,有人可以帮我提供一些示例代码吗?

0 投票
1 回答
19282 浏览

c# - 无法连接到仅使用临时密码套件的 SSL 服务器(无法联系本地安全机构)

我正在尝试连接到以 openssl 开头的测试服务器(这个有限的密码套件组合是有意的):

我使用的代码类似于msdn的

但是我在最后一行得到了一个异常:A call to SSPI failed, see inner exception.,其中内部异常说:The Local Security Authority cannot be contacted。通过查看 wireshark,我可以说 TLS 握手结束Server Hello, Certificate, Server Key Exchange, Server Hello Done并且选择的密码套件是TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 (0x009f).

我可以使用 Firefox 访问该 url,但不能使用 IE(它只是说“此页面无法显示”),所以它看起来像 schannel 问题。

当我使用所有密码套件()启动服务器时,一切正常(IE 和代码-cipher ALL)。有没有办法在不修改服务器配置的情况下使其工作?

Stacktrace 以防万一

我正在使用带有最新更新的 Windows 8.1。

0 投票
1 回答
3529 浏览

ssl - SChannel,SEC_E_ALGORITHM_MISMATCH (0x80090331)

对此进行了数天的故障排除,谷歌搜索解决方案并重新阅读有关所需功能的 Microsoft 文档。改变变量,一次又一次地重试。非常感谢您的帮助,我相信不仅仅是我遇到了这个问题。

我正在努力实现联网的客户端和服务器应用程序,这些应用程序使用 SChannel 与 SSL/TLS 层进行通信(稍后还将使其与 OpenSSL 一起使用以实现交叉兼容性)。我有一个已知可以工作的客户端,因此我们可以专注于服务器端。

目前的目标是让它在不提供任何一方证书的情况下工作(它们应该根据需要即时生成)。我执行 AcquireCredentialsHandle,从客户端加载初始令牌(在同一主机上运行)并调用 AcceptSecurityContext。

似乎无论我更改什么变量,在第一次调用 AcceptSecurityContext 时总是会出现相同的 0x80090331 错误。在 Windows 7 和 Windows Server 2012 上测试。

在我看来,我的代码之外肯定有一些东西,我需要修复的操作系统设置。我在网上找到了相互矛盾的信息。TLS 1.1 和 TLS 1.2 已添加到 SecurityProviders\SCHANNEL\Protocols* 下的注册表中,并使用数据 DisabledByDefault=0 进行设置。还在“SecurityProviders”中添加了“, schannel.dll”。

代码如下:

... snip ...(调用 AcquireCredentialsHandle 的代码)

... snip ...(调用 AcceptSecurityContext 的代码)

0 投票
2 回答
2066 浏览

c++ - Libcurl 停止工作,SSL 连接错误

我正在开发一个供个人使用的程序,该程序会定期抓取一些网页。其中一个需要使用 SSL,它的主要 URL 实际上是一个负载均衡器,每次都重定向到不同的域,从少数列表中(不确定这是否相关)。我对 libcurl 和 SSL 很陌生,所以我可能会遗漏一些明显的东西,但我不这么认为。

该程序可以正常运行一段时间(到目前为止,从不超过一个小时),但是一旦它第一次收到 SSL 连接错误,它每次都会继续给出相同的错误。在它开始失败之前,总是有不同的时间量和不同数量的成功请求。

错误缓冲区始终包含以下内容:schannel: next InitializeSecurityContext failed: SEC_E_ILLEGAL_MESSAGE (0x80090326) - This error usually occurs when a fatal SSL/TLS alert is received (e.g. handshake failed). More detail may be available in the Windows System event log.

中没有什么有用的eventvwr。搜索该错误代码会返回有关早期版本 Windows Server 上自签名证书问题的结果,但几乎没有其他结果。我不控制我要连接的服务器,但我怀疑它是一个 Windows 机器。

我在这里的想法已经用完了,所以我只想提供任何可能相关的细节。我不能真正发布任何实际的源代码,因为我已经在几个类中抽象了所有 curl 调用,所以我必须粘贴很多样板代码,然后其他人才能理解它。不过,我已经通过 Visual Studio 调试器确认这是实际调用归结为的内容。

在创建任何其他线程之前,我在主线程中初始化 libcurl,如下所示:curl_global_init(CURL_GLOBAL_WIN32 | CURL_GLOBAL_SSL);

然后我在第二个线程中创建并初始化实际的 curl 句柄,并且仅在该线程中,如下所示:

我已经尝试将CURLOPT_SSL_VERIFYHOST和都设置CURLOPT_SSL_VERIFYPEER为 0 但这没有帮助。

我在 Visual Studio 2013 上curl-7.43.0.tar.gz使用 with构建了 libcurl 。nmake /f Makefile.vc mode=static VC=12 ENABLE_WINSSL=yes ENABLE_SSPI=yes MACHINE=x64 DEBUG=yes

这是怎么回事,我该如何解决?

0 投票
0 回答
49 浏览

windows - Schannel 密码命名约定

我正在研究禁用某些密码,并且试图了解如何在 Windows 中命名分组密码。具体来说,名称后面的数字是什么意思。例如,RC4 40/128、DES 56/56、AES 128/128 或 AES 256/256。我想这可能是密钥大小/块大小,但这没有意义。以 AES 256/256 为例。据我了解,要成为 AES,它需要 128 的块大小。因此,最后一个数字不能指定块大小。或者采用 RC4 密码。看起来第一个数字是密钥大小,但它是流密码,那么 128 是多少?或 DES 56/56。我认为 DES 的密钥大小为 56 位,块大小为 64 位?有人知道命名背后的历史或原因吗?