1

暗号化に秘密鍵を使用するサービスがあります。サービスに管理者権限を与えると、機能します。通常の特権では、そうではありません。GetRSAPrivateKey() を呼び出すと、「無効なプロバイダー タイプが指定されました」というエラーが表示されます。

var data = Convert.FromBase64String(cipherText);
var dataList = data.ToList();

using (var store = new X509Store(StoreName.TrustedPublisher, StoreLocation.LocalMachine))
using (var aesProvider = new AesCryptoServiceProvider())
{
    store.Open(OpenFlags.ReadOnly);
    byte[] key;
    using (var cert = store.Certificates.Find(X509FindType.FindBySubjectName, CertificateName, false)[0])
    {
        var publicKey = cert.GetRSAPublicKey();
        var encryptLength = publicKey.Encrypt(Encoding.UTF8.GetBytes("xxxxxxx"), RSAEncryptionPadding.OaepSHA512).Length;
        var encryptedKey = dataList.Take(encryptLength).ToArray();
        dataList.RemoveRange(0, encryptLength);
        var privateKey = cert.GetRSAPrivateKey();
        key = privateKey.Decrypt(encryptedKey, RSAEncryptionPadding.OaepSHA512);
    }

キーが存在しない場合は、セットアップ中にプログラムによってストアに追加されます。

var rsa = RSA.Create(2048);
var request = new CertificateRequest($"cn={CertificateName}", rsa, HashAlgorithmName.SHA512, RSASignaturePadding.Pkcs1);
var cert = request.CreateSelfSigned(DateTimeOffset.Now, DateTimeOffset.Now.AddYears(50));
File.WriteAllBytes("c:\\temp\\EncryptionCert.pfx", cert.Export(X509ContentType.Pfx, _certificatePassword));
store.Open(OpenFlags.ReadWrite);
using (var cert = new X509Certificate2("c:\\temp\\EncryptionCert.pfx", _certificatePassword,
                    X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.MachineKeySet))
{
    store.Add(cert);
}

証明書ストアへのアクセスを許可する管理者以外のアカウント設定がありますか、またはそれをロードするときにコードで何か間違っていますか?

4

1 に答える 1