目前我正在开发一个项目,我需要验证证书的 .cer
版本。对于每笔交易,用户将上传一个新的 .cer
文件。下面是我的代码
public static bool IsValidCert(this MemoryStream cer)
{
using X509Certificate2 cert = new X509Certificate2(cer.ToArray());
return cert.Verify();
}
因此,在本地系统中,证书已正确验证(当前使用自签名证书)。因此,为了确保将每个证书添加到根目录,请使用以下代码和 X509Store
public static bool IsValidCert(this MemoryStream cer)
{
using X509Certificate2 cert = new X509Certificate2(cer.ToArray());
using X509Store store = new X509Store(StoreName.TrustedPublisher, StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadWrite);
store.Add(cert);
store.Close();
return cert.Verify();
}
所以它适用于我的本地系统。但是,当我将同一段代码推送到 Azure App service
时,出现以下错误:- “链错误:UntrustedRoot 证书链已处理,但在根证书中终止,该根证书不是受到信任提供者的信任。”
.
我没有得到的问题在哪里。在我的本地系统中,证书位于受信任的根证书颁发机构中。
如何将该根证书导入为 Azure 中的受信任根?
用例:- 我正在使用 GraphAPI 并且正在为 AAD 应用程序创建客户端证书。因此用户(已授权)将上传证书来创建 AAD 应用程序。所以我需要在将证书推送到 Graph API 之前验证证书是否有效。目前使用 X509Certificate2
来验证证书。因此,不受信任的证书(自签名证书)在应用程序服务中阻止了我。
最佳答案
应用服务前端不会对传入的客户端证书进行任何证书验证。
对于应用服务 Multi-Tenancy PaaS,不支持添加/删除计算机的可信证书存储。目前仅 ASE(应用服务环境)支持添加根 CAS。 ASE -private-client-certificate
应用服务是在 Azure PaaS(平台即服务)基础架构之上运行的服务。应用服务在 sandboxed environment 上运行对底层机器有限制。
在应用服务中,请求的 TLS 终止发生在前端负载均衡器处。在启用客户端证书的情况下将请求转发到应用代码时,应用服务会注入(inject)带有客户端证书的 X-ARR-ClientCert
请求 header 。除了将其转发到您的应用程序之外,应用服务不会对此客户端证书执行任何操作。您的应用代码负责验证客户端证书。
关于c# - 如何将该根证书导入为 Azure 应用服务中的受信任根?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69824863/