这是我参与「第五届青训营 」伴学笔记创作活动的第 12 天
前言
大家好呀,这是我参加青训营伴学笔记创作活动的第 12 天,如存在问题,烦请各位斧正!
其中有一些关键图片超过了最大字符限制,不能上传了,我都使用特殊标记给它标记出来了,如有需要,请联系我。
密钥管理
数字签名
1)数字签名、又称公钥数字签名。
是只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。
2)它是一种类似写在纸上的普通的物理签名,但是使用了公钥加密领域的技术来实现的,用于鉴别数字信息的方法。
3)一套数字签名通常定义两种互补的运算,一个用于签名,另一个用于验证。数字签名是非对称密钥加密技术与数字摘要技术的应用。
4)在网络中传输数据时候,给数据添加一个数字签名,表示是谁发的数据,而且还能证明数据没有被篡改。
即它的作用就是保证了数据的有效性(验证发送者)和完整性(验证有没有被篡改)。
数字签名基本原理: (使用非对称加密)
1)假设持有公钥的一方A、持有私钥B的一方B。
2)首先我们要知道的是,持有私钥的一方不能发密文,因为任何人都能持有公钥,都能对其解密。
但他可以接收密文,进行解密,因为私钥只有他自己有,只有他能解密。但所有人都能获取公钥,那所有人都能伪造你的朋友给你发消息怎么办?
此时A想给B发送信息,需要再产生一对公钥私钥,B持有A产生的公钥,此时A就能产生一个独一无二的标签了。
3)此时AB手里都有自己的私钥和对方的公钥,
若 A想给B发送文件,先产生一个文件摘要,并使用自己的私钥加密,B收到后使用A的公钥解密 若成功说明是A发的,首先解决了发送者伪造问题。
接下来A发送的文件可以使用B的公钥加密,此时B解密后再对明文进行摘要处理 然后对比,若两个文件摘要相同则说明 文件内容没有被伪造。
注意:非对称加密处理的很复杂,速度很慢,因此我们常常只用它来传递对称加密的密钥。
数字证书
上述实现的一切,基本在于 A和B持有的公钥确实是对方的公钥,而非有人从中作祟,截获并伪造了消息,又发送了自己的公钥。
公钥同时被篡改和冒充了,怎么办?使用数字签名能防篡改和冒充,但使用前提却是公钥没有被篡改和冒充。
为了解决这一问题就引入了数字证书。
1)数字证书:数字证书是指在互联网通讯中标志通讯各方身份信息的一个数字认证,相当于->公钥的数字签名。
2)引入了数字证书可以防止公钥被篡改,即使被篡改也能识别出来。
3)而防篡改使用的就是数字签名,但我们不能自己做数字签名,因为我们的公钥还没发出去,
所以只能找可信的第三方来帮我们签名,即证书颁布机构(CA),CA 会将:证书的颁布机构、有效期、公钥、持有者(subject)等信息用 CA 的私钥进行签名。
并且将签名结果和这些信息放在一起,这就叫做「数字证书」。
4)这样,B 就可以去 CA 申请一个证书,然后将自己的证书发给 A,那么 A 如何验证这个证书确实是 B的呢?
当然是使用 CA 的公钥进行验签。
注意:
CA 的公钥也是需要使用证书来分发的,所以 Alice 的电脑必须安装 CA 的证书,证书里包含了 CA 的公钥。
(这也就相当于本身电脑在厂商就已经保存了一个准确的安全的公钥)
收到 B 发过来的数字证书后,A 使用 CA 的公钥进行验证,验证通过即证明这确实是 B 证书, 此时相当于得到了B的真实公钥,再之后就能按照之前的步骤进行了。
1)证书颁发机构是有层级关系的,下级 CA 的证书是需要由上级 CA 签名的。
换句话说一定存在根证书颁发机构,那么他们的证书是由谁签名的呢? 答案是自签,自己给自己认证。
那根证书自签谁来保证安全?就如同信任国家才把钱存银行,这是信任链的基础,如果不认可统一的基础,那就信任链就会套娃下去,以至于无解。
2)如何保证根证书的可靠性?
这是操作系统和浏览器预装的,由微软、苹果等操作系统厂商来选择根证书。
3)“证书不可信” 的原因 ,什么情况下浏览器会提示 “证书不可信”?
1.证书不是权威 CA 颁发
有些企业为了贪图便宜使用盗版的证书,没有经过 CA 认证。也就是无法使用浏览器内置 CA 公钥进行验证。
2.证书过期
上面说了,证书里有一项就是有效期,一般就是一年或者两年的时间。如果证书过期,那么浏览器就会提示“证书不可信”
3.证书部署错误
可能是服务器证书部署出错,比如证书与域名不匹配,因为证书里有一项是持有人信息的。
SSL和TLS
1、SSL:(Secure Socket Layer,安全套接字层)
1)为Netscape所研发,用以保障在Internet上数据传输之安全,利用数据加密(Encryption)技术,
SSL通过互相认证、使用数字签名确保完整性、使用加密确保私密性,以实现客户端和服务器之间的安全通讯。
2)该协议由两层组成:SSL记录协议和SSL握手协议。握手协议用来协商密钥。 记录协议则定义了传输的格式。
2、TLS:(Transport Layer Security,传输层安全协议)
1)用于两个应用程序之间提供保密性和数据完整性。该协议由两层组成:TLS记录协议和TLS握手协议。
2)最新版本的TLS 1.0是IETE(工程任务组)指定的一种新的协议,它建立在SSL 3.0协议规范之上,是SSL 3.0的后续版本。
两者差别极小,可以理解为SSL 3.1,它是写入了RFC的。
3、两者作用
认证用户和服务器,确保数据发送到正确的客户机和服务器,SSL缺省只进行server端的认证,客户端的认证是可选的
加密数据以防止数据中途被窃取;
维护数据的完整性,确保数据在传输过程中不被改变
4、握手协议
如上所述。握手协议就是双方通过公钥算法协商出一份密钥,然后通过对称加密来通信。握手过程如下:
<超过最大字符限制>
SSL客户端(也是TCP的客户端)在TCP链接建立之后,发出一个ClientHello来发起握手,这个消息里面包含了自己可实现的算法列表和其它一些需要的消息,
SSL的服务器端会回应一个ServerHello,这里面确定了这次通信所需要的算法,然后发过去自己的证书(里面包含了身份和自己的公钥)。
Client在收到这个消息后会生成一个秘密消息,用SSL服务器的公钥加密后传过去,
SSL服务器端用自己的私钥解密后,会话密钥协商成功,双方可以用同一份会话密钥来通信了。
HTTP和HTTPS
1)HTTP 是一种协议,全称叫作:超文本传输协议(HTTP,HyperText Transfer Protocol),是互联网上应用最为广泛的一种网络协议。
所有的 WWW 文件都必须遵守这个标准。
2)HTTPS 也是一种超文本传送协议,(HTTPS,Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的 HTTP 通道,
简单讲是 HTTP 的安全版。即 HTTP 下加入 SSL 层,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL,用于安全的 HTTP 数据传输。
3)HTTPS 和 HTTP 的区别主要为以下四点:
1.https 协议需要到 ca 申请证书,目前市面上的免费证书也不少,收费的也都比较贵。
2.http 是超文本传输协议,信息是明文传输,https 则是具有安全性的 ssl 加密传输协议。
3.http 和 https 使用的是完全不同的连接方式,用的端口也不一样,前者是 80,后者是 443。
4.http 的连接很简单,是无状态的;HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 http 协议安全。
keytool工具使用
1)keytool工具路径:C:\Program Files\Java\jre1.8.0_91\bin
2)常用命令:
生成keypair
keytool -genkeypair
keytool -genkeypair -alias lisi
(后面部分是为证书指定别名,否则采用默认的名称为mykey)
看看keystore中有哪些项目:
keytool -list或keytool -list -v
keytool -exportcert -alias lisi -file lisi.cer
生成可打印的证书:
keytool -exportcert -alias lisi -file lisi.cer –rfc
显示数字证书文件中的证书信息:
keytool -printcert -file lisi.cer
直接双击lisi.cer,用window系统的内置程序打开lisi.cer