我正在为S3云应用程序运行S3的证书存储区。 S3CertificateStore类从S3读取.pfx文件和密码文件,并在内存中创建证书。
private void LoadPrivateCerts(X509Certificate2Collection certificates)
{
var s3Files = S3Facade.ListObjects(Config.Bucket, Config.PrivatePath).ToList();
foreach (var filePath in s3Files)
{
if (filePath.EndsWith(".pass") || filePath.EndsWith("/"))
{
continue;
}
try
{
var certBytes = S3Facade.GetObject(Config.Bucket, filePath);
var pwdBytes = S3Facade.GetObject(Config.Bucket, filePath + ".pass");
var pwd = Encoding.UTF8.GetString(pwdBytes);
var cert = new X509Certificate2(certBytes, pwd, X509KeyStorageFlags.Exportable); // needs to be exportable!
certificates.Add(cert);
}
catch (Exception e)
{
exceptions.Add(e);
}
}
}
当我在本地运行时,所有证书都从S3中提取并正确重构。但是......当我在EC2实例上运行代码时,一些证书很好,而其他证书则失败。 (同样总是失败)。
EXCEPTION: The system cannot find the file specified.
at System.Security.Cryptography.CryptographicException.ThrowCryptographicException(Int32 hr)
at System.Security.Cryptography.X509Certificates.X509Utils._LoadCertFromBlob(Byte[] rawData, IntPtr password, UInt32 dwFlags, Boolean persistKeySet, SafeCertContextHandle& pCertCtx)
at System.Security.Cryptography.X509Certificates.X509Certificate.LoadCertificateFromBlob(Byte[] rawData, Object password, X509KeyStorageFlags keyStorageFlags)
我感到困惑。工作中会出现某种字符编码差异吗?我不认为任何密码都有高位字符,但是我可能会在某些东西被用完之后看到它们。
有什么建议吗?
答案 0 :(得分:0)
我找到了一个可行的解决方案。如果我设置IIS AppPool设置"加载用户配置文件"到真,然后证书建设工作。 .ebextension文件中的以下脚本似乎可以解决这个问题:
c:\windows\system32\inetsrv\appcmd.exe set config /section:applicationPools "/[name='DefaultAppPool'].processModel.loadUserProfile:true"
在这次变更之前,我仍然不明白为什么证书构建在某些证书上一直是成功的,并且在其他证书之前一直失败。