.net core .Net Core 3.1 RSA-无法导入Pkcs8PrivateKey
我有一个应用程序,它依赖于最初在.pem文件中收到的私钥。该应用程序在AWS ECS(Fargate)中作为docker容器运行。私钥内容已移动到AWS参数存储,以避免处理多个.pem文件 下面的代码导入此密钥并在我的本地计算机上运行。但在ECS中总是会抛出带有消息“ASN1损坏数据”的.net core .Net Core 3.1 RSA-无法导入Pkcs8PrivateKey,.net-core,cryptography,amazon-ecs,asp.net-core-3.1,.net Core,Cryptography,Amazon Ecs,Asp.net Core 3.1,我有一个应用程序,它依赖于最初在.pem文件中收到的私钥。该应用程序在AWS ECS(Fargate)中作为docker容器运行。私钥内容已移动到AWS参数存储,以避免处理多个.pem文件 下面的代码导入此密钥并在我的本地计算机上运行。但在ECS中总是会抛出带有消息“ASN1损坏数据”的加密异常 string pkcs8KeyString = exchange.Pem; pkcs8KeyString = pkcs8KeyString
加密异常
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;
}
string pkcs8KeyString=exchange.Pem;
pkcs8KeyString=pkcs8KeyString.Replace(“----开始私钥------”,string.Empty);
pkcs8KeyString=pkcs8KeyString.Replace(“----结束私钥------”,string.Empty);
RSA=RSA.Create();
尝试
{
rsa.ImportEncryptedPkcs8PrivateKey(ReadOnlySpan.Empty,Convert.FromBase64String(pkcs8KeyString),out 3;);
}
捕获(加密异常)
{
//登录到ECS
WriteLine(“无法导入密钥!”);
WriteLine($“{e.GetType().FullName}{e.Message}”);
投掷;
}
我的本地环境和ECS在这方面有什么不同?如何避免ECS中出现异常?根据我对ECDsa
的研究,该方法ImportEncryptedPkcs8PrivateKey
确实需要在Linux上使用加密密钥(PEM withEncryptedPrivate key
块)(或者在使用OpenSSL支持的实现时)并在给出未加密密钥时抛出。在Windows(CNG支持的实现)上,支持加密或非加密两种形式(仅使用私钥的PEM
块)
如果使用unencrypred键,只需使用importpkcs8 privateKey
编辑:刚刚用RSA
进行了测试,其行为方式与ECDsa
如何从参数存储加载exchange.Pem?。您能否共享您的任务定义详细信息和容器的任何entryscript?@Imranexchange
是exchange
的一个实例,它是param store数据绑定的对象。它通过IConfiguration
注入到类中,相关值反序列化到Exchange
对象中。我还将共享ECR部署shell脚本。aws ECR get login--不包括电子邮件--region us-east-1 |/bin/bash docker build-t project staging。docker tag project staging:latest 640848491082.dkr.ecr.us-east-1.amazonaws.com/project staging:latest docker push 6408491082.dkr.ecr.us-east-1.amazonaws.com/project staging:latestI我对ECDsa
有类似的问题,目前我认为它可以在Windows上工作(使用CNG实现),但在Linux上不工作(使用OpenSSL实现)。很有趣,谢谢。我将尝试获取加密的私钥并返回接受您的答案。这将有助于openssl pkcs8-in-priv.pem-topk8-v1 PBE-SHA1-3DES-out priv-crypt.pem
或使用更强的密码openssl pkcs8-in-priv.pem-topk8-v2 aes-256-cbc-v2prf hmacWithSHA256-out enckey.pem
,或仅使用ImportPkcs8PrivateKey
。也许这是一个有用的链接:。