RavenDB 4 的身份验证需要通过我通过 Let's Encrypt 创建的证书进行。我的私钥证书(.pfx) 存储在 Azure Key Vault 中。因为只能上传受密码保护的证书,所以我通过密码使其安全。
通过使用证书指纹加载证书后,它总是显示它没有私钥,因此我的 RavenDB 实例的身份验证过程失败。通过 Windows 证书存储在本地和在 Azure 中进行。
我已经尝试在没有密码的情况下使用私钥证书,然后我就可以收到私钥了。但是,这不是解决方案,因为我无法将其上传到 Azure。
var certStore = new X509Store(StoreName.My, StoreLocation.CurrentUser);
certStore.Open(OpenFlags.ReadOnly);
X509Certificate2 targetClientCertificate;
var certCollection = certStore.Certificates.Find(X509FindType.FindByThumbprint, ravenDbSettings["CertificateThumbPrint"], false);
targetClientCertificate = new X509Certificate2(certCollection[0].GetRawCertData(), ravenDbSettings["CertificatePassword"], X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable); ;
我还通过使用我在某处找到的导出进行了尝试
var targetTwo = new X509Certificate2(certCollection[0].Export(X509ContentType.Pfx, ravenDbSettings["CertificatePassword"]));
但后来我得到了
Internal.Cryptography.CryptoThrowHelper.WindowsCryptographicException:“密钥在指定状态下无效”
我的目标是加载证书的私钥,从而能够在 RavenDB 进行身份验证。