在Azure应用服务中使用pfx证书失败

问题描述 投票:0回答:1

我正在使用 Abp.io,在 .NET 8 中,它可以通过以下代码行正常工作:

if (!File.Exists(fileName))
{
    throw new FileNotFoundException($"Signing certificate couldn't be found: {fileName}");
}

var certificate = new X509Certificate2(fileName, passPhrase, X509KeyStorageFlags.MachineKeySet);

builder.AddSigningCertificate(certificate);
builder.AddEncryptionCertificate(certificate);

但是当升级到 Abp.io

9.0.3
和 .NET 9 时,我必须更新这些行,因为构造函数已过时,如此处所述 microsoft x509-certificates

我现在的新代码是:

var path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, fileName);

if (!File.Exists(path))
{
    throw new FileNotFoundException($"Signing certificate couldn't be found: {fileName}");
}

var certificate = X509CertificateLoader.LoadPkcs12FromFile(path, passPhrase, X509KeyStorageFlags.MachineKeySet);

builder.AddSigningCertificate(certificate);
builder.AddEncryptionCertificate(certificate);

但它在Azure App Service中不起作用,我收到以下错误:

System.Security.Cryptography.CryptographicException:系统找不到指定的文件。

我检查了该文件是否存在于正确的位置,情况确实如此。我也尝试添加环境变量

WEBSITE_LOAD_USER_PROFILE
1
,错误不同但还是不行

System.Security.Cryptography.CryptographicException:密钥集不存在

我很难理解为什么它在 net8 中工作但在 .NET 9 中不起作用,无论是使用构造函数还是

Load
方法。

证书是在管道构建任务期间使用命令生成的

dotnet dev-certs https -v -ep openiddict.pfx -p $(passPhrase)

它生成一个包含所有 DLL 和证书的工件,然后发布管道将其推送到应用服务

c# x509certificate2 abp-framework azure-appservice openiddict
1个回答
0
投票

经过大量测试和调整,它终于可以使用以下密钥存储标志了

X509KeyStorageFlags.EphemeralKeySet

WEBSITE_LOAD_USER_PROFILE=1
环境变量

© www.soinside.com 2019 - 2024. All rights reserved.