首页 > 其他分享 >.net core 自颁发ssl证书,及客户端证书验证

.net core 自颁发ssl证书,及客户端证书验证

时间:2023-05-17 17:34:17浏览次数:32  
标签:core 证书 server ssl context new options 客户端

.net core 自颁发ssl证书,及客户端证书验证

openshell 颁发证书:

先下载 openshell,下载地址:https://slproweb.com/products/Win32OpenSSL.html

openssl genrsa -out server.key 2048
openssl x509 -req -in server.csr -out server.crt -signkey server.key -days 36500
openssl pkcs12 -export -in server.crt -inkey server.key -out server.pfx 

  

appsettings.json 配置文件:

  增加  kestrel 配置https及证书文件;

{
  "Kestrel": {
    "Endpoints": {
      "HttpsInlineCertAndKeyFile": {
        "Url": "https://*:5433",
        "Certificate": {
          "Path": "./certs/server.pfx",
          "Password": "123456"
        }
      }
    }
  }
}

 

 

//配置客户端连接时必需选择证书,不对证书验证
services.Configure<KestrelServerOptions>(options =>
{
    options.ConfigureHttpsDefaults(options =>
    {
        options.ClientCertificateMode = ClientCertificateMode.RequireCertificate;
        options.ClientCertificateValidation = (_, _, _) => true;
    });
});

//证书认证
services.AddAuthentication(CertificateAuthenticationDefaults.AuthenticationScheme)
    .AddCertificate(options =>
    {
        options.AllowedCertificateTypes = CertificateTypes.All;
        options.ValidateCertificateUse = false;
        options.ValidateValidityPeriod = false;
        options.ChainTrustValidationMode = System.Security.Cryptography.X509Certificates.X509ChainTrustMode.CustomRootTrust;

        options.Events = new CertificateAuthenticationEvents
        {
            OnCertificateValidated = context =>
            {
                //验证客户端证书指纹
                var thumbprints = context.HttpContext.RequestServices.GetRequiredService<IOptionsMonitor<ThumbprintOptions>>();
                if (thumbprints.CurrentValue.Contains(context.ClientCertificate.Thumbprint))
                {
                    var claims = new[]
                        {
                        new Claim(
                            ClaimTypes.NameIdentifier,
                            context.ClientCertificate.Subject,
                            ClaimValueTypes.String, context.Options.ClaimsIssuer),
                    };

                    context.Principal = new ClaimsPrincipal(
                        new ClaimsIdentity(claims, context.Scheme.Name));
                    context.Success();
                }
                else
                {
                    context.Fail("证书错误");
                }
                return Task.CompletedTask;
            }
        };
    });

 

管道中使用授权认证:

  //将http请求重置到 https
  app.UseHttpsRedirection();

  app.UseCertificateForwarding();

  app.UseAuthentication();

  app.UseAuthorization();

 

控制器中增加认证

[Authorize(AuthenticationSchemes = CertificateAuthenticationDefaults.AuthenticationScheme)]
public class textController : ControllerBase

 

标签:core,证书,server,ssl,context,new,options,客户端
From: https://www.cnblogs.com/intotf/p/17409463.html

相关文章

  • 如何将抓包工具证书(cer,crt, pem)写入到Android系统内置根证书目录中实现 HTTPS 抓包
    0x01前言:在Android6之前,手机系统既信任系统内置的证书,也信任用户自己安装的证书,但是在Android7之后,却发生了变化,手机系统只信任系统内置的根证书。当然了,这是为了手机系统更安全,但是这样一来,我们就无法使用burpsuite,charles,fidder抓包app的HTTPS请......
  • 7.1ASP.NET Core中的依赖注入
    //Addservicestothecontainer.varassemblies=Assembly.Load(typeof(ModuleInitializer).Assembly.GetName());//ReflectionHelper.GetAllReferencedAssemblies();//获取用户的所有程序集,代码过长,没有在这里给出builder.Services.RunModuleInitializers(assemblies);//......
  • .Net Core 实现WebSocket Server 的另外三种方式
    回顾之前已经写过关于《WebSocket原生socket实现》和《.NetCoreWebSocket服务端与客户端完整示例》以及《基于.NetTcpListener实现WebSocketServer通讯》。其中除了《.NetCoreWebSocket服务端与客户端完整示例》外,都是基于自己对Websocket协议的实现,这种实现在生产环境......
  • 最新Cobalt strike 4.8(专业版)([*] Generating X509 certificate and keystore (for SSL
    ColbaltStrike搭建和使用 下载: https://anonfiles.com/eay1D0rfzc/CobaltStrike4_8_lusuo_rar解压(如有)密码:lusuokali中: ┌──(root㉿kali)-[~]└─#unrarxCobaltStrike4_8_lusuo.rar    以kali为服务端打开 报错是因为没给可执行权限......
  • 服务器 nginx 前端配置 SSL 证书并能访问 HTTPS
    安装以下步骤,按图索骥即可。 首先,没安装nginx的去这个地址,安装nginx。本人版本是(1.18.0).https://nginx.org/安装好了之后,在nginx目录下执行cmd运行命令nginx.exe-V出现以下情况就证明nginx自带了SSL模块了,不需要额外安装 有了上面这个东西之后,nginx底下......
  • 自签SSL证书
    自签SSL证书key私钥=明文--自己生成(genrsa)csr公钥=由私钥生成crt证书=公钥+签名(自签名或者由CA签名)生成私钥需要输入密码两次12345678(随便输)opensslgenrsa-des3-outserver.pass.key2048生成私钥server.key输入上面的密码opensslrsa-inserv......
  • OpenSSL安装指南
    #一、查看主机openssl版本信息#1、查看路径whichopenssl#2、查看版本opensslversion#二、安装Openssl#方法一、直接安装yuminstallopensslopenssl-devel#方法二、下载源码编译安装#访问0penSSL官网资源,查看是否有最新的版本发布#宫网资源地址:https://www.openssl.org/so......
  • js函数式编程: nderscore.js
    nderscore.js是一个JavaScript工具库,它提供了一整套函数式编程的实用功能,弥补了jQuery没有实现的功能,同时又是Backbone必不可少的部分。官方:[url]http://www.bootcss.com/p/underscore/[/url]......
  • 使用java mail(jmail)通过gmail的stmp发送邮件:SSL方式
    [url]http://stackoverflow.com/questions/1990454/using-javamail-to-connect-to-gmail-smtp-server-ignores-specified-port-and-tries[/url]Transporttransport=session.getTransport("smtps");transport.connect(smtp_host,smtp_por......
  • Secure Connection Failed 安全连接失败无效的证书解决
    SecureConnectionFailed安全连接失败无效的证书解决删除配置文件即可 点击菜单帮助 选择更多故障排除信息 找到配置文件 把浏览器关闭打开配置删除 cert9.db即可   添加例外即可进入 ......