我需要从 Windows 商店获取证书和私钥,而不是当前的两个文件。 我使用这两个生成了 PKCS12 并将其导入到 Windows 商店中。
我正在使用schannel rs查找相关证书并且:
NcryptKey
。程序已经使用 rust openssl 的
SslAcceptorBuilder
从证书文件加载并使用 PKey<Private>
也从文件加载私钥。
问题:如何将
CertContext
上下文作为证书加载到SslAcceptorBuilder
中以及如何将NcryptKey
用作PKey<Private>
? (或者也将其加载到 SslAcceptorBuilder
中,这无论如何都是必需的)。
由于
SslAcceptor
can 确实加载了 X509,我在 Rust openssl 文档中搜索了使用 X509Ref
创建一个 X509Builder
的方法,但它们都没有使用内存中已有的证书字节。或者至少我还没有找到方法。同样代表 PKey
。
目前我正在将证书作为 PEM 转储到文件中并加载该文件并删除该文件。 它比已经存在的文件要高一个级别,但仍然如此。而且私钥文件仍然存在。所以,没有任何安全保障。
有什么想法吗?我错过了什么?也许我无法避免使用另一个包,如 rustls 或 rustls-native-certs?
更新
从 rust openssl 切换到 rustls 后,我可以将证书上下文用作
ServerConfig
构建器的 DER 格式。但我仍然缺少 PrivateKeyDer
或其他可用的 Ncrypt 密钥部分。现在查看 schannel-rs 存储库,看看我是否能在那里找到一些答案。
使用 rustls-cng 结合 rustls 解决了所有问题。
服务器示例提供了足够的信息来使用 Windows 存储中的证书及其密码,以使用
HttpServer
传递到 Actix-web
的 .bind_rustls_0_22()
。由于某种原因,您甚至不需要拥有 Local Machine
存储的证书的管理权限。它还提供了从存储在一起的证书和私钥的 pfx/p12
文件导入证书的可能性。它就像一个魅力。