支付和区块链都会涉及数字证书,所以收集了这方面的资料。
1.定义
数字证书是由一个受信任的第三方权威机构——证书授权中心(Certificate Authority,CA)产生、分配并管理的,就像公民个人身份证一样具有唯一性,无法篡改和仿冒。
2.意义
一、身份认证。通过数字证书,确认实体即为自己所声明的实体,从而鉴别身份真伪。依据身份认证的对象不同,数字证书可分为个人身份证书、企业或机构身份证书、服务器证书,分别证实其在网络活动中的身份,从而为网络上各实体间信息交换的安全性提供第一道防线。比如通过向服务器发放数字证书,可使网站用户能够使用该证书对网站的真实性进行检查,以免遭假冒网站窃取用户重要信息、甚至造成重大经济损失,从而保障网站用户的切身利益。
二、保护数据的完整性。通过基于数字证书的数字签名技术,既可以提供实体认证,又可以保障被签名数据的完整性,即确认数据无论是在传输或是在存储过程中经过检查确认没有被修改。其主要应用为代码签名证书,由CA签发给软件提供者(包括组织或个人),代码签名证书包含了软件提供者的身份信息、公钥及CA 的签名。软件提供者使用代码签名证书对软件进行签名后放到网上,当用户下载该软件时,将会得到提示,从而可以确信软件的来源,以及软件自签名后到下载前没有遭到修改或破坏。
三、确保数据的保密性。在实际应用中,服务器和浏览器之间的信息通过HTTP协议在互联网上以明文方式进行传输,容易被非法第三方窃取或篡改。服务器证书通过采用“数字信封”机制,将用户浏览器和服务器之间传输的信息加密,加密后的信息除了指定的实体外,其他未经授权的人不能读出或看懂该数据,从而保证了信息传输的私密性。
四、确保行为的不可否认性。用数字签名的方法,可以从技术上保证实体对其行为的诚实性,防止其对关键行为的否认。通过附加在数据单元上的一些数据,或是对数据单元作密码变换,数字签名允许数据单元的接收者确认数据单元的来源。由于只有发送数据单元者拥有私钥,所以其无法否认发送过该数据单元,从而防止交易中的抵赖发生。
3.类型
数字证书的种类从签名对象(也就是使用者)的角度划分,主要包括几个类型:人员身份证书、企业或机构身份证书、支付网关证书、服务器证书、安全电子邮件证书、个人代码签名证书等,使用场景各有不同
4.应用场景
个人数字证书主要应用于以下五个方面:安全的电子邮件、安全终端保护、可信网站、签名保护、授权身份管理,从而保证邮件安全、保护用户终端和数据、鉴别钓鱼网站和假冒网站、验证软件供应商的身份以保护移动端APP安全、管理对用户的授权。
5.原理
CA签发数字证书具体过程如下:
(1)将用户身份信息和用户公钥信息,按照特定格式组成数据D。
(2)使用哈希算法对数据D进行计算得到摘要值H。
(3)使用CA自身私钥对摘要值H进行签名得到数字签名S。
(4)将用户身份信息、用户公钥信息和数字签名S,按照特定格式(如X.509)组成数字证书。
CA 不仅负责给用户签发数字证书,还需要履行对数字证书的全生命周期管理职责,CA主要职责包括:
(1)数字证书的签发和更新。对新用户签发数字证书;在老用户有需要时,对其更新数字证书。
(2)数字证书的状态变更,包括:吊销、挂失、解挂等。证书吊销后将成为无效证书,永远不能使用;证书挂失后将成为无效证书,但可以通过解挂恢复成有效状态。
(3)数字证书的查询及下载。CA对外提供公开的查询及下载服务,允许用户根据条件随时查询证书并下载。常用服务方式为LDAP, LDAP是Light weight Directory AccessProtocol(轻型目录访问协议)的缩写。CA系统通过LDAP机制对外发布所有证书及CRL。用户端可以通过LDAP协议访问LDAP服务器,按需下载满足条件的证书和CRL。
(4)数字证书状态查询。提供公开服务方式,允许用户随时查询证书状态,以便判断该证书是否处于有效状态。常用服务方式有CRL和OCSP。
6.案例:
step1: “客户”向服务端发送一个通信请求
“客户”->“服务器”:你好
step2: “服务器”向客户发送自己的数字证书。证书中有一个公钥用来加密信息,私钥由“服务器”持有
“服务器”->“客户”:你好,我是服务器,这里是我的数字证书
step3: “客户”收到“服务器”的证书后,它会去验证这个数字证书到底是不是“服务器”的,数字证书有没有什么问题,数字证书如果检查没有问题,就说明数字证书中的公钥确实是“服务器”的。检查数字证书后,“客户”会发送一个随机的字符串给“服务器”用私钥去加密,服务器把加密的结果返回给“客户”,“客户”用公钥解密这个返回结果,如果解密结果与之前生成的随机字符串一致,那说明对方确实是私钥的持有者,或者说对方确实是“服务器”。
“客户”->“服务器”:向我证明你就是服务器,这是一个随机字符串 //前面的例子中为了方便解释,用的是“你好”等内容,实际情况下一般是随机生成的一个字符串。
“服务器”->“客户”:{一个随机字符串}[私钥|RSA]
step4: 验证“服务器”的身份后,“客户”生成一个对称加密算法和密钥,用于后面的通信的加密和解密。这个对称加密算法和密钥,“客户”会用公钥加密后发送给“服务器”,别人截获了也没用,因为只有“服务器”手中有可以解密的私钥。这样,后面“服务器”和“客户”就都可以用对称加密算法来加密和解密通信内容了。
“服务器”->“客户”:{OK,已经收到你发来的对称加密算法和密钥!有什么可以帮到你的?}[密钥|对称加密算法]
“客户”->“服务器”:{我的帐号是aaa,密码是123,把我的余额的信息发给我看看}[密钥|对称加密算法]
“服务器”->“客户”:{你好,你的余额是100元}[密钥|对称加密算法]
【问题1】
上面的通信过程中说到,在检查完证书后,“客户”发送一个随机的字符串给“服务器”去用私钥加密,以便判断对方是否真的持有私钥。但是有一个问题,“黑客”也可以发送一个字符串给“服务器”去加密并且得到加密后的内容,这样对于“服务器”来说是不安全的,因为黑客可以发送一些简单的有规律的字符串给“服务器”加密,从而寻找加密的规律,有可能威胁到私钥的安全。所以说,“服务器”随随便便用私钥去加密一个来路不明的字符串并把结果发送给对方是不安全的。
〖解决方法〗
每次收到“客户”发来的要加密的的字符串时,“服务器”并不是真正的加密这个字符串本身,而是把这个字符串进行一个hash计算,加密这个字符串的hash值(不加密原来的字符串)后发送给“客户”,“客户”收到后解密这个hash值并自己计算字符串的hash值然后进行对比是否一致。也就是说,“服务器”不直接加密收到的字符串,而是加密这个字符串的一个hash值,这样就避免了加密那些有规律的字符串,从而降低被破解的机率。“客户”自己发送的字符串,因此它自己可以计算字符串的hash值,然后再把“服务器”发送过来的加密的hash值和自己计算的进行对比,同样也能确定对方是否是“服务器”。
【问题2】
在双方的通信过程中,“黑客”可以截获发送的加密了的内容,虽然他无法解密这个内容,但是他可以捣乱,例如把信息原封不动的发送多次,扰乱通信过程。
〖解决方法〗
可以给通信的内容加上一个序号或者一个随机的值,如果“客户”或者“服务器”接收到的信息中有之前出现过的序号或者随机值,那么说明有人在通信过程中重发信息内容进行捣乱,双方会立刻停止通信。有人可能会问,如果有人一直这么捣乱怎么办?那不是无法通信了? 答案是的确是这样的,例如有人控制了你连接互联网的路由器,他的确可以针对你。但是一些重要的应用,例如军队或者政府的内部网络,它们都不使用我们平时使用的公网,因此一般人不会破坏到他们的通信。
【问题3】
在双方的通信过程中,“黑客”除了简单的重复发送截获的消息之外,还可以修改截获后的密文修改后再发送,因为修改的是密文,虽然不能完全控制消息解密后的内容,但是仍然会破坏解密后的密文。因此发送过程如果黑客对密文进行了修改,“客户”和“服务器”是无法判断密文是否被修改的。虽然不一定能达到目的,但是“黑客”可以一直这样碰碰运气。
〖解决方法〗
在每次发送信息时,先对信息的内容进行一个hash计算得出一个hash值,将信息的内容和这个hash值一起加密后发送。接收方在收到后进行解密得到明文的内容和hash值,然后接收方再自己对收到信息内容做一次hash计算,与收到的hash值进行对比看是否匹配,如果匹配就说明信息在传输过程中没有被修改过。如果不匹配说明中途有人故意对加密数据进行了修改,立刻中断通话过程后做其它处理。
7.数字证书的构成:
证书的发布机构,证书的有效期,公钥,证书所有者,签名所使用的算法,指纹以及指纹算法
了解更多请看:
https://mp.weixin.qq.com/s/wwJv_9FAZXLcBEFu9VNpIw
网友评论