HTTPS SSL证书

在使用Visual Studio .Net(Core)进行Web开发时,当前第一调试Web程序时会为Visual Studio中的Web项调试所使用的IIS Express提供1个全局性的证书(SSL)认证,在同1台主机中以后的Web开发中该认证会通过该证书(SSL)通过该主机所构建的Web程序提供SSL认证

使用IIS Express提供的默认全局性(SSL)证书进行认证。

在Web程序开发阶段,如果Web需要使用SSL证书提供认证支持,最为简单的方法是在创建Web程序时勾选“配置HTTPS(H)”复选框:

注意:如果在创建Web程序时没有勾选“配置HTTPS(H)”复选框,在开中又想使用IIS Express提供的默认全局性(SSL)证书对当进Web程序提供认证服务,则必须显式定义HTTPS与HTTP的映射关系:

实际上由于当前的主流浏览器默认的安全等级比较高,如果Web程序没有勾选“配置HTTPS(H)”复选框,在调试时会由于安全性,而造成浏览器对页面不能进行显示。

使用自定义(SSL)证书进行认证。

  1. 首先通过openssl(Win64OpenSSL-3_0_4.exe)软件生成1个第3方的SSL证书文件:“dotnetty.pfx”。
  2. 复制该文件到Web项的“wwwroot”文件夹中。

3、appsettings.json”文件中进行以下定义:

"IsHttps": true,

"CertName": "dotnetty.pfx",

"CertPwd": "yangyiquan",

"ServerIP": "localhost",

"ServerPort": 7031,

注意:端口号必与上图中HPPTS中的端口号相同。

4、对.Net(Core)框架定义以下设定,通过第3方的SSL证书让浏览器为当前Web程序中的页面提供安全认证服务:

var builder = WebApplication.CreateBuilder(args);

//由于上方代码使用第3方SSL证书提供认证服务,由于安全性从而造成浏览器对页面不能进行显示,如果想要页面正常显示则必须要把下面的代码全部注释掉。

string _serverIP = builder.Configuration.GetSection("ServerIP").Get<string>();

int _serverPort = builder.Configuration.GetSection("ServerPort").Get<int>();

bool _isHttps = builder.Configuration.GetSection("IsHttps").Get<bool>();

string _pfxPath = Path.Combine(builder.Environment.WebRootPath, builder.Configuration.GetSection("CertName").Get<string>());

string _certPwd = builder.Configuration.GetSection("CertPwd").Get<string>();

builder.WebHost

.UseUrls($"https://{_serverIP}:{_serverPort}")

.ConfigureKestrel(option =>

{

option.ConfigureHttpsDefaults(option =>

{

option.ServerCertificate = new System.Security.Cryptography.X509Certificates.X509Certificate2(_pfxPath, _certPwd);//证书路径、密码

});

});

5、最终效果:

部署与SSL证书

以上的所有操作都是基于开发和调试环境上进行的,如果基于部署环境最好购买1个付费的SSL证书,这些安全相关的数字产品,最好在部署的整个生命周期中不要使用免费的,有1句话:“免费的才是最贵的。”,付费的另1个原因是买安心和保险,即使出现安全问题也可以找到索赔方。

Data Protection(数据安全)

.Net(core框架)通过Data Protection(数据安全)相关方法实现加解密操作,一般情况上会通过内置依赖注入方法AddDataProtection(),注入到内置容器中,注意:在.Net6中即使不显式定义依赖注入方法IDataProtectionProvider provider参数在拷贝构造方法中依然会被实例化而不会出现逻辑异常。

最简单的数据安全依赖注入方法的显式定义为:builder.Services.AddDataProtection();该依赖注入方法会在每次启动程序时都会在服务器端的内存中自动生成1个临时的(私有)密钥。IDataProtector实例会根据该临时的(私有)密钥,调用Protect或Unprotect执行加解密操作,但这种方式会由于(私有)密钥的改变,从而导致之前加密的密文解密失败,导致用户退出登录等问题。可以将(私有)密钥持久化保存到磁盘(单体应用)、redis、mysql等。例如:

//把Data Protection(数据安全)(私有)密钥,持久化保存到服务器端指定的文件中,这里特指“\wwwroot\DataProtectionKeys\*.xml”文件(持久(私有)密钥默认日期为90天)。

//注意:如果(私有)密钥不持久化,每次启动都会生成临时(私有)密钥,之前加密的密文解密失败,导致用户退出登录等问题。

//可以将(私有)密钥持久化保存到磁盘(单体应用)、redis、mysql等。

string keysPath = Path.Combine(builder.Environment.WebRootPath, "DataProtectionKeys");

builder.Services.AddDataProtection()//每次启动都会生成临时(私有)密钥。

.PersistKeysToFileSystem(new DirectoryInfo(keysPath));//把临时(私有)密钥,持久化保存到服务器端指定的文件中,这里特指“\wwwroot\DataProtectionKeys\*.xml”文件。

上述方式,会在(默认)90天内使用指定持久化文件中的(私有)密钥对之前加密的密文进行解密,当然也可以对临时(私有)密钥的持久化保存时间进行自定义设定例如:

//把Data Protection(数据安全)(私有)密钥,持久化保存到服务器端指定的文件中,这里特指“\wwwroot\DataProtectionKeys\*.xml”文件(持久(私有)密钥默认日期为90天)。

//注意:如果(私有)密钥不持久化,每次启动都会生成临时(私有)密钥,之前加密的密文解密失败,导致用户退出登录等问题。

//可以将(私有)密钥持久化保存到磁盘(单体应用)、redis、mysql等。

string keysPath = Path.Combine(builder.Environment.WebRootPath, "DataProtectionKeys");

builder.Services.AddDataProtection()//每次启动都会生成临时(私有)密钥。

.PersistKeysToFileSystem(new DirectoryInfo(keysPath))//把临时(私有)密钥,持久化保存到服务器端指定的文件中,这里特指“\wwwroot\DataProtectionKeys\*.xml”文件。

.SetDefaultKeyLifetime(TimeSpan.FromDays(365)); //指定临时(私有)密钥,被持久化保存的时间(365天,默认值:90天)

IDataProtectionProvider provider参数实例,用于获取该加/解密的提供程序或启动项是哪个,这里特指已经注入了内置依赖注入方法AddDataProtection()程序中的Web项。

关于更多Data Protection的设置见:ASP.NET Core-数据保护(Data Protection) - .Neterr - 博客园。

对以上功能更为具体实现和注释见:22-06-25-052_SSLAndDataProtection( HTTPS SSL证书与Data Protection(数据安全))。

第52章 HTTPS SSL证书与Data Protection(数据安全)相关推荐

  1. https ssl证书的工作原理及使用相关知识收集

    https ssl证书的工作原理及使用相关知识收集 SSL 与 数字证书 的基本概念和工作原理 前言 SSL是让人头大的东西,看起来很复杂,我学过信息安全课,但是对SSL仍然是模糊一片.对于数字证书也 ...

  2. WebService系列之Axis Https(SSL)证书校验错误处理方法

    WebService系列之Axis Https(SSL)证书校验错误处理方法 最近在用Axis调用https的接口,抛出异常: javax.net.ssl.SSLHandshakeException: ...

  3. python sanic 设置ssl证书_配置自签https ssl证书

    由于人们越来越重视网络安全,所以很多平台及系统都要求使用https方式接入.而且一些开源服务框架在调用时也只接受https请求,这将导致平时开发/测试时需要用到ssl证书的地方越来越多. 在2016年 ...

  4. 通过Python脚本下载【来此加密的免费HTTPS SSL证书】并自动更新到服务器和阿里云CDN

    异想之旅:本人原创博客完全手敲,绝对非搬运,全网不可能有重复:本人无团队,仅为技术爱好者进行分享,所有内容不牵扯广告.本人所有文章仅在CSDN.掘金和个人博客(一定是异想之旅域名)发布,除此之外全部是 ...

  5. GoDaddy万用https ssl证书如何通过DNS审核

    申请GoDaddy 的wildcard ssl 证书,如何通过他家的审核? https://www.godaddy.com/help/verifying-your-domain-ownership-f ...

  6. [转]hexo 博客开启 https (SSL 证书)

    本文首发于我的个人博客:https://staunchkai.com 我的服务器是腾讯云的,域名是阿里云的,这篇文章用于记录 Hexo 博客开启 https 的过程. 获取证书 这里的 SSL 证书 ...

  7. Nginx配置https(ssl证书)并反向代理Springboot Jar项目

    下载安装NGINX # 下载NGINX: yum install nginx # 启动nginx: systemctl start nginx # 加入开机启动: systemctl enable n ...

  8. 乌班图配置 https ssl证书

    2. 配置证书 在这里,我假设你已经会配置基本的/etc/apache2/sites-available/000-default.conf这个文件来达到已经可以通过 http 的方式来访问你的站点. ...

  9. 图文详解:阿里云域名配置免费https/SSL证书

    文章目录 https简介 证书购买 配置证书 注意事项 https简介 首先简单说一下https的原理.即服务端与客户端(浏览器)如何保证数据是加密传输的呢?我记得有个经典的例子: 服务端发给客户端一 ...

最新文章

  1. java虚拟机内存监控_java虚拟机内存监控工具
  2. Oracle12g添加c##scott用户
  3. 问题记录:如何比较两个字符串的相似度
  4. Sublime Text3 安装SublimeLinter
  5. Oracle SQL语句大全(三)
  6. 数据库-设置mysql编码
  7. Android插件化开发之动态加载基础之ClassLoader工作机制
  8. C语言排序方法-----希尔排序
  9. (转)C++中extern “C”含义深层探索
  10. Python Flask Web 第七课 —— 使用 flask-moment 本地化日期和时间
  11. SonarQube安装步骤 Windows10系统
  12. 2020年计算机二级access考试大纲,2020年全国计算机二级ACCESS考试分析与小结(7页)-原创力文档...
  13. jQuery整理您的笔记----jQuery开始
  14. windows net 命令详解
  15. 台灯c语言,Jya无线台灯C上手体验:从新界说光的含义
  16. hdu 2298 Radar 重复覆盖
  17. easyexcel 设置标题_Alibaba easyExcel对Excel操作之复杂标题处理
  18. lm283_BP283X 最小输入输出压差和OVP电压的关系
  19. python HTMLParser
  20. 敢问中科院计算所副研究员刘俊明:为何看不到中文编程的需求和优势?

热门文章

  1. 空间数据存储格式wkb和wkt(转载)
  2. C#+SQL SERVER 工厂耗材管控系统----------上篇
  3. AI绘画Stable Diffusion实战操作: 62个咒语调教-时尚杂志封面
  4. C# Delegate 委托使用场景
  5. 认知智能类脑模型之认知体系简介
  6. 企业微信支持绑定企业视频号了!
  7. linux 时间处理(差8小时)
  8. 有向无环图之关键路径
  9. 一站到底关于计算机科学,机电工程系和计算机科学系联合举办“一站到底”知识竞赛...
  10. 黑马程序员pink老师前端入门教程,零基础必看的JavaScript基础语法视频教程(BOM)