using System.IO;
using System.Security.Cryptography.X509Certificates;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Server.Kestrel.Https;
using Microsoft.Extensions.Hosting;
namespace AuthEndpoint
{
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder
.UseStartup<Startup>()
.ConfigureKestrel(options =>
{
options.ConfigureHttpsDefaults(opt =>
{
opt.ServerCertificate = new X509Certificate2(Path.Combine("c:\\server\\server.pfx"), "Password");
opt.ClientCertificateMode = ClientCertificateMode.RequireCertificate;
opt.CheckCertificateRevocation = false;
opt.AllowAnyClientCertificate();
});
});
});
}
}
startup.cs
using System;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authentication.Certificate;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
namespace AuthEndpoint
{
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.AddControllers();
services
.AddAuthentication(CertificateAuthenticationDefaults.AuthenticationScheme)
.AddCertificate(options =>
{
options.AllowedCertificateTypes = CertificateTypes.All;
options.Events = new CertificateAuthenticationEvents
{
OnCertificateValidated = context =>
{
Console.WriteLine(context.ClientCertificate.IssuerName);
context.Success();
return Task.CompletedTask;
},
OnAuthenticationFailed = context =>
{
Console.WriteLine(context.Exception);
return Task.CompletedTask;
}
};
})
;
services.AddCertificateForwarding(options =>
{
options.CertificateHeader = "X-ARR-ClientCert";
options.HeaderConverter = (headerValue) =>
{
X509Certificate2 clientCertificate = null;
if (!string.IsNullOrWhiteSpace(headerValue))
{
byte[] bytes = Encoding.UTF8.GetBytes(headerValue);
clientCertificate = new X509Certificate2(bytes);
}
return clientCertificate;
};
});
services.AddAuthorization();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseCertificateForwarding();
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
namespace AuthEndpoint.Controllers
{
[ApiController]
[Route("[controller]")]
[Authorize]
public class WeatherForecastController : ControllerBase
{
private static readonly string[] Summaries = new[]
{
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
};
private readonly ILogger<WeatherForecastController> _logger;
public WeatherForecastController(ILogger<WeatherForecastController> logger)
{
_logger = logger;
}
[HttpGet]
public IEnumerable<WeatherForecast> Get()
{
var rng = new Random();
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = DateTime.Now.AddDays(index),
TemperatureC = rng.Next(-20, 55),
Summary = Summaries[rng.Next(Summaries.Length)]
})
.ToArray();
}
}
}
在AddCertificate中,In选项需要设置下一行:options.revocationmode=x509revocationmode.nocheck;
问题内容: 我正在使用Jersey客户端库针对在jboss上运行的rest服务运行测试。我使用自签名证书在服务器(在本地主机上运行)上设置了https。 但是,每当我使用https url运行测试时,都会出现以下错误: 我知道这是因为我的自签名证书不在Java密钥库中。有什么办法可以让我不检查ssl证书的有效性,而直接使用它呢? 这段代码只能在测试服务器上运行,因此,我不想在每次设置新的测试服务器
我正在使用AWS API网关和一个后端。为了确保所有的连接都通过API网关,我需要使用TLS客户端身份验证(又名双向身份验证,相互身份验证)。 原则上,这与以下内容一起工作: 我遇到的问题是这个错误: TLS:无法验证客户端的证书:X509:由未知授权机构签署的证书(可能是因为在尝试验证候选授权机构证书“Apigateway”时“X509:签名无效:父证书无法签署此类证书”)
问题内容: 我正在尝试确保通过Internet进行通信的Java客户端/服务器应用程序的连接安全。我的想法是将SSL套接字与自签名证书和客户端身份验证一起使用。我做了以下事情: 服务器:包含新的自签名证书的密钥库。 客户端:包含新的自签名证书的密钥库。 服务器:包含导出的客户端证书的信任库(来自上面的项目符号)。导出客户端证书并将其导入服务器的信任库 客户端:包含导出的服务器证书的信任库(从第一个
我正在为TIBCO EMS队列测试运行一个JMS点对点采样器。我已经将所有tibco ems JAR添加到jmeter lib文件夹中。在JMS采样器中配置队列详细信息、上下文工厂、用户凭据。当使用tcp请求队列击中TIBCO ems时,它正在工作。但是当用SSL url击中时,它无法连接。 我尝试了以下方式来附上tibco团队给出的自签名证书
我的手被https、ssl、PKI之类的东西弄得脏兮兮的。对于自签名证书,有一点我不太理解。假设我想创建一个自签名证书,并在我们想要建立安全连接时将其发送给我的朋友。 所以步骤是: 创建一个私钥。 创建一个公钥。 用我的公钥在证书上签名。 因此,当我的朋友得到我的证书时,他必须验证他得到的证书是我的,他需要解密数字签名。但为了解密和验证他必须拥有我的私钥。所以,我有点困惑。