windows - 如何将 Qt 证书和私钥(支持 RSA 和 EC)添加到 Windows 存储并将其用于 Windows Web 服务器
问题描述
我需要在 C++ 程序中实现一个 API,该程序接收 PEM 证书 + 私钥并在内置 Windows Web 服务器上配置 SSL 端口以使用该证书和密钥。
从命令行,这可以通过将 PEM 信息转换为 PFX 文件,然后使用类似的东西安装它来完成:certutil -p <password> -importpfx certAndKey.pfx
然后做 a netsh http add sslcert ipport=0.0.0.0:443 certhash=<hash> appid=<appid>
,但现在我需要从 C++ 做同样的事情,它应该适用于 RSA 和 EC键。
我有从 PEM 证书和私钥到 QSslCertificate 和 QSslKey 的代码。我还能够使用 CertAddCertificateContextToStore 将 QSslCertificate 存储到 Windows 存储中,但我一直不知道如何获取附加到该证书的 QSslKey 私钥 - 特别是当密钥是 EC 密钥时。到目前为止,我无法找到任何示例来说明如何执行此操作,并且我自己使用 CryptDecodeObjectEx 和 CryptImportKey 的尝试失败了(因为我可能使用了错误的常量/结构/blob)。
那么,有人可以提供一些示例代码来说明如何:
- 从 QSslKey 获取存储在某些 Microsoft 密钥库中的 RSA 和 EC 密钥的密钥
- 告诉 Windows 这个密钥实际上是使用 CertAddCertificateContextToStore(或其他函数)添加的证书的私钥
- 如果需要使用另一个 API 来添加附加了私钥的证书,也包括那个
提前感谢任何可以在这里提供帮助的人,因为我淹没在所有这些 API 调用中,这些 API 调用针对各种类型的证书具有不同的常量和结构/blob...
解决方案
推荐阅读
- java - 数据收集 - 多级分类,使用哪个收集?
- java - 模拟 jooq 选择请求
- javascript - 什么可能导致 Math.random() 在每次重新加载页面时生成相同的“随机”数?
- sql-server - 存储过程不返回正确的 ROWS
- c# - 使用 C# 的 gRPC -“2 UNKNOWN:流删除”
- java - 如何从命令行运行 JavaFx 应用程序
- javascript - Date.now() 好用吗,会不会达到 JS 处理不了的数字?
- android - 动态限制 EditText 中的 maxLength
- python - 如何撤消还原操作以返回到我在 git 中的先前提交
- prestashop - 在用户帐户 Prestashop 中隐藏特定用户组 ID 的链接