我正在尝试获得相互客户认证以在 Azure 中工作。我正在使用以下配置运行 Web 应用程序:
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services
.AddAuthentication(CertificateAuthenticationDefaults.AuthenticationScheme)
.AddCertificate();
services.AddCertificateForwarding(options =>
options.CertificateHeader = "X-ARR-ClientCert");
services.AddHttpClient();
services.AddControllers();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseAuthentication();
app.UseHttpsRedirection();
app.UseRouting();
app.UseCertificateForwarding();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
}
作为对此的扩展,我添加了 Web 应用程序将客户端证书发送到我的应用程序。当我部署它时,它很好。我前面有 cloudflare 并启用了 Origin Pull,我可以验证客户端证书是通过发送的。我可以看到,当我尝试直接在 azurewebsites.net 域上访问 Web 应用程序时,我的浏览器正在请求证书。如果我尝试通过 Cloudflare,它将显示网页。我认为这是可行的,但是当我检查日志时,我得到了:
2020-07-02 13:30:52.711 +00:00 [信息] Microsoft.AspNetCore.Hosting.Diagnostics:请求开始 HTTP/1.1 GET https://[REMOVED]/api/ping
2020-07-02 13:30:52.718 +00:00 [Trace] Microsoft.AspNetCore.HostFiltering.HostFilteringMiddleware:允许所有主机。
2020-07-02 13:30:53.107 +00:00 [警告] Microsoft.AspNetCore.Authentication.Certificate.CertificateAuthenticationHandler:证书验证失败,主题为 OU=Origin Pull,O="Cloudflare, Inc.",L= San Francisco, S=California, C=US.UntrustedRoot 已处理的证书链,但以不受信任的提供者信任的根证书终止。RevocationStatusUnknown 吊销功能无法检查证书的吊销。OfflineRevocation 吊销功能无法检查吊销,因为吊销服务器处于脱机状态。
2020-07-02 13:30:53.107 +00:00 [信息] Microsoft.AspNetCore.Authentication.Certificate.CertificateAuthenticationHandler:证书未通过身份验证。失败消息:客户端证书验证失败。
2020-07-02 13:30:53.110 +00:00 [调试] Microsoft.AspNetCore.Routing.Matching.DfaMatcher:为请求路径“/api/ping”找到 1 个候选者
看起来客户端证书不被接受。应该是吗?我的意思是,它是 Cloudflare。我在设置中做错了吗?我应该在我身边安装一些额外的东西吗?我在这里浏览了本指南:https: //support.cloudflare.com/hc/en-us/articles/204899617-Authenticated-Origin-Pulls并没有提及额外安装证书的任何内容。我应该在网络应用程序本身上安装 origin-pull-ca.pem 吗?
当我将发送给我的证书与 origin-pull-ca.pem 进行比较时,两者不相等:
- origin-pull-ca.pem:指纹:1F5BA8DCF83E6453DD75C47780906710901AD641(附加信息:CN=origin-pull.cloudflare.net, S=California, L=San Francisco, OU=Origin Pull, O="CloudFlare, Inc.", C=我们)
- 从 Cloudflare 发送:指纹:A27996CBA564D24731BC76439C48920C1F7D4AA3(附加信息:OU=Origin Pull,O="Cloudflare, Inc.",L=San Francisco,S=California,C=US)
他们不应该是平等的吗?
请注意:我不是证书、SSL 等方面的专家。我想在这里学习 :)