问题标签 [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 回答
389 浏览

sockets - 套接字 schannel 客户端身份验证

在 Windows 7Pro 上,我有一个使用 schannel 的安全套接字客户端应用程序。使用 TLSV1.0、1.1 和 1.2 连接到安全服务器,无需客户端身份验证即可正常工作。使用 TLSV1.0、1.1 和客户端身份验证连接到安全服务器可以正常工作。

使用 TLSV1.2 进行客户端身份验证的连接失败。客户端没有使用握手证书进行回复,而是使用 3 条 TLS 记录进行回复:客户端密钥交换-密码更改规范-客户端密钥交换。由于服务器没有收到客户端的证书,它会中止连接。客户端的证书有一个中间且受信任的根 ca。在所有情况下,AcquireCredentialsHandle 都被调用

SCH_CRED_NO_DEFAULT_CREDS|SCH_CRED_MANUAL_CRED_VALIDATION|SCH_CRED_NO_SERVERNAME_CHECK 和 InitializeSecurityContext(其中包括)ISC_REQ_MANUAL_CRED_VALIDATION 和 ISC_REQ_USE_SUPPLIED_CREDS。

对于 TLS V1.2,我是否需要区别对待客户端身份验证?

0 投票
1 回答
3176 浏览

c++ - SChannel/SSL 实施?

我可以使用“win sockets”轻松实现 HTTP,但我一直在努力使用“SChannel”实现 HTTPS,“至少对我而言”记录得很少。如何为 HTTPS 通信建立安全连接,我应该注意哪些安全或性能注意事项?

0 投票
2 回答
502 浏览

iis - 了解用户使用的密码

我需要知道是否有很多人使用 RC4 浏览器访问我的网站。罪魁祸首是 XP 上的 IE6、7、8。

显然,通过启用 SChannel日志记录,我可以做到这一点,然后在事件日志中读取结果。

为了进行测试,我在我的测试服务器上启用了 SChannel 日志记录,但我无法在事件查看器中看到我应该能够看到这个新日志记录提供的任何信息的位置。

测试服务器使用的是自签名证书,我已经在“安全”页面上使用 IE7 访问了它,但事件日志中没有任何内容,或者至少我什么也看不到。

有谁知道我应该在哪里查看用户使用的密码?

0 投票
1 回答
821 浏览

c++ - 使用 C++ 和 CryptoApi/SChannel 从 SChannel 中提取证书链

是否可以提取远程计算机在 TLS 1.0 握手中发送的证书链?

具有 SECPKG_ATTR_REMOTE_CERT_CONTEXT 值的 API QueryContextAttributes 仅返回最终证书。

是否可以使用某些方法提取所有链证书?使用 CryptoApi 和 SChannel 的环境 Windows 和 C++。

谢谢!

0 投票
1 回答
195 浏览

windows - InitializeSecurityContext (Schannel) 不改变 BufferType

所以我有以下代码:

问题是,在Windows 8.1Windows 10平台上执行此代码后,input_buffers[1].BufferType设置为4。如果它在Windows Server 2012 R2上执行,则input_buffers[1].BufferType保持0 (SECBUFFER_MISSING)并且我最终会出错。有谁知道为什么InitializeSecurityContext (Schannel) 函数没有改变input_buffers[1]Windows Server 上的类型?

我非常感谢您能提供的任何帮助。

两个平台上返回的编辑 1 状态相同 (-2146893032),只是在 Win 8.1/10 功能更改input_buffers[1].BufferType为 4。

编辑 2 在 Win 8.1/10 上,它进入此案例选项的 else 分支,在 Win Server 2012 R2 中,它进入 if 分支。在所有平台上,状态设置为 SEC_E_INCOMPLETE_MESSAGE (-2146893032)

0 投票
0 回答
39 浏览

c++ - 适用于 Windows 应用商店和 Windows 7+ 桌面的 TLS

我想要一个客户端/服务器 C++ 应用程序,它可以使用 TLS 进行安全通信,包括客户端证书,以及自己选择和验证证书的潜力。

我之前使用过 Schannel 来执行此操作,但密钥InitializeSecurityContext被标记为[desktop apps only]

Microsoft 是否提供了新的等效 API?

虽然理论上我可以替换整个东西(因为最后,我仍然可以拥有一个普通的纯文本 TCP 套接字)如果可能的话,我宁愿坚持使用 OS 组件。

0 投票
0 回答
868 浏览

c# - SSL/TLS 握手失败

我有一个 .NET (WinForms) 应用程序作为 SOAP 服务的(测试)客户端运行。该服务要求客户​​端使用客户端证书对自身进行身份验证(如此 MSDN 示例:https ://msdn.microsoft.com/en-us/library/ms731074(v=vs.110).aspx )。

使用 SoapUI 测试服务或从 Firefox 显示 WSDL 均成功,但客户端未完成 SSL/TLS 握手。错误消息说:“请求被中止:无法创建 SSL/TLS 安全通道。”

Windows 事件查看器在几毫秒内具有以下条目:

  1. [INFO] 创建 SSL 客户端凭据。
  2. [错误] 生成了致命警报并将其发送到远程端点。这可能会导致连接终止。TLS 协议定义的致命错误代码为 10。Windows SChannel 错误状态为 12。

不幸的是,在 Schannel 错误状态 12 上找不到太多内容。

.NET 和网络跟踪显示正确的客户端证书已发送到服务器,但在服务器将其证书发送到客户端之后(或同时?)它似乎失败了。.NET 跟踪具有以下行:

System.Net 信息:0:[2828] InitializeSecurityContext(In-Buffers 计数=2,Out-Buffer 长度=0,返回代码=IllegalMessage)。

不幸的是,“IllegalMessage”信息量不大。

由于我确实在客户端上安装了服务器的根证书,所以我不知道这里会出现什么问题。我还启用了一个回调来验证服务器证书,但显然没有达到这一点。

有谁知道什么可能导致 Schannel 在这一点上失败......?

0 投票
0 回答
1311 浏览

c++ - 从包含证书和私钥的 .pem 文件构建证书上下文

我正在开发一个 C++/Windows TLS 客户端。

我可以通过这种方式为服务器证书构建证书上下文:

但是如果我尝试对客户端证书(包含证书和私钥的.pem 文件)执行相同操作,我会失败。我认为这是因为服务器仅作为一个 base64 部分

-----开始证书----- -----结束证书-----

而客户有两个:

-----开始证书----- -----结束证书-----

-----开始私钥---- -----结束私钥----

但这只是我的猜测。

有人可以提供从这种 .pem 文件构建证书上下文的代码片段吗?

可接受的代码不能直接解析文件,我的意思是我不想解析文件以将证书与密钥分开。

谢谢!

让我包括一个我想使用的 pem 示例:

0 投票
0 回答
472 浏览

c - Microsoft RPC SChannel 未加密

我一直在努力使用 Microsoft RPC 获得安全的 RPC 客户端/服务器。我没有使用COM,只是直接使用C。

我已经创建了一个根 CA 证书,并为服务器创建了一个由该证书签名的证书。证书安装到证书存储中。

RPC 可以在未加密的情况下正常工作,它甚至可以与 SCHANNEL 设置一起使用,只是未加密。

服务器代码:

客户代码:

鉴于所有这些 RPC 都可以工作,但它不会像使用wireshark 验证的那样被加密。我用一个非常小的 SCHANNEL 结构定义而不是使用 qos 结构来解决这个问题。没什么大不了的。唯一真正有所作为的是如果我将 RPC_IF_ALLOW_CALLBACKS_WITH_NO_AUTH 更改为 RPC_IF_ALLOW_SECURE_ONLY。然后我在进行 RPC 调用时被拒绝访问。据我了解,这是 SCHANNEL 的正常功能,您必须在安全回调中提供自己的身份验证。

当我在安全回调中调用 RpcBindingInqAuthClient 时,我收到错误 1746:绑定不包含任何身份验证信息。

我浏览了 MSDN,一个分散在网络上的几个不同的链接,但是对于 SCHANNEL 的工作几乎没有什么帮助。

我对 SCHANNEL 的选择是我不能依赖 kerberos 或 ntlm。我在互联网上运行 tcp,所以证书对我有用。我不能使用 http,因为我不能在我的服务器上设置 IIS,DCE 的文档似乎比 schannel 还要少。

谢谢!

0 投票
1 回答
594 浏览

windows - 解密消息(Schannel)。处理空的输出缓冲区

我正在尝试使用 Schannel SSPI 使用套接字通过 SSL 连接发送/接收数据。我有一些问题DecryptMessage()

1) MSDN说,有时应用程序会从远程方接收数据,然后使用成功解密它,DecryptMessage()但输出数据缓冲区将为空。这是正常的,应用程序必须能够处理它。(据我了解,“空”表示 SecBuffer::cbBuffer==0)

我应该如何处理?我正在尝试创建一个(安全)srecv()函数,以替代 winsockrecv()函数。因此我不能只返回 0。因为调用应用程序会认为远程方已经关闭了连接。我应该尝试从连接中接收另一个加密块并尝试解密它吗?

2)还有另一个问题。使用 (return value = SEC_E_OK) 成功解密数据后 DecryptMessage,我试图SECBUFFER_DATA在输出缓冲区中找到一个类型缓冲区。

如果我没有找到数据缓冲区怎么办?我应该将其视为错误吗?还是我应该再次尝试接收加密块来解密它?(我看到了几个例子。其中一个他们正在重试接收数据,另一个他们正在报告错误)