问题标签 [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.
ssl - 如何预测 SslEncryptPacket 输出的大小
通常 Win32 API 可以判断所需的输出缓冲区的长度。只需传递 0 作为缓冲区长度,API 返回错误 BUFFER_TOO_SMALL 和所需的字节数。
但它与SslEncryptPacket 不同。它只是返回关于小缓冲区的错误,仅此而已。
还有我认为应该使用的SslLookupCipherLengths ,但是文档没有提供有关如何计算具有该信息的输出缓冲区的线索。
也许你能说出来?通常我会保留 + 千字节,但在我的情况下,我需要确切地知道。
c - CryptoAPI RSA Schannel 提供程序错误
我正在尝试使用“Microsoft RSA SChannel Cryptographic Provider”生成数字签名。获取容器句柄后,我正在使用 CryptGenKey() 生成签名。但是这个函数返回 FALSE。
CryptGenKey() 的 dwError 返回 80090008。
这同样适用于任何其他提供程序类型。此外,当我尝试为同一提供者创建密钥交换对时,它工作正常。我究竟做错了什么?
谢谢。
c# - 对 SSPI 的调用失败,请参阅内部异常。不支持请求的功能
在我的公司,我们有一个用 C# 开发的 Windows 服务,用于处理来自客户端的请求消息,使用 SSLStream 和 Tls12 以及服务器和客户端证书。服务在 Windows Server 2012 上运行良好,包括 Windows 10 PC,无论是在发布模式下执行还是调试检查代码,但是最近在执行 AuthenticateAsServer 时抛出异常。一段代码是:
networkStream 是 NetworkStream 的一个实例,它具有服务的 IP 和端口。serverCertificate 是安装在本地机器存储中的 X509Certificate2,用作自签名。客户具有相同的证书。异常详情如下:
正如我之前提到的,服务一直运行良好,直到不久前。任何帮助将不胜感激。
windows - InitializeSecurityContext (Schannel) 意外返回 SEC_I_INCOMPLETE_CREDENTIALS
我已经实现了使用 SSPI 创建安全连接的代码。我用它通过 SMTP 发送邮件。它适用于smtp.gmail.com
我尝试过的其他一些服务器。但它不适用于smtp.live.com
. 第二次调用InitializeSecurityContext()
返回我SEC_I_INCOMPLETE_CREDENTIALS
。据我了解,这意味着我需要提供客户端证书。但这是一个公共的免费邮件服务器。它需要什么客户证书?或者也许我使用了一些错误的参数或标志?
我连接到 smtp.live.com:587 最初连接是未加密的纯文本。首先,我发送 EHLO 命令,然后发送 STARTTLS 命令。之后,我使用下面的代码执行 SSL 握手
这是代码:
windows - AcceptSecurityContext 期间审核失败 4625
我正在使用 AcceptSecurityContext 方法(https://msdn.microsoft.com/en-us/library/windows/desktop/aa374708(v=vs.85).aspx)建立安全连接,但这似乎触发(二)审核Windows事件日志中的失败事件。这些事件的 ID 为 4625,这似乎表明它们代表登录尝试失败,但 AcceptSecurityContext 调用返回状态 SEC_E_OK。怎么会这样?如果它是一个真正的失败,我希望该方法将返回 STATUS_LOGON_FAILURE。并且登录似乎有效,因为我能够继续进行通信。
有谁知道如何避免这些消息?帮助将不胜感激。
该事件似乎仅记录在 Windows 服务器上(我尝试过 2016、2012 和 2008)。我在 Windows 10 上看不到该事件。
windows - 使用 Schannel 的 DTLS
我正在尝试在 Windows 下使用 Schannel 创建 DTLS“连接”(我正在最近的 Windows 10 版本下进行测试,因此 Schannel 支持的所有 DTLS 版本都应该可用)
我尝试按照文档从工作代码开始建立常规 TLS 连接:
- 在第一次通过时使用空输入初始化SecurityContext,在输出时使用 SECBUFFER_TOKEN 和 SECBUFFER_ALERT
- AcceptSecurityContext,输入为 SECBUFFER_TOKEN 和 SECBUFFER_EMPTY,输出为 SECBUFFER_TOKEN 和 SECBUFFER_ALERT。
- 重复这两个步骤直到成功,然后继续使用 Encrypt/DecryptMessage
这在流模式下工作得非常好(ISC_REQ_SEQUENCE_DETECT | ISC_REQ_REPLAY_DETECT | ISC_REQ_CONFIDENTIALITY | ISC_RET_EXTENDED_ERROR | ISC_REQ_ALLOCATE_MEMORY | ISC_REQ_STREAM)
如果我尝试用 ISC/ASC_REQ_DATAGRAM 替换 STREAM,我的 InitializeSecurityContext 会按预期以 SEC_I_CONTINUE_NEEDED 成功,但我的第一个 AcceptSecurityContext 然后以 SEC_E_INVALID_PARAMETER 失败。
我尝试将我的 SCHANNEL_CRED 的 grbitEnabledProtocols 设置为 0 以使用双方记录的默认值,我还尝试将其设置为 SP_PROT_DTLS1_X,但我仍然从我的第一个 ASC 获得无效参数返回。为了以防万一,我还尝试了 DTLS_1_0 常量。
此外,我的注册表设置中默认启用所有安全协议。
根据我对 DTLS RFC 的理解,我的代码在 HelloVerifyRequest 步骤中失败了,并且再次根据我对 RFC 的理解,这部分要求安全提供程序从 ClientHello 消息的几个部分以及源的IP地址。但是,我找不到任何记录方式将此信息传递给 ASC 函数。
(我认为?:))我已经在整个互联网上搜索了 Schannel 下 DTLS 的任何工作示例用法,但没有任何运气。在stackoverflow上,我发现这个问题只是简单地提到它是受支持的: Windows 7上的Schannel是否支持DTLS?,而链接的 MSDN 文章只是一个高级概述。
我搜索了与此功能相关的常量的任何使用...我能想到的所有搜索引擎要么是 sspi.h 的副本,要么是索引 Windows API 中的常量的网站......
我知道其他实现(OpenSSL 等)很好地支持 DTLS,但我真的更喜欢使用 Schannel,因为我的代码的其他部分目前在 TLS 模式下与 Schannel 一起工作得很好。
c++ - 大于 cbmaximummessage 的 Schannel 消息
我在发送大于协商的最大长度的 SChannel TLS 消息时遇到问题。
当使用大于 SecPkgContext_StreamSizes.cbMaximumMessage 的缓冲区调用“EncryptSend”时,服务器(也不由 Wireshark)理解大于 SecPkgContext_StreamSizes.cbMaximumMessage 的部分。
ssl - 访问 SSRS 管理时留下 0 个客户端证书可供选择。
环境:
在安装了 .Net 4.6.1 并启用 .Net 3.5 作为功能的 Windows 2008 服务器上的 SQL Server 2008 R2 SP3 安装上运行的 Reporting Services。IIS、数据库和报告服务都在本地机器上(在不同的机器上自定义登录 URL,但似乎这无关)。
所做的更改:
由于安全原因,我们被迫迁移到 TLS 1.2,所以我们使用 IISCrypto 仅启用 TLS 1.2
结果:
从这一刻起,我们仅在尝试访问报告管理站点时才会收到错误消息。在浏览器上,我们收到错误 500 说:
底层连接已关闭:接收时发生意外错误
在 SSRS 日志中,我们可以看到以下异常:
System.Net.WebException:底层连接已关闭:接收时发生意外错误。---> System.ComponentModel.Win32Exception : 客户端和服务器无法通信,因为它们没有共同的算法
调用堆栈在 ReportServer OnInit() 上启动,因此它立即开始失败,并且错误发生在 Reporting Services 初始化时。
在 .Net Framework 上启用跟踪我发现以下消息表明当 SSRS 调用自己的 Web 服务时会发生故障:
事情已经检查:
使用中的证书仍然有效,并且它的签名链被放置在适当的“中间”和“根”存储中。
以管理员身份运行应用程序池没有帮助。
使用从 IIS 生成的自定义签名证书没有帮助。
重要提示:该问题仅发生在 Reporting Services 管理站点上,报告工作正常
下一步
关于还有什么可以尝试的任何想法?有没有办法知道为什么没有选择安全包?
更新
该问题与 TLS1.2 无关,因为再次启用 TLS 1 我得到了同样的错误。我猜登录 URL 以某种方式涉及。
c++ - 如何使用winsock在c++应用程序中实现安全套接字通信?
我正在尝试在 C++ 中实现服务器和客户端之间的安全通信。限制是客户端和服务器都必须在 Windows 上运行并且必须使用 C++。这是我在我的大学从事的一个研究项目。
到目前为止,我发现 SChannel 是最好的选择,但是文档非常混乱,我找不到任何关于如何使用它的指南/教程。我已经看过这个链接https://docs.microsoft.com/en-us/windows/desktop/secauthn/creating-a-secure-connection-using-schannel但仍然不明白如何让它工作。如果这是最好的方法,有人可以指导我吗?
我还研究了使用 CLR 使用 SSLStream 让 .net 在 c++ 应用程序中运行。但是我不能使用它,因为客户端应用程序是线程的,并且线程不能与 CLR 一起使用。
我已经在两者之间建立了一个虚拟客户端和服务器,我只是想保护和加密该通信。
任何帮助是极大的赞赏!
windows - Microsoft Windows 上的 DisabledByDefault 和 Enabled SSL/TLS 注册表项有什么区别?
Microsoft 提供了传输层安全性 (TLS) 的最佳实践指南。本文档描述了可以启用或禁用特定协议的注册表项。
例如,要启用 TLS 1.2,您可以添加以下注册表项。
DisabledByDefault
和 和有什么不一样Enabled
?它们似乎是多余的。