如何使用用于 actix 的 openssl 或 rustls 的 schannel 证书(上下文)和私钥(ncrypt)?

问题描述 投票:0回答:1

我需要从 Windows 商店获取证书和私钥,而不是当前的两个文件。 我使用这两个生成了 PKCS12 并将其导入到 Windows 商店中。

我正在使用schannel rs查找相关证书并且:

  1. 获取证书上下文(可以转换为 PEM 或 DER 格式,也可以使用 x509 解析器解析为 X509)
  2. 其相关
    NcryptKey

程序已经使用 rust openssl

SslAcceptorBuilder
从证书文件加载并使用
PKey<Private>
也从文件加载私钥。

问题:如何将

CertContext
上下文作为证书加载到
SslAcceptorBuilder
中以及如何将
NcryptKey
用作
PKey<Private>
? (或者也将其加载到
SslAcceptorBuilder
中,这无论如何都是必需的)。

由于

SslAcceptor
can 确实加载了 X509,我在 Rust openssl 文档中搜索了使用
X509Ref
创建一个
X509Builder
的方法,但它们都没有使用内存中已有的证书字节。或者至少我还没有找到方法。同样代表
PKey

目前我正在将证书作为 PEM 转储到文件中并加载该文件并删除该文件。 它比已经存在的文件要高一个级别,但仍然如此。而且私钥文件仍然存在。所以,没有任何安全保障。

有什么想法吗?我错过了什么?也许我无法避免使用另一个包,如 rustlsrustls-native-certs

更新

从 rust openssl 切换到 rustls 后,我可以将证书上下文用作

ServerConfig
构建器的 DER 格式。但我仍然缺少
PrivateKeyDer
或其他可用的 Ncrypt 密钥部分。现在查看 schannel-rs 存储库,看看我是否能在那里找到一些答案。

rust openssl actix-web schannel
1个回答
0
投票

使用 rustls-cng 结合 rustls 解决了所有问题。

服务器示例提供了足够的信息来使用 Windows 存储中的证书及其密码,以使用

HttpServer
传递到
Actix-web
.bind_rustls_0_22()
。由于某种原因,您甚至不需要拥有
Local Machine
存储的证书的管理权限。它还提供了从存储在一起的证书和私钥的
pfx/p12
文件导入证书的可能性。它就像一个魅力。

© www.soinside.com 2019 - 2024. All rights reserved.