数字签名(数字证书)
签名:通常采用摘要+非对称加密算法,即:如果有原文content,首先对content取摘要(如md5),然后对md5结果采用非对称加密的算法进行加密,从而得到了数字签名。
验签:用公钥对签名串进行解密得到摘要,对原文内容进行同样的算法取摘要,看得到的摘要是否相同。
结论:数字签名没有对全文进行加密,只对全文的摘要进行加密。
安全:签名的目的是验证数据的完整性和真实性,并不能防止信息被窃取。 如果要防止信息被窃取,则需要对全文加密啊,密钥可以用非对称加密方式进行加密,而原文可以用对称加密方式进行加密(对称加密解密性能比非对称性能要高,但是安全性低,所以这里我们只要保证对称加密的密钥被安全传输就可以了)
数字证书:在数字签名的基础上再来理解数字证书就容易了,因为涉及到数字签名就一定会有私钥和公钥,私钥就是最后保留下来,用来解密数据的,公钥是用来给到接入方的,那么现在就产生了一个问题:如何安全的将公钥给到接入方,或者说接入方如何验证它收到的公钥不是中间攻击者伪造的(也就是说,如何保证接入方拿到的公钥是没有被篡改的),而数字证书就是解决这个问题的。
数字证书是如何解决公钥可信任的问题的呢? 总结起来一句话就是用签发者证书(CA证书)的公钥去验证服务器证书里面的签名,验证成功,则说明公钥没被篡改,再加上CA证书的签发过程是一个非常严格的过程,理论上所有的机构都是信任CA机构的,所以只要是能被CA证书验签成功的,则是有效合法的证书。
总结以上逻辑会梳理出来以下的问题:
- CA机构是什么?
- 如何申请数字证书?
- 数字证书是如何验证的?
接下来问题一个一个分析:
一、CA机构是什么?
CA机构是为企业颁发数字证书的企业或者组织,再通俗一点其实就是为你的公钥做背书的企业,这些组织是被市面上的其他企业所认可的(认可他们是公正公平,不得伪造证书),所以只要是这个企业给出的证书则是被信任的,所以证书中的公钥则是可以信任的。 那么这里聪明的小明就会提出一个问题:如何证明我所得到的这个证书是CA机构颁发的呢? 当然这是一个很好的问题,因为通过开源工具如openssl我们也可以自己签发证书, 所以一定要有一种方法能够证明当前的证书是CA机构颁发的,而不是自己搞的。 这个问题我们留到后面来讲。
二、如何申请数字证书?
申请数字证书时,申请公司需要向CA机构递交自己的公司信息,这就好比你要向工商局申请经营许可证一样的。但是,不同的点在哪里呢? 前者是在网络上进行的,后者是在线下进行的,现实中申请材料你是亲自送到工商局并且工商局可以做一些核实,但是前者就不太一样,是一个纯网络上的行为,只要是网络上的行为我们都需要考虑一个问题:中间人伪造。如果伪造成功后这个中间人就可以冒充服务方骗取客户的信息。我们当然不允许这样的事情发生,所以我们需要为我们递交给CA机构的信息进行签名,这样就能防止递交的证书请求被篡改,或者叫不真实。
企业向CA机构申请证书所递交的文件叫.csr文件,那么这个文件包含哪些信息,是如何生成的呢,我们接着看。
1.csr文件内容
我们可以使用openssl工具或者一些在线工具进行csr文件的生成,输入的参数有:
1.1 公司域名CN/公司名称/公司所在省、市、国家
1.2 密钥生成算法和长度(一般都是rsa 2048)
1.3 摘要算法
1.4 密钥密码(不晓得干嘛的)
Openssl工具或者在线工具会给你返回两个文件,一个叫xxx.csr, 一个叫yyy.key,其中yyy.key就是你的私钥, 需要妥善保管,一般会配置到服务器上,例如nginx。其中xxx.csr文件就是我们要提交给CA机构的申请文件,格