上一篇我们通过导出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类生成自签证书。水平所限,欢迎指正。

.NET 6学习笔记(8)生成自签证书的更多相关文章

  1. GIS案例学习笔记-三维生成和可视化表达

    GIS案例学习笔记-三维生成和可视化表达 联系方式:谢老师,135-4855-4328,xiexiaokui#qq.com 目的:针对栅格或者矢量数值型数据,进行三维可视化表达 操作时间:15分钟 案 ...

  2. flink学习笔记-快速生成Flink项目

    说明:本文为<Flink大数据项目实战>学习笔记,想通过视频系统学习Flink这个最火爆的大数据计算框架的同学,推荐学习课程: Flink大数据项目实战:http://t.cn/EJtKh ...

  3. 使用cfssl生成自签证书

    安装ssl wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 wget https://pkg.cfssl.org/R1.2/cfssljson_li ...

  4. etcd使用Cfssl生成自签证书(pem)

    CFSSL是CloudFlare开源的一款PKI/TLS工具,CFSSL包含一个命令行工具和一个用于签名,验证并且捆绑TLS证书的HTTP API服务,环境构建方面需要 Go 1.12+. 需要两套证 ...

  5. MySQL学习笔记:生成一个时间序列

    今天遇到一个需求是生成以下表格的数据,一整天24小时,每秒一行数据. 寻找颇旧,找到另外两个实现的例子,暂且学习一翻.另一个见另外一篇. DAY) AS DATE FROM ( ) AS tmp, ( ...

  6. python学习笔记(生成xml)

    想着给框架加些功能 首先想到的是生成测试报告 这里就涉及到了生成什么格式的文件 我这边就准备生成 xml 格式的文件 自己先学习了整理了下 代码如下: #!/usr/bin/env python # ...

  7. R语言学习笔记:生成序列(Genenrating Sequences)

    R提供了多种生成不同类型序列的方法.如: > x<-1:20 > x [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 1 ...

  8. MySQL学习笔记:生成时间维度表

    # ---- 对应时间戳怎么生成的? ---- /*TIME_CD TIME_CD1000000 000005000001 000005000002 000005000003 000005000004 ...

  9. Thinkphp学习笔记5-URL生成U方法

    为了配合所使用的URL模式,我们需要能够动态的根据当前的URL设置生成对应的URL地址,为此,ThinkPHP内置提供了U方法,用于URL的动态生成,可以确保项目在移植过程中不受环境的影响. 定义规则 ...

  10. 08 python学习笔记-随机生成大乐透号码(八)

    1 #产生大乐透号码 2 #前区 1-32,5 后区 1-12,2 3 #1.前区从1-32中级取5个,后区再从1-12里面取2个 4 #01 02 03 04 5 def dlt(): #生成随机大 ...

随机推荐

  1. 使用npm包API Promise化

  2. [复现]DASCTF Sept X 浙江工业大学秋季挑战赛-PWN

    hehepwn 一开始泄露stack地址,然后写入shellcode返回到shellcode执行 from pwn import * context.os = 'linux' context.log_ ...

  3. 【学习】蓝牙的一些基础知识or什么是蓝牙

    蓝牙----Bluetooth(短距离无线通信技术)  2022-07-29   14:31:27 蓝牙技术有什么特点(体积小,易集成,低功耗,适用广,抗干扰,成本低,开放性) (1) 蓝牙模块体积很 ...

  4. gorm操作sqlite3,高并发读写如何避免锁库?

    1. 场景 这两天一直被这个sqlit3困扰,起因是项目中需要有这样一个中间,中间件承担着API角色和流量转发的角色,需要接收来自至少300个agent的请求数据,和健康检测的请求. 所以当即想到用g ...

  5. 打不过AI就拉拢?ChatGPT和MidJourney已成我小秘书!

    为了体验AI,晓衡这两周战斗力爆棚了! 每天大概睡了四~五个小时,而且中午也没有休息过,但精神却还很亢奋. 直到周一下午,身体才有种被掏空的感觉,晚上 10 点就睡了.可能是兴奋劲还在,早晨不到 6 ...

  6. 【chatQA】nvm包版本管理

    如何使用nvm来管理不同版本的 Node.js,然后使用不同的 Node.js 版本来运行不同版本的 React 应用? 要使用 nvm 来管理不同版本的 Node.js,可以按照以下步骤进行操作: ...

  7. Linux0.11源码学习(二)

    Linux0.11源码学习(二) linux0.11源码学习笔记 参考资料:https://github.com/sunym1993/flash-linux0.11-talk 源码查看:https:/ ...

  8. Vditor在原生JS中如何结合后端使用

    目录 1.Vditor介绍 2.如何在原生JS中结合后端使用 2.1 背景 2.2 正确使用方式 2.2.1 编辑页面 2.2.2 回显页面(修改页面) 2.2.3 预览页面 3.小结一下 1.Vdi ...

  9. RHCE服务---Web

    网站需求:请给openlab搭建web网站 1.基于域名www.openlab.com可以访问网站内容为 welcome to openlab!!! 2.给该公司创建三个子界面分别显示学生信息,教学资 ...

  10. Flex布局原理【转载】

    引言 CSS3中的 Flexible Box,或者叫flexbox,是用于排列元素的一种布局模式. 顾名思义,弹性布局中的元素是有伸展和收缩自身的能力的. 相比于原来的布局方式,如float.posi ...