文章目录
- 数字签名(digital signature)
- 1. 解决问题
- 2. 应用场景
- 3. 运行原理
- 4. 存在问题
- 数字证书(digital certificate)
- 1. 解决问题
- 2. 应用场景
- 3. 运行原理
- 1)申请数字证书
- 2)应用在Https网站
提示:本篇文章融入了个人对相关概念的理解,没说清楚的请参看原文(底部有相关链接)
数字签名(digital signature)
1. 解决问题
数字签名用于数据传输安全的技术,要解决的问题是:
- 传输的数据不被篡改
- 数据拥有者的身份认证
- 以上两条满足后,数据拥有者就不可抵赖(身份确认+数据不被篡改=数据是拥有者的)。
注:数据签名不涉及数据保密性
2. 应用场景
发送方(server)把一份文档(或数据)安全地发给接收方(client),并保证不被篡改、身份认证和不可抵赖性。
3. 运行原理
以下是利用数字签名技术实现这一应用场景的过程:
- 第1步 server创建一对RSA非对称密钥(包含公钥和私钥)。
- 第2步 sever对文档做哈希运算(哈希算法可是sha2等),得到消息摘要(或称哈希值)。
- 第3步 用消息摘要与第1步创建的私钥生成数据的数字签名【可以理解为一串编码的数字字符串】。
- 第4步 server把数字签名附加到文档通过网络发送给client。
- 第5步 server把公钥通过其他安全地方式发送给client。
- 第6步 client使用公钥解密数字签名,得到消息摘要。【如果解密成功,可证明公钥和数字签名是属于同一人,如果第5步是安全地得到的公钥,那么那个人一定是server,即认证了server身份】
- 第7步 client对文档做相同的哈希运算,得到消息摘要,如果此摘要与第6步的相同,说明文档没有被篡改。
4. 存在问题
Q:server如果不能安全地把公钥发送给client,例如由某中间人(middleman)伪造了公钥,将导致什么结果?
- server发送到client的数字签名就不能被解密。
- middleman发送的伪造数字签名可以解密成功,但client会认为文档是server发送的,这会导致类似冒充银行工作人员的诈骗活动一样的结果。
Q:server怎么安全地把公钥发送给client?
- 引入第三方权威机构CA(Certificate Authority), server把公钥和身份信息作为文档(或数据)告诉CA,CA利用数字签名技术处理后,生成了数字证书(包含了数字签名,server公钥等信息),
- 权威CA的公钥是公开的,并已内置于各类浏览器中,client可利用浏览器解密CA数字签名,从而拿到server的公钥。
数字证书(digital certificate)
1. 解决问题
server的公钥没有有效的机制安全地送到client,因此引入CA机构和数字证书的概念解决此问题。参见数字签名章节中“server怎么安全地把公钥发送给client?”内容。
2. 应用场景
数字证书通常应用在HTTPS协议里【可以理解为建立安全链路通道的web访问协议】,可以保证以此访问的web网站一定是server创建的。
3. 运行原理
1)申请数字证书
- server(图中Applicant)创建一对RSA非对称密钥(包含公钥和私钥)。
- sever利用公钥和身份信息(网站域名、组织等)生成CSR文件(可以通过openssl工具生成)。
- 在CA网站申请数字证书,并把CSR文件内容上传,经过信息核实后,CA机构将使用CA私钥对server上传公钥等信息作为文档做数字签名【即上节讲的内容】,最后返回给server一组文件,即数字证书【包含了数字签名,server公钥,有效日期,网站域名,颁布机构等信息】。
2)应用在Https网站
-
在https网站的web服务器上配置数字证书和server的私钥,具体配置参见nginx的配置。
-
client通过浏览器访问server的https网站,可以获取到server配置的数字证书。
-
client用浏览器内置CA公钥验证数字证书里CA的数字签名,验证成功后,可以确定数字证书里数据都是真实的,其中server公钥一定是server生成的。
-
client随机生成密钥A,使用server公钥对此加密后,发送到server。
-
server利用server私钥解密出密钥A,这样双方都有了密钥A。【到这一步,爱思考的你可能会问:CA给server返回数字证书的时候,如果被middleman截获到,而且配置到伪造网站上?那是没问题的,首先配置数字证书的同时还要配置server的私钥,其次数字证书里包含了server网站域名信息,伪造网站域名不可能跟server的相同。】
-
后续client和server之间数据传输,使用相同的密钥A,采用对称加密技术(例如:AES)对数据加密处理,保证数据的密文保密性。
参考文档:
- what is a digital signature
- what is a digital certificate
- how digital certificate work
- csr generation guide
- nginx ssl installation
- certificate authority