- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经实现(Windows 10.0.17763.0/VS2017/C++)一个客户端/服务器应用程序,它使用 schannel 进行安全通信。现在的要求是仅使用一组密码套件来进行某些客户端和服务器之间的通信。
使用 BCryptAddContextFunction/BCryptRemoveContextFunction API,我可以更改 SChannel 中支持的密码,但这是系统范围的设置,不仅适用于我的应用程序。
为了以编程方式控制它,我尝试在 AcquireCredentialsHandle 中使用 ALG_ID。
以下是我的应用程序应该支持的唯一密码套件。
std::vector<ALG_ID> algos = { CALG_AES_256 , CALG_AES_128 , CALG_SHA_384 , CALG_SHA_256,CALG_ECDH_EPHEM,CALG_DH_EPHEM };
schannelCred.cSupportedAlgs = static_cast<DWORD>(algos.size());
schannelCred.palgSupportedAlgs = &algos[0];
使用wireshark我发现下面是我的应用程序使用上面的ALG_ID在客户端hello中提出的密码套件,
最佳答案
调用 AcquireCredentialsHandle 函数时,您可以使用 SCH_CREDENTIALS 结构而不是 SCHANNEL_CRED。
您使用一组 CRYPTO_SETTINGS 结构创建 TLS_PARAMETERS。每个 CRYPTO_SETTINGS 结构都定义了 key 交换、签名、摘要和批量密码算法的限制。然后,您可以选择满足您的应用要求的组合。此结构 (SCH_CREDENTIALS) 与 SCHANNEL_USE_BLACKLIST 标志/approach 一起使用,禁用指定 TLS session 不需要的内容。通过 CRYPTO_SETTINGS 结构的 eAlgorithmUsage 和 strCngAlgId 成员的正确组合,我认为您可以实现 TLS session 的所需行为。
请参阅 https://docs.microsoft.com/en-us/windows/win32/api/schannel/ns-schannel-sch_credentials
https://docs.microsoft.com/en-us/windows/win32/api/schannel/ns-schannel-tls_parameters
例如,如果您在具有适当 eAlgorithmUsage 成员值的限制之一中包含 AES_CBC,在本例中为 TlsParametersCngAlgUsageCipher,则应将其作为批量加密算法从 session 中排除。确保从该 eAlgorithmUsage 的限制中排除 AES_GCM。
关于控制签名算法,具有 TlsParametersCngAlgUsageSignature 值的 CRYPTO_SETTINGS 结构 eAlgorithmUsage 成员限制使用分配给 strCngAlgId 成员的算法作为该 session 的签名算法。您还可以确定要限制的最小和最大长度。
最后,
“Protocols 项下注册表项中的 DisabledByDefault 值不优先于包含 Schannel 凭据数据的 SCHANNEL_CRED 结构中定义的 grbitEnabledProtocols 值。” (https://docs.microsoft.com/en-us/troubleshoot/windows-server/windows-security/restrict-cryptographic-algorithms-protocols-schannel)。
在该 TLS session 的 TLS_PARAMETER 结构的 grbitDisabledProtocols 成员上也是如此。
如果您详细说明签名算法、 key 交换、批量加密和摘要的限制的正确组合,您可以将不需要的算法从密码套件中的特定位置过滤掉。
关于c++ - SChannel 中的密码套件选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63075804/
是否可以在 TLS 1.0 握手中提取远程计算机发送的证书链? 具有 SECPKG_ATTR_REMOTE_CERT_CONTEXT 值的 API QueryContextAttributes,仅返回
我已经实现(Windows 10.0.17763.0/VS2017/C++)一个客户端/服务器应用程序,它使用 schannel 进行安全通信。现在的要求是仅使用一组密码套件来进行某些客户端和服务器之
我正在尝试使用“Microsoft RSA SChannel Cryptographic Provider”生成数字签名。获取容器句柄后,我使用 CryptGenKey() 生成签名。但这个函数返回F
几天的故障排除、谷歌搜索解决方案和重新阅读有关所需功能的 Microsoft 文档。改变变量,一次又一次地重试。非常感谢您的帮助,我相信不仅仅是我遇到了这个问题。 我正在努力实现联网的客户端和服务器应
我可以轻松地使用“win sockets”实现 HTTP,但我一直在努力使用“SChannel”实现 HTTPS,“至少对我来说”这几乎没有记录。如何为 HTTPS 通信建立安全连接?是否有任何我应该
当我试图从我们的 git 服务器中 pull 数据时,我得到了这个错误: fatal: unable to access 'xxx': OpenSSL SSL_connect: SSL_ERROR_S
在哪里可以找到事件查看器中显示的 Windows Schannel 致命警报代码的定义?例如: 从远程端点收到致命警报。 TLS 协议(protocol)定义的致命警报代码为 40。 已生成致命警报并
我正在尝试在 Windows 下使用 Schannel 创建 DTLS“连接”(我正在最近的 Windows 10 版本下进行测试,因此 Schannel 支持的所有 DTLS 版本都应该可用) 我尝
我正在将 TLS 加密添加到服务器端应用程序。我正在使用 Schannel API 添加 TLS。我在使用 CertFindCertificateInStore 时遇到问题。它永远找不到我正在搜索的证
我想使用 SChannel 或其他一些 Microsoft API 来支持我的 TCP/IP 应用程序的 TLS。理想情况下,我想做的是使用 SChannel 在我的应用程序中创建一种 TLS 隧道,
我必须使用 SSPI 接口(interface)实现 TLS 握手过程。 我的应用程序实现了客户端,正如我从 here 中看到的那样一般流程是: InitializeSecurityContext -
该问题与某些规范 (FIPS) 相关,这些规范要求用于 TLS 的 SChannel 模块在使用前执行自测,以验证它们没有受到损害。 FIPS 就是一个例子。在开源库中有内置的自测功能。SChan
试图访问 git-bash使用规范准备 git repo git ,我得到: $ git pull fatal: Unsupported SSL backend 'schannel'. Support
我正在努力缩小可执行文件的大小,一个很大的节省是用 Windows 标准 SChannel 替换 OpenSSL/Libssh for curl (所有 Windows 机器上的 DLL) 这可以正常
我有一个程序使用 schannel.dll 与远程服务器建立 SSL 连接。但是我想经常断开与服务器的连接并重新连接而无需再次重新协商共享 key 。我知道 SSL 支持这个,但不知道如何使用 SCh
我正在尝试将 SNI 添加到我的客户端程序 (C/C++),该程序使用 Microsoft SDK 的 Schannel API for TLS。 我到处搜索,但找不到任何关于 Schannel 如何
我目前正在使用 SChannel 开发一个基于异步 (IOCP) 的服务器,我的大部分工作都很好,但我遇到了重新协商的问题。具体来说,当对等方 A 向对等方 B 发送重新协商的请求并且对等方 B 以
出于合规性原因(我想在 .Net 中使用 256 位 AES 和临时 key ),我正在尝试重新排序/删除密码套件。但是,使用 WCF TCP 传输安全性,我将对安全性的所有控制都让给了 Window
我想看一个演示如何将 SSPI 与 Schannel 结合使用的 Microsoft 示例。 如我所见here有这样的样本,但我找不到它:( 谁能帮我找到它? 提前致谢! 最佳答案 Windows®
是否可以使用 WinSSL/Schannel 打开 FIPS 模式仅用于运行进程而不是整个机器(通过策略)? 最佳答案 Is it possible to turn on FIPS mode with
我是一名优秀的程序员,十分优秀!