.NET 6学习笔记(8)生成自签证书
2023-05-07 20:21:33 博客园

上一篇我们通过导出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生成自签证书。

水平所限,欢迎指正。

GitHub:

manupstairs/CreateSelfSignedCert: Show how to create self signed certificate using C#. (github.com)

以下链接,是MS Learn上Windows开发的入门课程,单个课程三十分钟到60分钟不等,想要补充基础知识的同学点这里:

开始使用 Visual Studio 开发 Windows 10 应用

开发 Windows 10 应用程序

编写首个 Windows 10 应用

创建 Windows 10 应用的用户界面 (UI)

增强 Windows 10 应用的用户界面

在 Windows 10 应用中实现数据绑定

热门推荐

文章排行

  1. 2023-05-07.NET 6学习笔记(8)生成自签证书
  2. 2023-05-07【环球速看料】商铺用喇叭揽客,罚!
  3. 2023-05-07赛升药业(300485.SZ)参股公司绿竹生物(02480)将于5月8日在港交所上市 世界最新
  4. 2023-05-07环球关注:澳华内镜(688212.SH)5月4日收到软件增值税即征即退退税款645.25万元
  5. 2023-05-07凯恩要哭了 切尔西福星阿扎尔 时隔九年为皇马带来了国王杯冠军
  6. 2023-05-07中金公司:海尔金盈拟减持不超2%公司股份
  7. 2023-05-07五一档两个票房冠军?莫让巧立名目带乱好片节奏-天天微头条
  8. 2023-05-07快报:广东:绿色税制推动能源企业实现绿色发展
  9. 2023-05-074月末中国外汇储备规模为32048亿美元 环比升幅0.66%
  10. 2023-05-07因好莱坞大罢工 《怪奇物语》第五季暂停拍摄 全球热头条
  11. 2023-05-07热门:你的幸福 吉利接驾 与博越L一起“吉”刻出发!
  12. 2023-05-07富时罗素是什么公司_富时罗素是什么_天天报资讯
  13. 2023-05-07重庆合川:网格作“针”绣出基层治理新图景|世界今日报
  14. 2023-05-07快播:双排施工脚手架每平米钢管用量(双排脚手架每平方米要多少钢管和扣件)
  15. 2023-05-071死5伤 美国又一地发生派对枪击事件-今日观点
  16. 2023-05-07Failed to connect to zw.gozuowen.com port 80: Timed out
  17. 2023-05-07插队婆孙近况堪忧,呼吁停止网暴,她们确实不好惹,李玫瑾敲重点 当前焦点
  18. 2023-05-06秦刚会见阿富汗临时政府代理外长穆塔基
  19. 2023-05-06快讯2023-05-06 22:15:57 环球新要闻
  20. 2023-05-06顶礼膜拜是什么意思(膜拜是什么意思)