问题标签 [wincrypt]
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.
c++ - 具有支持内存存储和证书信任列表的 CertGetCertificateChain
我需要在证书链验证期间将自定义自签名根证书标记为受信任,总的来说,我希望尽可能地依赖系统 API。
我创建了一个临时内存存储。
然后我将自定义根证书放入存储中。
CertGetCertificateChain MSDN 文档说
hAdditionalStore 用于搜索支持证书和证书信任列表 (CTL) 的任何附加存储的句柄。
据我了解,如果我使用根证书创建 CTL 并将其放入商店,CertGetCertificateChain 将信任它。因此,我在分配的缓冲区中创建根证书 CTL 条目,然后将其复制到std::vector ctlEntries
然后我创建 CTL 本身。
上面的所有 API 调用都成功完成,但是当我调用 CertGetCertificateChain 时,它仍然在 TrustStatus.dwErrorStatus 中返回 CERT_TRUST_IS_UNTRUSTED_ROOT。
潜在的解决方法
如果我收到 CERT_TRUST_IS_UNTRUSTED_ROOT 错误,我只需从证书存储中提取 CTL 并检查结果链中的根(由 CertGetCertificateChain 返回)是否在 CTL 中。它有效,但对我来说仍然不能完全接受。我想依靠 CertGetCertificateChain。
解决方案有什么问题?我必须使用哪些特定的证书信任列表 OID?在这种情况下,对根证书是否有任何要求(如特定扩展)?
ps 测试证书是使用此指令创建的https://gist.github.com/fntlnz/cf14feb5a46b2eda428e000157447309
更新日期:2020-01-31
CertModifyCertificatesToTrust 没有帮助。它成功完成,但仍报告该链具有不受信任的根。可能,问题出在不同的领域。
}
c++ - 使用 AES 加密数据包
我正在尝试加密我通过 Winsock 发送的缓冲区。除了绝对基础知识之外,我对加密一无所知,我使用了 Windows 的 WinCrypt 库,因为它似乎是我可以实现的最基本和最简单的库,但是,我似乎无法让我的代码工作。
第一次尝试加密后文本为空白(可能是因为 Crypt 函数失败),最后一个错误是加密后的 ERROR_MORE_DATA 和解密尝试后的 NTE_BAD_DATA。
我根本无法在网上获得有关这些错误的太多信息,它们对我来说也很新。
ERROR_MORE_DATA 的 MSDN 描述说“有更多数据可用”,并且在 CryptEncrypt 的 MSDN 页面上(这是抛出它的函数)它说我给它的缓冲区不足以容纳所有加密数据,所以我假设,与我的想法相反,加密以某种方式延长了字符串,但我需要在我的代码结构中给出一个设定的大小(至少在我目前的思考过程中),那么我能做些什么呢?
谢谢!
我写了以下代码供大家测试:
python - 在python中解码windows证书序列号
我正在尝试解码 X.509 证书的序列号,我用 Python 中的 win32crypt 打开(http://timgolden.me.uk/pywin32-docs/PyCERT_CONTEXT.html)
内存中的表示如下:
序列号 = b'\x07\x00\x00\x00\x00\x00\xc3o\x0c\xfbK\xf8\xdf\xbe\x07\x00\x00\x00*'
我只是想不通,使用什么样的编码以及如何解码?!
编辑:(..正确序列号的字节:2a00000007bedff84bfb0c6fc3000000000007)
c++ - 如何指向/访问证书文件`CertCreateCertificateContext`函数?(wincrypt api)
Windows 编程/C++ 有点新。我正在尝试将 .p7b 根证书文件安装到受信任的根证书存储中。我想使用 Windows Wincrypt 库。具体来说,这些是我从旧论坛获得的建议步骤:
- 使用您的证书内容字节调用
CertCreateCertificateContext
以获得PCCERT_CONTEXT
- 调用
CertOpenSystemStore
设置szSubsystemProtocol
为“ROOT”以获得HCERTSTORE
CertAddCertificateContextToStore
使用上述HCERTSTORE
和 调用PCCERT_CONTEXT
。
[这里是] CertCreateCertificateContext的 api 文档。不知道如何只指向pbCertEncoded
我的实际证书文件。我应该把它指向路径吗?我必须加载证书吗?类型应该是什么?
c++ - 如何使用 wincrypt.h 在 c++ 中检查 x509 证书的吊销状态?
我正在尝试使用 wincrypt.h 检查 C++ 程序中 X509 证书的吊销状态。可悲的是,我无法找到一个全面的例子。在 c# 中,代码如下:
c - 如何使用 CryptEncrypt 和 CryptDecrypt?
在我的 C 应用程序中,我使用带有密钥的 CryptEncrypt,该密钥是从借助 CreateHash、DeriveKey 等从文件中读取的字符串中获取的。
我试图用相同的功能解密:
CryptDecrypt 在 getLastError() 中返回 2,148,073,477 错误数据。我该如何解决所有这些问题?
python - 如何使用 python 将证书安装到受信任的根证书?
我需要编写一个 python 代码,将证书安装到我的机器(windows)或本地用户的受信任根证书中。我尝试了下面的代码。代码运行没有错误,但看起来商店不是 Windows 受信任的根。我还阅读了wincert和win32crypt python 模块的文档,似乎没有任何作用。
编辑:我需要做类似这里提到的事情,但使用 python。
编辑2:我也尝试了以下方法(不确定它是否会完成预期的工作):
但我收到以下错误:
java - WinCrypt RSA 与 Java org.bouncycastle
所以这里有一个问题。我在 Windows 系统上有一个旧代码,它只需要一个短字符串并使用公共 RSA 密钥对其进行 CryptEncrypt。最小的工作示例在这里(避免任何检查以使其更短。避免释放)
该代码有效并返回一个 base64 编码的字符串。喜欢lTq01sOcgDcgwtDaFFoHH/Qb6xLw0KU+/n/+3t0eEb8l4N69QGcaEWf1qso3a4qn7Y8StlXcfMe8uspNF/KDj6qQOMvCuM+uUl+tkLd5NXiESsjycgjyxAqdCIO71iTSmsYVcsS3fY/gtIbO4UAFnCRPOXoSyqWqpXW7IRtFzL2N3MxgIBlIMErNvNWs5HPA7xAY/XO6UpSMWsQO4ppccdeNLSZDPwOxohKD/BX5oDin81nFn7fvIZgghfH5knF1nezK8IGKl+vtbgrwlUUULp/wJ4POceyIn0HaZoVsaCu6xFJcUJGfBqSvm4GZqkp2MlGxBODku0OSgEfIDEGMTg==
。
然后我必须在运行 java 的另一端用私钥解密这个字符串。我使用 bouncycastle:
这段代码向我展示了下一个错误:
而且我相信我在 Windows 端遗漏了一些东西,因为如果我在 Java 端使用相同的密钥并使用相同的公钥加密相同的数据,解密将按预期工作。
这里的密钥,我用 openssl 为这个问题(RSA 2048)生成:
私人:
上市
我错了什么?
c# - 使用 ProtectedData.Unprotect() 函数的 C# 错误
我在 C# 中试验ProtectData.Protect()
和函数。ProtectData.Unprotect()
我编写了一个程序,将加密数据写入 SQLite 数据库,然后读取数据库并解密数据。每次我运行我的代码时,我都会收到以下错误:
完整的代码很长,但这里是decrypt()
函数。我正在传递一个字节数组;我已使用 验证该类型为字节数组myByteData.GetType()
,它返回System.Byte[]
.
php - 为什么 Windows CryptVerifySignature 在 PHP 创建的签名上失败?
我想在 PHP 中创建一个哈希并在 Linux 服务器上对其进行签名(在 Windows 上使用 XAMPP 进行测试),然后使用公钥在 Windows 上验证哈希。我有以下 PHP 脚本来生成它(然后我右键单击,查看源代码,将签名创建复制/粘贴到 C/C++ Windows 应用程序)。当我运行 Windows 应用程序时,SHA256 哈希与 PHP 中创建的哈希匹配,但验证失败。我尝试不在 Windows 中对签名进行字节交换,但同样的问题。我究竟做错了什么?
这是PHP代码:
这是 Windows C/C++ 代码: