https ssl单项认证和双向认证以及证书生成
HTTP(HyperText Transfer Protocol,超文本传输协议)被用于在Web浏览器和网站服务器之间传递信息,在TCP/IP中处于应用层。这里提一下TCP/IP的分层共分为四层:应用层、传输层、网络层、数据链路层; 分层的目的是:分层能够解耦,动态替换层内协议
各个层包含的内容:
应用层:向用户提供应用服务时的通讯活动(ftp,dns,http)
传输层:网络连接中两台计算机的数据传输(tcp、udp)
网络层:处理网络上流动的数据包,通过怎样的传输路径把数据包传送给对方(ip)
数据链路层:与硬件相关的网卡、设备驱动等等
然而HTTP也有以下明显缺点:
通信使用明文,内容可能被窃听
不验证通信方的身份,因此有可能遭遇伪装
无法证明报文的完整性,所以有可能遭到篡改
这样,HTTPS就登场了。HTTPS中的S表示SSL或者TLS,就是在原HTTP的基础上加上一层用于数据加密、解密、身份认证的安全层,即
HTTP + 加密 + 认证 + 完整性保护 = HTTPS
加密相关的预备知识:对称加密和非对称加密。
对称加密 : 加密和解密数据使用同一个密钥。这种加密方式的特点是速度很快,常见对称加密的算法有 AES;
非对称加密: 加密和解密使用不同的密钥,这两个密钥形成有且仅有唯一的配对,叫公钥和私钥。数据用公钥加密后必须用私钥解密,数据用私钥加密后必须用公钥解密。一般来说私钥自己保留好,把公钥公开给别人(一般公钥不会单独出现,而是会写进证书中),让别人拿自己的公钥加密数据后发给自己,这样只有自己才能解密。 这种加密方式的特点是速度慢,CPU 开销大,常见非对称加密算法有 RSA。
CA证书的相关知识: CA证书是由CA(Certification Authority)机构发布的数字证书。其内容包含:电子签证机关的信息、公钥用户信息、公钥、签名和有效期。这里的公钥服务端的公钥,这里的签名是指:用hash散列函数计算公开的明文信息的信息摘要,然后采用CA的私钥对信息摘要进行加密,加密完的密文就是签名。 即:证书 = 公钥 + 签名 +申请者和颁发者的信息。 客户端中因为在操作系统中就预置了CA的公钥,所以支持解密签名(因为签名使用CA的私钥加密的)
CA证书和SSL证书的区别是什么呢?
其实SSL证书是CA证书的一种,CA的作用主要是负责签发证书、认证证书、管理已颁发证书这些。除此之外他还会制定相关的政策和具体的步骤来进行验证、识别用户的身份,并对用户证书进行签名,以确保证书持有者的身份和公钥的拥有权。SSL证书就是CA机构签发的。
大多数的CA证书,都是可以在WINDOWS上直接生成的。通过点对点原理,实现数据的传输加密和身份核实功能。CA服务器证书,是必须安装在服务器中,由服务器的软硬件信息生成的CSR文件,通过在微软和全球广东金网证书联盟的备份和核实后,生成的CA证书。
有了这些预备知识后,就可以来看看HTTPS是如何怎么做到安全认证的
HTTPS单向认证
服务器默认都是使用单向验证
从上图可以看出,服务端拥有一对非对称密钥:B_公钥和B_私钥。详细过程如下: (1)客户端发起HTTPS请求,将SSL协议版本的信息发送给服务端。
具体内容:客户端向服务端发送SSL协议版本号、加密算法种类、随机数等信息。
(2)服务端去CA机构申请来一份CA证书,在前面提过,证书里面有服务端公钥和签名。将CA证书发送给客户端
(3)客户端读取CA证书的明文信息,采用相同的hash散列函数计算得到信息摘要(hash目的:验证防止内容被修改),然后用操作系统带的CA的公钥去解密签名(因为签名是用CA的私钥加密的),对比证书中的信息摘要。如果一致,则证明证书是可信的,然后取出了服务端公钥
(4)客户端生成一个随机数(密钥F),用刚才等到的服务端B_公钥去加密这个随机数形成密文,发送给服务端。
(5)服务端用自己的B_私钥去解密这个密文,得到了密钥F
(6)服务端和客户端在后续通讯过程中就使用这个密钥F进行通信了。和之前的非对称加密不同,这里开始就是一种对称加密的方式
HTTPS 双向认证
双向认证其实就是验证双方的身份
双向认证和单向认证原理基本差不多,单向认证客户端需要认证服务端,而在双向认证中增加了服务端对客户端的认证
双向认证详细过程如下:
(1)客户端发起HTTPS请求,将SSL协议版本的信息发送给服务端。
(2)服务端去CA机构申请来一份CA证书,在前面提过,证书里面有服务端公钥和签名。将CA证书发送给客户端
(3)客户端读取CA证书的明文信息,采用相同的hash散列函数计算得到信息摘要(hash目的:验证防止内容被修改),然后用操作系统带的CA的公钥去解密签名(因为签名是用CA的私钥加密的),对比证书中的信息摘要。如果一致,则证明证书是可信的,然后取出了服务端公钥
(4)客户端发送自己的客户端证书给服务端,证书里面有客户端的公钥:C_公钥
(5)客户端发送支持的对称加密方案给服务端,供其选择
(6)服务端选择完加密方案后,用刚才得到的C_公钥去加密选好的加密方案
(7)客户端用自己的C_私钥去解密选好的加密方案,客户端生成一个随机数(密钥F),用刚才等到的服务端B_公钥去加密这个随机数形成密文,发送给服务端。
(8)服务端和客户端在后续通讯过程中就使用这个密钥F进行通信了。和之前的非对称加密不同,这里开始就是一种对称加密的方式
重点:开启ssl双向认证,可以在nginx服务端配置客户端证书信息,如下地址:
nginx配置Https单向认证和双向认证_柴月和岐月的博客-CSDN博客_nginx单向认证
生成证书方式:
1、java :keytool工具生成 ---地址如下:使用JDK自带keytool生成证书_kunlyy的博客-CSDN博客_keytool生成证书
2、linux:openssl工具生成 --地址如下:OpenSSL 生成证书_Bright Xu的博客-CSDN博客_openssl生成证书
生成证书---》在线下载
包含两部分:keystore 证书库以及证书私钥(xxx.jks)和公钥证书(xxx.cer)文件
keystore 证书库:是一个证书仓库,会生成两个密码,密钥库口令和密钥口令,根据密钥库口令和秘钥口令来获取证书私钥
java代码实例:
/**
* @Describe 获取加签私钥
* @Author admin
* @tags @return
* @tags @throws Exception
*/
private static PrivateKey getPrivateKey() throws Exception {
FileInputStream fis = null;
try {
KeyStore ks=KeyStore.getInstance("JKS");
fis=new FileInputStream("D:\\cert\\test.jks");
String pwd = "秘钥口令:justfortest";
ks.load(fis, pwd.toCharArray());
PrivateKey privateKey=(PrivateKey)ks.getKey("test", pwd.toCharArray());
return privateKey;
} catch (Exception e) {
throw e;
}finally {
if(fis!=null)
fis.close();
}
}
/**
* @Describe 获取验签公钥
* @Author admin
* @tags @return
* @tags @throws Exception
*/
public static PublicKey getPublicKey() throws Exception{
FileInputStream in = null;
try {
CertificateFactory cf = CertificateFactory.getInstance("X.509");
in = new FileInputStream("D:\\cert\\test.cer");
Certificate c = cf.generateCertificate(in);
PublicKey publicKey = c.getPublicKey();
return publicKey;
} catch (Exception e) {
throw e;
}finally {
if(in!=null)
in.close();
}
}
HTTPS基本思路总结
HTTPS在保证数据安全传输上使用对称加密和非对称加密相结合的方式来进行的,简单来说就是通过一次非对称加密算法进行了最终通信密钥的生成、确认和交换,然后在后续的通信过程中使用最终通信密钥进行对称加密通信。之所以不是全程非对称加密,是因为非对称加密的计算量大,影响通信效率。
https ssl单项认证和双向认证以及证书生成相关推荐
- SSL证书配置(https访问接口, 单向认证和双向认证)
拿到SSL证书后, 如何才能解锁更多玩法? 一. SpringBoots项目配置https访问接口(直接配置) SSL协议 配置步骤 1. 获取证书/ 生成证书 2. 放置证书 3. 配置项目 pro ...
- 实现tomcat的https单向认证及双向认证
前言 单向认证只需站点部署了ssl证书就行,任何用户都可以去访问(IP被限制除外等),只是服务端提供了身份认证 一般web应用都是采用单向认证的,原因很简单,用户数目广泛,且无需做在通讯层做用户身份验 ...
- HTTPS原理、单向和双向认证
参考文章:https://blog.51cto.com/11883699/2160032 https://www.songma.com/news/txtlist_i39807v.html 众所周知,W ...
- https 单向认证和双向认证
转载自 https 单向认证和双向认证 一.Http HyperText Transfer Protocol,超文本传输协议,是互联网上使用最广泛的一种协议,所有WWW文件必须遵循的标准.HTTP ...
- SSL/TLS单向认证和双向认证介绍
为了便于理解SSL/TLS的单向认证和双向认证执行流程,这里先介绍一些术语. 1. 散列函数(Hash function):又称散列算法.哈希函数,是一种从任何一种数据中创建小的数字"指纹& ...
- 使用wireshark观察SSL/TLS握手过程--双向认证/单向认证
SSL/TLS握手过程可以分成两种类型: 1)SSL/TLS 双向认证,就是双方都会互相认证,也就是两者之间将会交换证书. 2)SSL/TLS 单向认证,客户端会认证服务器端身份,而服务器端不会去对客 ...
- nginx配置ssl加密(单双向认证、部分https)
nginx下配置ssl本来是很简单的,无论是去认证中心买SSL安全证书还是自签署证书,但最近公司OA的一个需求,得以有个机会实际折腾一番.一开始采用的是全站加密,所有访问http:80的请求强制转换( ...
- Https单向认证和双向认证介绍
一.Http HyperText Transfer Protocol,超文本传输协议,是互联网上使用最广泛的一种协议,所有WWW文件必须遵循的标准.HTTP协议传输的数据都是未加密的,也就是明文的,因 ...
- 干货 | 图解 https 单向认证和双向认证!
一.Http HyperText Transfer Protocol,超文本传输协议,是互联网上使用最广泛的一种协议,所有WWW文件必须遵循的标准.HTTP协议传输的数据都是未加密的,也就是明文的,因 ...
最新文章
- PHP协程:并发 shell_exec
- 如何在保留订单的同时从列表中删除重复项?
- 关于SQL Tuning的知识体系
- 【文件系统】浅解释FAT32
- python工厂模式 取代__init___浅析Python 简单工厂模式和工厂方法模式的优缺点
- Kali Linux 从入门到精通(八)-主动信息收集
- eclipse还原默认窗口_第3天 | 12天搞定Python,用Eclipse编写代码
- Codeforces 61B【怪在读题】
- java线程系列一:Thread类中的start()方法与run方法
- python简单代码表白-表白python代码
- 基于python的三维射线追踪库-ttcrpy详解(1)
- 密码编码学初探——消息认证码
- centos7上删除分区出现 Can't open /dev/vda1 exclusively . Mounted filesystem?
- MySQL讲义第 45 讲——select 查询之查询练习(三)
- 自定义alert和confirm的效果,个人感觉蛮好使用的
- Jacob实现文字转换语音
- 二级c语言基础题库(1)
- beforeRouteEnter中的this和与created的执行顺序
- SEO做外链Outreach邮件回复低,怎么办?
- c++ com 组件