数字证书,数字签名,https,ssl等安全概念的解释

こ雲淡風輕ζ 提交于 2019-12-01 06:52:39

讲这些概念之前,先讲讲非对称加密,与对称加密算法不同,非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。非对称加密通常以RSARivest Shamir Ad1eman)算法为代表。

tips:上面的概念中,公钥和私钥都可以加密解密,也就是说一个密钥是公钥或者是私钥不是定死的,是由你在使用的过程中自己划分的。

  • 数字证书

一种文件的名称,好比一个机构或人的签名,能够证明这个机构或人的真实性。其中包含的信息,用于实现上述功能。其作用类似于现实生活中的身份证。最简单的证书包含一个公开密钥、名称以及证书授权中心的数字签名。一般情况下证书中还包括密钥的有效时间,发证机关(证书授权中心)的名称,该证书的序列号等信息。

数字证书是由认证中心颁发的。根证书是认证中心与用户建立信任关系的基础。在用户使用数字证书之前必须首先下载和安装。

认证中心是一家能向用户签发数字证书以确认用户身份的管理机构。为了防止数字凭证的伪造,认证中心的公共密钥必须是可靠的,认证中心必须公布其公共密钥或由更高级别的认证中心提供一个电子凭证来证明其公共密钥的有效性,后一种方法导致了多级别认证中心的出现。

数字证书颁发过程如下:用户产生了自己的密钥对,并将公共密钥及部分个人身份信息传送给一家认证中心。认证中心在核实身份后,将执行一些必要的步骤,以确信请求确实由用户发送而来,然后,认证中心将发给用户一个数字证书,该证书内附了用户和他的密钥等信息,同时还附有对认证中心公共密钥加以确认的数字证书。当用户想证明其公开密钥的合法性时,就可以提供这一数字证书。  

tips:上面提到了发证机关,这里有个比较有意思的事情,那就是12306,在这里我们不讨论他的技术和用户体验等问题。我们看看他的证书。如果使用ChromeFirefox或者IE89等浏览器都会显示这个网站的证书有安全问题。

因为kyfw.12306.cn使用的是SRCA颁发的证书,这个证书在我们的计算机中是默认不被信任的,也就是不安全的。什么是SRCASRCA就是Sinorail Certification Authority,中文名叫中铁数字证书认证中心,简称中铁CA。这是个铁道部自己搞的机构,相当于是自己给自己颁发证书,自己又是裁判又是运动员,不过这一贯符合咱政府的形象。

  • 数字签名

对文件进行加密只解决了传送信息的保密问题,而防止他人对传输的文件进行破坏,以及如何确定发信人的身份还需要采取其它的手段,这一手段就是数字签名。完善的数字签名应具备签字方不能抵赖、他人不能伪造、在公证人面前能够验证真伪的能力。

它的主要方式是,报文的发送方从报文文本中生成一个128位的散列值(或 报文摘要)。发送方用自己的私人密钥对这个散列值进行加密来形成发送方的数字签名。然后,这个数字签名将作为报文的附件和报文一起发送给报文的接收方。报文的接收方首先从接收到的原始报文中计算出128位的散列值(或报文摘要),接着再用发送方的公用密钥来对报文附加的数字签名进行解密。如果两个散列值相同、那么接收方就能确认该数字签名是发送方的。通过数字签名能够实现对原始报文的鉴别。

应用广泛的数字签名方法主要有三种,即:RSA签名、DSS签名和Hash签名。这三种算法可单独使用,也可综合在一起使用。具体算法,可google

tips:阿里大部分使用rsa,eg:http://hostname/gateway.do?_input_charset=UTF-8&request_dt=12345678&partner=2088000001&format=json&service=ipay.itrade.escrow.modifyprice &prod_code=ABC&sign_type=RSA&sign=xxx&trade_no=2013.....)

  • https

http(超文本传输协议)基础上提出的一种安全的http协议,因此可以称为安全的超文本传输协议。http协议直接放置在TCP协议之上,而https提出在httpTCP中间加上一层加密层。从发送端看,这一层负责把http的内容加密后送到下层的TCP,从接收方看,这一层负责将TCP送来的数据解密还原成http的内容。

  • ssl

SSL安全协议最初是由Netscape Communication公司设计开发的,又叫安全套接层(Secure Sockets Layer)协议,主要用于提高应用程序之间的数据的传输安全。SSL协议的整个概念可以被总结为:一个保证安装了安全套接字的客户和服务器间事务安全的协议。从名字就可以看出它在https协议栈中负责实现上面提到的加密层。因此,一个https协议栈大致是这样的:


 要说明的是,安全套接层协议是一个保证计算机通信安全的协议,对通信对话过程进行安全保护。例如,一台客户机与一台主机连接上了,首先是要初始化握手协议,然后就建立了一个SSL。对话进行。直到对话结束,安全套接层协议都会对整个通信过程加密,并且检查其完整性。这样一个对话时段算一次握手。而HTTP协议中的每一次连接就是一次握手,因此,与HTTP相比。安全套接层协议的通信效率会高一些。
    
1)接通阶段:客户通过网络向服务商打招呼,服务商回应;
    
2)密码交换阶段:客户与服务器之间交换双方认可的密码,一般选用RSA密码算法,也有的选用Diffie-HellmanfFortezza-KEA密码算法;
    
3)会谈密码阶段:客户与服务商间产生彼此交谈的会谈密码;
    
4)检验阶段:检验服务商取得的密码;
    
5)客户认证阶段:验证客户的可信度;
    
6)结束阶段,客户与服务商之间相互交换结束的信息。
    
当上述动作完成之后,两者间的资料传送就会加密,另外一方收到资料后,再将编码资料还原。即使盗窃者在网络上取得编码后的资料,如果没有原先编制的密码算法,也不能获得可读的有用资料。

tips:发送时信息用对称密钥加密,对称密钥用非对称算法加密,再把两个包绑在一起传送过去。接收的过程与发送正好相反,先打开有对称密钥的加密包,再用对称密钥解密。这种加密方式在很多场景都用到,之所以不始终用非对称加密,是由于非对称加密的加密解密速度缓慢,耗费资源

由于ssl只是商家认证客户,没有客户认证商家的过程。所以后来有了一个set安全协协议,暂时没有接触过,这篇文章中就不解释了。

至此一些相关的概念也稍微的解释了下,可能有些地方说的不是很明朗,也避免不了错误,欢迎指正。文中提到的各种算法在下一篇文中会用java代码来实现(java中已经提供了相应的接口)。


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!