IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 第52章 HTTPS SSL证书与Data Protection(数据安全) -> 正文阅读

[网络协议]第52章 HTTPS SSL证书与Data Protection(数据安全)

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(数据安全))。

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-07-03 11:09:04  更:2022-07-03 11:09:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 20:25:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计