首页 > 其他分享 >.NET 6学习笔记(8)生成自签证书

.NET 6学习笔记(8)生成自签证书

时间:2023-05-07 18:11:07浏览次数:56  
标签:证书 笔记 Kestrel DnsName 签证 NET localhost

上一篇我们通过导出IIS Express的自签证书,供ASP.NET Core程序启用HTTPS。本篇我们讨论如何生成自签证书。
自签证书的生成,有多种方式。比如OpenSSL或PowerShell都可以通过命令生成证书。对于.NET程序,也有System.Security.Cryptography.X509Certificates命名空间下,对应的C#类来实现。
首先我们通过类X500DistinguishedName来填写证书的Subject,即使用者信息。
Subject中的信息用以识别证书使用者,对自签证书来说可能不太重要,常见的字段有:

 比如该证书由中国的巨硬软件研发中心使用,Subject可能就是下面的写法。

string subject = $"C=CN, O=Hugehardsoft, OU=R&D Hub, CN={Environment.MachineName}";

var rsa = RSA.Create();
var x500DistinguishedName = new X500DistinguishedName(subject);
var req = 
    new CertificateRequest(x500DistinguishedName, rsa, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);

SSL证书一般通过RSA算法来生成公钥和私钥。
在创建CertificateRequest实例之后,我们需要添加DnsName,可以认为证书只对这里添加到DnsName的地址才有效。

SubjectAlternativeNameBuilder sanBuilder = new SubjectAlternativeNameBuilder();
sanBuilder.AddDnsName("localhost");
sanBuilder.AddDnsName(Environment.MachineName);
req.CertificateExtensions.Add(sanBuilder.Build());

比如上述代码,仅添加了localhost和机器名作为DnsName,那么我们在用IP地址访问时。证书将显示为不可信,网站不安全。
在完成DnsName的添加后,我们就可以生成自签证书了。通过CreateSelfSigned方法,创建一个10年有效期的证书,并将证书保存为c:\temp\SelfSignedSample.pfx文件,同时设置证书的导出密码为123456。我们通过Kestrel配置证书时将会用到该密码。

var cert = req.CreateSelfSigned(DateTimeOffset.Now, DateTimeOffset.Now.AddYears(10));
File.WriteAllBytes("C:\\temp\\SelfSignedSample.pfx", cert.Export(X509ContentType.Pfx, "123456"));

 参考上一篇《.NET 6学习笔记(7)——ASP.NET Core通过配置文件启用HTTPS》,我们创建一个ASP.NET Core的Web APP。

 然后在appsettings.production.json里添加Kestrel的配置项:

{
  "Kestrel": {
    "Endpoints": {
      "Https": {
        "Url": "https://localhost:8888",
        "Certificate": {
          "Path": "c:\\temp\\SelfSignedSample.pfx",
          "Password": "123456"
        }
      }
    }
  }
}

我们在Properties文件夹下的launchSettings.json中,修改对应Kestrel托管的配置项,将"ASPNETCORE_ENVIRONMENT"修改为"Production"。

  "profiles": {
    "WebAppWithSelfSignedCert": {
      "commandName": "Project",
      "dotnetRunMessages": true,
      "launchBrowser": true,
      "applicationUrl": "https://localhost:7122;http://localhost:5122",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Production"
      }
    },

此时我们用Kestrel托管(不是IIS Express)上述ASP.NET Core应用,并通过https://localhost:8888去访问该网站。会发现提示不是专用连接。这是因为我们没有信任该自签证书。

 就和12306网站的证书一样的操作,需要安装该自签证书。实际用户可以通过浏览器导出证书。然后双击进行安装。

 需要注意的是,我们应该将证书安装到“受信任的根证书颁发机构”。

完成上述操作之后。清理浏览器缓存并关闭浏览器,重新打开后我们再通过localhost:8888去访问网站,就会看到显示为可信任的https连接了。
但是如果我们用本机的IP去访问,仍然会使不受信任的状态。这是因为之前提到的没有把IP地址加入到证书的DnsName中。

 本篇我们介绍了如何通过.NET中命名空间System.Security.Cryptography.X509Certificates下的Class类生成自签证书。水平所限,欢迎指正。

 

标签:证书,笔记,Kestrel,DnsName,签证,NET,localhost
From: https://www.cnblogs.com/manupstairs/p/17379721.html

相关文章

  • Spring复习笔记
    Spring架构核心概念IOC&DIIOCDIbeanbean的实例化......
  • mall学习笔记(2)
    1.Spring注解:代替xml配置文件2.@Autowired:修饰成员变量进行依赖注入Couldnotautowire.Nobeansof‘xxx”typefound(三种方法)3. mybatisexamle类:进行sql查询等操作4.swagger使用配置Swagger2Config添加@ApiOperation("")打开http://localhost:8080/swagger-ui.......
  • 第10章:10W QPS真刀实操__以及基于ZK+Netty手写分布式测试工具 177手机路人甲账号 主目
    10WQPS真刀实操__以及基于ZK+Netty手写分布式测试工具参考链接系统架构知识图谱(一张价值10w的系统架构知识图谱)https://www.processon.com/view/link/60fb9421637689719d246739秒杀系统的架构https://www.processon.com/view/link/61148c2b1e08536191d8f92f10WQPS真刀实......
  • Python数据分析与挖掘实战笔记
    (声明:这些代码只是看书的时候跟着敲一敲,留个印象,为的是以后用到有个方便快速查找看个思路,并没有真正运行。)数据挖掘建模过程数据挖掘建模过程:定义挖掘目标:明确挖掘目标,弄清用户需求。数据采样:采样标准(相关性、可靠性、有效性)采样方法:随机、分层、等距数据探索:进行探索......
  • 阅读笔记:Merak 大模型并行训练系统
    论文简介Merak:AnEfficientDistributedDNNTrainingFrameworkWithAutomated3DParallelismforGiantFoundationModels这篇论文发表在IEEETPDS2023上,主题是提出一种高效的具有三维并行性的自动化分布式训练系统-Merak。论文背景和Motivation3维并行训练即将数据并......
  • Django笔记三十七之多数据库操作(补充版)
    本文首发于公众号:Hunter后端原文链接:Django笔记三十七之多数据库操作(补充版)这一篇笔记介绍一下Django里使用多数据库操作。在第二十二篇笔记中只介绍了多数据库的定义、同步命令和使用方式,这一篇笔记作为补充详细介绍如何对Django系统的多个数据库进行针对的建表同步操......
  • 学习笔记:MySQL常用的一些SQL语句
    本文谈谈MySQL的开发必会的sql语句创建数据库createdatabasedb1;删除数据库dropdatabasedb1;创建数据表createtabletb1用户表(idintnotnullauto_increment primarykey,namechar(10),                     department_idint,            ......
  • .NET周报 【4月第5期 2023-04-30】
    国内文章基于Github平台的.NET开源项目模板.嘎嘎实用!https://www.cnblogs.com/NMSLanX/p/17326728.html大家好,为了使开源项目的维护和管理更方便一些,出于个人需求写了一款开源项目的模板,该模板基于Github平台,并使用.NET来实现管道功能.在接受过实战检验后,于今......
  • AC 自动机学习笔记
    前置知识:\(\texttt{trie}\)树。不会的话到这篇博客看看吧。前置知识:\(\texttt{kmp}\)。不会的话到这篇博客看看吧。字符串好的题单。下面设所有字符串的大小之和为\(|\Sigma|\)。\(\texttt{AC}\)自动机(也叫\(\texttt{ACAM}\))\(\texttt{ACAM}\)时为了解决\(\lceil\)多个......
  • SpringCloud gateway 元数据,超时,Netty Access Logs
    元数据spring:cloud:gateway:routes:-id:route_with_metadatauri:https://example.orgmetadata:optionName:"OptionValue"compositeObject:name:"value"iAmNu......