如果项目不大,或者是客户公司内部使用,或者不想花钱购买证书,又或者用于开发阶段测试……完全可以使用自签名证书。

所谓自签,就是自己给自己签名颁发的证书,自给自足,丰衣足食。

生成证书的方法和工具很多,你可能会想到用以前 .NET Framework SDK工具,你可能想到用 OpenSSL 工具。但是,与其用工具,还不如直接调用 .NET 自身的 API ,在项目中直接创建证书来得方便。密钥随机即可,创建证书后写入到 .pfx 文件中。这样做也很方便,有利于程序搬家。

好,鬼话不多说,咱们开始今天的表演。

首先,写一个类,简单粗暴易用。

    public class CerMaker
{
public static async Task CreateSslCertAsync(string subName,
DateTime bgDate,
DateTime endDate,
string outFile,
string? passWd)
{
// 参数检查
if(subName is null or { Length: < 3 })
{
throw new ArgumentNullException(nameof(subName));
}
if(endDate <= bgDate)
{
throw new ArgumentException("结束日期应大于开始日期");
}
// 随机密钥
RSA key = RSA.Create(1024);
// 创建CRT
CertificateRequest crt = new(subName, key, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
// 创建自签名证书
var cert = crt.CreateSelfSigned(bgDate, endDate);
// 将证书写入文件
byte[] data = cert.Export(X509ContentType.Pfx, passWd);
await File.WriteAllBytesAsync(outFile, data);
}
}

一个类,一个静态方法,参数 subName 表示证书的标题文本,一般使用域名,比如 CN=xpxp.org、CN=www.sb.edu.cn 等。

参数 bgDate 表示证书有效期的起始日期,一般咱们选生成证书当前时间;

参数 endDate 表示证书有效期的终止日期,即过期时间;

参数 outFile 表示 .pfx文件的保存路径,相对的绝对的都行,有写权限就行;

参数 passWd 表示给.pfx文件加密的密码,可以随便定义。

生成的过程如下:

1、RSA.Create 方法创建密钥(包含公/私钥),内容是随机生成的,1024指密钥的长度为1024位,你也可以指定为4096位;

2、创建一个 CertificateRequest 实例:

  CertificateRequest crt = new(subName, key, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);

第一个参数传的证书的标题,第二个参数是刚刚随机生成的密钥,第三个参数是哈希算法,此处选的是 SHA256 算法;第四个参数不用多想,就用 PKCS1 就行(这是块填充行为)。

3、调用 CreateSelfSigned 方法,就能创建证书了;

4、调用证书的 Export 方法把其导出为 .pfx 格式的数据;

5、把数据写入文件,收工。

---------------------------------------------

你看,多 Easy 的事,不用费心去找什么工具了,自己动一动手就成了。

然后,在 ASP.NET Core 项目里,咱们先检查一下证书文件存不存在,如果不存在,自动生成一个。

// 先创建自签名证书
const string CER_FILE = "host.pfx";
const string PASSWD = "dagongji";
const string SUB_NAME = "CN=万年坑玩具厂.com.cn";
DateTime today = DateTime.Now;
DateTime endday = today.AddDays(365);
if(!File.Exists(CER_FILE))
{
await CerMaker.CreateSslCertAsync(SUB_NAME, today, endday, CER_FILE, PASSWD);
}

一般来说,项目的证书并不需要换来换去,所以,咱们可以把生成证书的代码写到一个控制台应用项目中,生成一个命令行工具,自己留着用,只需要执行它生成证书文件,再放到 ASP.NET Core 项目的目录下就可以了。

在 build 应用程序之前,配置一下 Kestrel 服务器,使用咱们自己生成的证书文件。

var builder = WebApplication.CreateBuilder(args);
// 配置证书
builder.WebHost.ConfigureKestrel(opt =>
{
opt.ConfigureHttpsDefaults(cnncop =>
{
cnncop.ServerCertificate = new X509Certificate2(CER_FILE, PASSWD);
});
});
var app = builder.Build();

这是用于独立启动的 ASP.NET Core 应用程序(使用内置的 Kestrel 服务器)。如果你用的 IIS,那么证书是在IIS管理器中配置;如果你用的是 nginx,也是在服务器的配置文件中配置证书,而不是在 ASP.NET Core 代码中。

由于证书是自己签给自己的,不是从权威机构买的,所以,当浏览器访问时,会有不安全提示。只要你确认是你自己的证书,或者客户知道这是他们自家可用的证书就可以了。浏览器肯定不认识自签证书的。

好了,今天这个好用的技巧就分享到这儿了。

最新文章

  1. 编码转换的处理 DreamWeaver SC6 打开会出现javacsript出现问题的处理
  2. 《Struts2.x权威指南》学习笔记1
  3. window常用命令(持续更新)
  4. mysql-distinct去重、mysql-group&amp;nbsp;…
  5. mysql 刘道成视频教程1、2课----------大致结构
  6. MFC 全局配置 读取保存配置
  7. Js获取Gridview中Dropdownlist选中状态
  8. cocos2d-x获取系统时间
  9. 爬虫总结_java
  10. 利用css3特性写出三角形(兼容IE浏览器)
  11. 字符编码笔记:ASCII,Unicode和UTF-8(转)
  12. Largest Rectangle in a Histogram [POJ2559] [单调栈]
  13. Linux操作汇总
  14. Notepad++编写运行python程序
  15. 4.8 C++ typeid操作符
  16. error:hadoop 中没有etc目录
  17. 查看进程中的socket状态和数量
  18. html中控制Tab键的顺序
  19. 当堆遇到STL 代码焕发光芒
  20. 腾讯云-Linux 基础入门

热门文章

  1. [USACO08OPEN]牛的街区Cow Neighborhoods
  2. loj6271 「长乐集训 2017 Day10」生成树求和 加强版(矩阵树定理,循环卷积)
  3. 什么是RabbitMQ?RabbitMQ的使用场景是什么?
  4. Springboot添加静态资源映射addResourceHandlers,可实现url访问
  5. 什么是 Spring beans?
  6. 学习k8s(二)
  7. Spring Mvc 源代码之我见 二
  8. 遇到过的问题之“解决 No qualifying bean of type 问题”
  9. WebView的一些简单用法
  10. ES6-11学习笔记--模块化