网络(HTTP)通信的安全协议HTTPS
HTTPS(超文本传输安全协议)
通过在HTTP基础上加入了SSL/TLS协议来确保数据传输的加密。
HTTPS使用的加密协议是TLS(传输层安全协议,1.2或1.3版本),它的前身是SSL(已弃用)。这两个协议确保了数据传输的安全性。包括:
数据加密(对称加密技术)、数据完整性(哈希算法)、身份验证(通过数据证书验证通信双方的身份,确保通信方是可信的)。
工作原理:
1.客户端请求服务器:客户端(如浏览器)向服务器发起HTTPS请求。
2.服务器返回证书:服务器会返回一个数字证书(包含公钥),用于加密通信。
3.客户端验证证书:客户端验证服务器的证书是否合法,如果证书有效,就会生成一个会话密钥。
4.建立加密通道:客户端使用服务器的公钥加密会话,并传给服务器,服务器使用私钥解密后,双方就可以使用该会话密钥进行加密通信了。
常见场景:
登陆页面、网络购物和银行网站、社交媒体和电子邮件等
证书:
1.概念:
数字证书是用来证明身份的电子文档,它通常包含网站(或服务器)的公钥及其他信息(如所有者信息,证书机构信息等)。通过证书,客户端可以验证服务器的身份,并确保通信过程中数据的加密安全
2.组成:
公钥:证书中包含服务器的公钥,用于加密通信。
私钥:服务器自己保管的密钥,用于解密客户端发送的加密信息。私钥不会出现在证书中。
证书颁发机构(CA):可信任的第三方组织,颁发和验证证书,确保其真实性
证书的有效期:过期后需要重新申请
证书序列号:每个证书都有唯一的序列号,用于区分不同的证书
指纹(Thumbprint):证书的哈希值,用于快速验证证书的完整性。
3.分类:
a. 根据验证级别分类
域名验证证书(DV):小型网站适用
组织验证证书(OV):公司适用
扩展验证证书(EV):电商银行等安全要求高的网站
b. 根据用途分类
单域名证书:仅用于单个域名,如:example.com
通配符证书:保护一个域名及其子域名,如www.example.com和mail.example.com等所有*.example.com
多域名证书:保护多个域名或子域名
4.证书的使用场景
HTTPS加密通信、身份验证、代码签名、邮件加密
5.证书的获取
从CA机构购买、自签名证书(通过工具或IIS生成)。
6.生命周期
签发-安装-续期-吊销
7.信任链
证书不是独立存在的,而是有一个信任链
·服务器证书:用于加密通信
中间证书:用于桥接服务器证书和根证书
根证书:信任链的基础。
本地测试:
1. 建立本地证书
通过以管理员权限运行powerShell,新建一个本地证书
New-SelfSignedCertificate -DnsName "localhost" -CertStoreLocation "cert:\LocalMachine\My"
其中DnsName指定了该证书绑定的域名,在本地环境中可以使用 localhost或127.0.0.1
CertStoreLocation
参数指定证书的存储位置。LocalMachine\My
表示将证书存储在本地计算机的个人证书存储中。
2. IIS里配置HTTPS
在IIS管理器,网站右键选中自己的部署网址,添加绑定,类型选择HTTPS,SSL证书选择刚刚新建的证书 localhost
3.在服务器代码里添加强制使用HTTPS(可选)。
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}
// 强制重定向到 HTTPS
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
}
双向身份验证
功能需求
实现只有某些受信任的客户端能够访问服务器,使用的是双向身份认证(mTLS),一种强化的身份验证方式
概念
通常,客户端通过HTTPS(单向TLS)来保证服务器的身份(服务器使用证书进行验证)。——过程如下:
1.客户端连接到服务器:客户端发起与服务器的HTTPS连接,并请求服务器的证书
2.服务器出示证书:服务器将数字证书发送给客户端
3.客户端验证服务器的身份:验证证书的有效性,
证书是否由可信机构CA等签发
证书是否与服务器的域名匹配
证书是否在有效期内
4.建立加密通道:如果证书通过验证,客户端与服务器之间的TLS握手完成,之后的通信会在加密的通道内进行,确保数据的保密性和完整性。——
如果要进行双向验证身份,即服务器也要求客户端出示证书,服务器会对证书进行验证,确保客户端的身份可信。
实现步骤
1.生成和分发客户端证书:服务器为每个受信任的客户端生成唯一的客户端证书,或者要求客户端提供他们的证书
2.在服务器配置mTLS:服务器需要配置成要求客户端证书来验证客户端身份。服务器会检测客户端的证书信息
3.拒绝未经授权的客户端:只有通过验证的客户端(具有受信任证书的客户端),才能与服务器进行通信。任何没有通过验证的客户端都会被服务器拒绝。