.Net Core 3.1 RSA - 无法导入 Pkcs8PrivateKey
.Net Core 3.1 RSA - unable to import Pkcs8PrivateKey
我有一个应用程序依赖于最初在 .pem 中收到的私钥 file.The 应用程序在 AWS ECS (Fargate) 中作为 docker 容器运行。私钥内容已移至 AWS Parameter Store 以避免处理多个 .pem 文件。
下面的代码导入这个密钥并在我的本地机器上运行。但是 CryptographicException
总是在 ECS 中抛出消息 'ASN1 corrupted data.'.
string pkcs8KeyString = exchange.Pem;
pkcs8KeyString = pkcs8KeyString.Replace("-----BEGIN PRIVATE KEY-----", string.Empty);
pkcs8KeyString = pkcs8KeyString.Replace("-----END PRIVATE KEY-----", string.Empty);
RSA rsa = RSA.Create();
try
{
rsa.ImportEncryptedPkcs8PrivateKey(ReadOnlySpan<char>.Empty, Convert.FromBase64String(pkcs8KeyString), out _);
}
catch (CryptographicException e)
{
//Log to ECS
Console.WriteLine("The key could not be imported!");
Console.WriteLine($"{e.GetType().FullName} {e.Message}");
throw;
}
我本地环境和ECS在这方面有什么区别?如何避免ECS出现异常?
根据我对 ECDsa
的研究,方法 ImportEncryptedPkcs8PrivateKey
确实需要在 Linux 上(或者更确切地说,当使用 OpenSSL 时)的加密密钥(带有 ENCRYPTED PRIVATE KEY
块的 PEM)支持的实现)并在给出未加密密钥时抛出。在 Windows(CNG 支持的实现)上,加密或未加密的形式(只有 PRIVATE KEY
块的 PEM)都受支持。
如果使用未加密的密钥,只需使用ImportPkcs8PrivateKey
。
编辑:刚刚用 RSA
测试,它的行为与 ECDsa
.
完全相同
我有一个应用程序依赖于最初在 .pem 中收到的私钥 file.The 应用程序在 AWS ECS (Fargate) 中作为 docker 容器运行。私钥内容已移至 AWS Parameter Store 以避免处理多个 .pem 文件。
下面的代码导入这个密钥并在我的本地机器上运行。但是 CryptographicException
总是在 ECS 中抛出消息 'ASN1 corrupted data.'.
string pkcs8KeyString = exchange.Pem;
pkcs8KeyString = pkcs8KeyString.Replace("-----BEGIN PRIVATE KEY-----", string.Empty);
pkcs8KeyString = pkcs8KeyString.Replace("-----END PRIVATE KEY-----", string.Empty);
RSA rsa = RSA.Create();
try
{
rsa.ImportEncryptedPkcs8PrivateKey(ReadOnlySpan<char>.Empty, Convert.FromBase64String(pkcs8KeyString), out _);
}
catch (CryptographicException e)
{
//Log to ECS
Console.WriteLine("The key could not be imported!");
Console.WriteLine($"{e.GetType().FullName} {e.Message}");
throw;
}
我本地环境和ECS在这方面有什么区别?如何避免ECS出现异常?
根据我对 ECDsa
的研究,方法 ImportEncryptedPkcs8PrivateKey
确实需要在 Linux 上(或者更确切地说,当使用 OpenSSL 时)的加密密钥(带有 ENCRYPTED PRIVATE KEY
块的 PEM)支持的实现)并在给出未加密密钥时抛出。在 Windows(CNG 支持的实现)上,加密或未加密的形式(只有 PRIVATE KEY
块的 PEM)都受支持。
如果使用未加密的密钥,只需使用ImportPkcs8PrivateKey
。
编辑:刚刚用 RSA
测试,它的行为与 ECDsa
.