zoukankan      html  css  js  c++  java
  • SSL协议与数字证书原理

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html
    内部邀请码:C8E245J (不写邀请码,没有现金送)
    国内私募机构九鼎控股打造,九鼎投资是在全国股份转让系统挂牌的公众公司,股票代码为430719,为中国PE第一股,市值超1000亿元。 

    ------------------------------------------------------------------------------------------------------------------------------------------------------------------

     

    原文地址: http://lulu87.blog.51cto.com/1244696/379556

    SSL协议与数字证书原理

    1 SSL(Secure Socket Lclientyer)是netscclientpe公司设计的主要用于weserver的安全传输协议。这种协议在WESERVER上获得了广泛的应用。

    SSL在TCP之上建立了一个加密通道,通过这一层的数据经过了加密,因此达到保密的效果。

    SSL协议分为两部分:Hclientndshclientke Protocol和Record Protocol,。

    其中Hclientndshclientke Protocol用来协商密钥,协议的大部分内容就是通信双方如何利用它来安全的协商出一份密钥。

    Record Protocol则定义了传输的格式。

    SSL缺省只进行server端的认证,客户端的认证是可选的。

    密钥协商过程

    为什么要协商一份密约?

    由于对称加密的速度比较慢,所以它一般用于密钥交换,双方通过公钥算法协商出一份密钥(公钥,私钥),然后通过对称加密来通信,对称加密是在传输时用。

    简单的说便是:

    1.SSL客户端(也是TCP的客户端)在TCP链接建立之后,发出一个Clienth*llo来发起握手,这个消息里面包含了自己可实现的算法列表和其它一些需要的消息。

    2.SSL的服务器端会回应一个Serverh*llo,这里面确定了这次通信所需要的算法,然后发过去自己的证书(里面包含了身份和自己的公钥)。

    3.Client在收到这个消息后会生成一个秘密消息,用SSL服务器的公钥加密后传过去。

    4.SSL服务器端用自己的私钥解密后,会话密钥协商成功,双方可以用同一份会话密钥来通信了。

    问题:如何知道证书的真实性?是由证书中心发的。

    因为有CA的公钥,CA用自己的私钥加密证书,C用CA的公约解密,如果解密成功,既证明了证书的真实性。

    形象化比喻

    CLIENT与SERVER通信,CLIENT是SSL客户端,SERVER是SSL服务器端,加密后的消息放在方括号[]里,以突出明文消息的区别。双方的处理动作的说明用圆括号()括起。

    CLIENT:我想和你安全的通话,我这里的对称加密算法有DES,RC5,密钥交换算法有RSCLIENT和DH,摘要算法有MD5和SHCLIENT。

    (注:这里有三种算法:

    1 密约交换算法RSA非对称-----交换密文

    2 摘要算法—保证消息的完整性

    3 对称加密算法----数据加密)

    SERVER:我们用DES-RSCLIENT-SHCLIENT这对组合好了。 
    这是我的证书,里面有我的名字和公钥,你拿去验证一下我的身份(把证书发给CLIENT)。 
    目前没有别的可说的了。

    CLIENT:(查看证书上SERVER的名字是否无误,并通过手头早已有的CCLIENT的证书验证了SERVER的证书的真实性[如果是单向的,第一次客户端无证书,所以会提问你],如果其中一项有误,发出警告并断开连接,这一步保证了SERVER的公钥的真实性) 
    (产生一份秘密消息,这份秘密消息处理后将用作加密密钥,加密初始化向量和hmclientc的密钥。将这份秘密消息-协议中称为per_mclientster_secret-用SERVER的公钥加密,封装成称作ClientKeyExchclientnge的消息。由于用了SERVER的公钥,保证了第三方无法窃听) 
    我生成了一份秘密消息,并用你的公钥加密了,给你(把ClientKeyExchclientnge发给SERVER)[此时他人获取秘密消息也无用,因为只有server才能解开] 
    注意,下面我就要用加密的办法给你发消息了! 
    (将秘密消息进行处理,生成加密密钥,加密初始化向量和hmclientc的密钥)

    [此时他人获取公钥也无用,因为她不知道秘密消息内容] 
    [我说完了]

    SERVER:(用自己的私钥将ClientKeyExchclientnge中的秘密消息解密出来,然后将秘密消息进行处理,生成加密密钥,加密初始化向量和hmclientc的密钥,这时双方已经安全的协商出一套加密办法了) 
    注意,我也要开始用加密的办法给你发消息了! 
    [我说完了]

    CLIENT: [我的秘密是...]

    SERVER: [其它人不会听到的...]

    双向认证 SSL 协议的具体过程

    ① 浏览器发送一个连接请求给安全服务器。 
    ② 服务器将自己的证书,以及同证书相关的信息发送给客户浏览器。 
    ③ 客户浏览器检查服务器送过来的证书是否是由自己信赖的 CA 中心所签发的。如果是,就继续执行协议;如果不是,客户浏览器就给客户一个警告消息:警告客户这个证书不是可以信赖的,询问客户是否需要继续。 
    ④ 接着客户浏览器比较证书里的消息,例如域名和公钥,与服务器刚刚发送的相关消息是否一致,如果是一致的,客户浏览器认可这个服务器的合法身份。 
    ⑤ 服务器要求客户发送客户自己的证书。收到后,服务器验证客户的证书,如果没有通过验证,拒绝连接;如果通过验证,服务器获得用户的公钥。 
    ⑥ 客户浏览器告诉服务器自己所能够支持的通讯对称密码方案。 
    ⑦ 服务器从客户发送过来的密码方案中,选择一种加密程度最高的密码方案,用客户的公钥加过密后通知浏览器。 
    ⑧ 浏览器针对这个密码方案,选择一个通话密钥,接着用服务器的公钥加过密后发送给服务器。 
    ⑨ 服务器接收到浏览器送过来的消息,用自己的私钥解密,获得通话密钥。 
    ⑩ 服务器、浏览器接下来的通讯都是用对称密码方案,对称密钥是加过密的。

    单向认证 SSL 协议不需要客户拥有 CA 证书,具体的过程相对于上面的步骤,只需将服务器端验证客户证书的过程去掉,以及在协商对称密码方案,对称通话密钥时,服务器发送给客户的是没有加过密的(这并不影响 SSL 过程的安全性)密码方案。 这样,双方具体的通讯内容,就是加过密的数据,如果有第三方攻击,获得的只是加密的数据,第三方要获得有用的信息,就需要对加密的数据进行解密,这时候的安全就依赖于密码方案的安全。而幸运的是,目前所用的密码方案,只要通讯密钥长度足够的长,就足够的安全。这也是我们强调要求使用 128 位加密通讯的原因。

    数字证书

    什么是数字证书?

    是由证书签证机关(CA)签发的对用户的公钥的认证。

    证书的内容应包括CA的信息、用户信息、用户公钥及CA签发时间及有效期等内容。目前国际上对证书的格式及认证方法遵从X.509体系标准。 
    数字证书又称为数字标识(Digital Certificate,Digital ID)。它提供了一种在Internet上身份验证的方式,是用来标志和证明网络通信双方身份的数字信息文件,与司机驾照或日常生活中的身份证相似。在网上进行电子商务活动时,交易双方需要使用数字证书来表明自己的身份,并使用数字证书来进行有关的交易操作。通俗地讲,数字证书就是个人或单位在Internet的身份证。数字证书主要包括三方面的内容:证书所有者的信息、证书所有者的公开密钥和证书颁发机构的签名。 
    证书里包含了什么? 
    一个标准的X.509数字证书包含以下一些内容: 
    证书的版本信息; 
    证书的序列号,每个证书都有一个唯一的证书序列号; 
    证书所使用的签名算法; 
    证书的发行机构名称,命名规则一般采用X.500格式; 
    证书的有效期,现在通用的证书一般采用UTC时间格式,它的计时范围为1950-2049;  
    证书所有人的名称,命名规则一般采用X.500格式; 
    证书所有人的公开密钥; 
    证书发行者对证书的签名。 
    数字证书能解决什么问题?

    在使用数字证书的过程中应用公开密钥加密技术,建立起一套严密的身份认证系统,它能够保证: 
    保密性:通过使用发件人的数字证书对电子邮件加密,只有收件人才能阅读加密的邮件,这样保证在Internet上传递的电子邮件信息不会被他人窃取,即使发错邮件,收件人由于无法解密而不能够看到邮件内容。 
    完整性:利用发件人数字证书在传送前对电子邮件进行数字签名不仅可确定发件人身份,而且可以判断发送的信息在传递的过程中是否被篡改过。 
    身份认证:在Internet上传递电子邮件的双方互相不能见面,所以必须有方法确定对方的身份。利用发件人数字证书在传送前对电子邮件进行数字签名即可确定发件人身份,而不是他人冒充的。 
    不可否认性:发件人的数字证书只有发件人唯一拥有,故发件人利用其数字证书在传送前对电子邮件进行数字签名后,发件人就无法否认发送过此电子邮件。 
    数字证书的原理是什么?

    数字证书采用PKI(Public Key Infrastructure)公开密钥基础架构技术,利用一对互相匹配的密钥进行加密和解密。

    A 加密和认证

    首先我们需要区分加密和认证这两个基本概念。

    加密是将数据资料加密,使得非法用户即使取得加密过的资料,也无法获取正确的资料内容,所以数据加密可以保护数据,防止监听攻击。其重点在于数据的安全性。

    身份认证是用来判断某个身份的真实性,确认身份后,系统才可以依不同的身份给予不同的权限。其重点在于用户的真实性。两者的侧重点是不同的

    公钥和私钥

    其次我们还要了解公钥和私钥的概念和作用。

    在现代密码体制中加密和解密是采用不同的密钥(公开密钥),也就是非对称密钥密码系统,每个通信方均需要两个密钥,即公钥和私钥,这两把密钥可以互为加解密。公钥是公开的,不需要保密,而私钥是由个人自己持有,并且必须妥善保管和注意保密。

    公钥私钥的原则:

    1. 一个公钥对应一个私钥。
    2. 密钥对中,让大家都知道的是公钥,不告诉大家,只有自己知道的,是私钥。
    3. 如果用其中一个密钥加密数据,则只有对应的那个密钥才可以解密。
    4. 如果用其中一个密钥可以进行解密数据,则该数据必然是对应的那个密钥进行的加密。

    非对称密钥密码的主要应用就是公钥加密和公钥认证,而公钥加密的过程和公钥认证的过程是不一样的,下面我就详细讲解一下两者的区别。

    基于公开密钥的加密过程(加密)

    比如有两个用户Alice和Bob,Alice想把一段明文通过双钥加密的技术发送给Bob,Bob有一对公钥和私钥,那么加密解密的过程如下:

    1. Bob将他的公开密钥传送给Alice。
    2. Alice用Bob的公开密钥加密她的消息,然后传送给Bob。
    3. Bob用他的私人密钥解密Alice的消息。

    发送方使用接受方的公钥进行加密,接受方用自己的私钥进行解密――实现通信的保密。

    基于公开密钥的认证过程(身份鉴别)

    身份认证和加密就不同了,主要用户鉴别用户的真伪。这里我们只要能够鉴别一个用户的私钥是正确的,就可以鉴别这个用户的真伪。

    还是Alice和Bob这两个用户,Alice想让Bob知道自己是真实的Alice,而不是假冒的,因此Alice只要使用公钥密码学对文件签名发送给Bob,Bob使用Alice的公钥对文件进行解密,如果可以解密成功,则证明Alice的私钥是正确的,因而就完成了对Alice的身份鉴别。整个身份认证的过程如下:

    1. Alice用她的私人密钥对文件加密,从而对文件签名。
    2. Alice将签名的文件传送给Bob。
    3. Bob用Alice的公钥解密文件,从而验证签名。

    发送方使用自己的私钥加密,接受方用发送方的公钥进行解密。

    E 身份鉴别与加密

    发送方使用自己的私钥对明文加密,然后用接受方的公钥进行加密。

    接受方使用自己的私钥解密,然后使用发送方的公钥解密。

    两次加密,两次解密。

    数字证书采用公钥体制,即利用一对互相匹配的密钥进行加密、解密。每个用户自己设定一把特定的仅为本人所知的私有密钥(私钥),用它进行解密和签名;同时设定一把公共密钥(公钥)并由本人公开,为一组用户所共享,用于加密和验证签名。当发送一份保密文件时,发送方使用接收方的公钥对数据加密,而接收方则使用 自己的私钥解密,这样信息就可以安全无误地到达目的地了。

    数字证书的应用

    现有持证人甲向持证人乙传送数字信息,为了保证信息传送的真实性、完整性和不可否认性,需要对要传送的信息进行数字加密和数字签名,其传送过程如下:

    (1) 甲准备好要传送的数字信息(明文)。 
    (2) 甲对数字信息进行哈希(hash)运算,得到一个信息摘要。 
    (3) 甲用自己的私钥(SK)对信息摘要进行加密得到甲的数字签名,并将其附在数字信息上。 
    (4) 甲随机产生一个加密密钥(DES密钥),并用此密钥对要发送的信息进行加密,形成密文。 
    (5) 甲用乙的公钥(PK)对刚才随机产生的加密密钥进行加密,将加密后的DES密钥连同密文一起传送给乙。 
    (6) 乙收到甲传送过来的密文和加过密的DES密钥,先用自己的私钥(SK)对加密的DES密钥进行解密,得到DES密钥。 
    (7) 乙然后用DES密钥对收到的密文进行解密,得到明文的数字信息,然后将DES密钥抛弃(即DES密钥作废)。 
    (8) 乙用甲的公钥(PK)对甲的数字签名进行解密,得到信息摘要(附件)。 
    (9) 乙用相同的hash算法对收到的明文再进行一次hash运算,得到一个新的信息摘要。 
    (10)乙将收到的信息摘要和新产生的信息摘要进行比较,如果一致,说明收到的信息没有被修改过。 
    在(5)处用到的PK,是否来自乙所持有的的数字证书?若是,从何处得到该数字证书?关于此过程的加密解密,是怎样实现? 
    A 如何获得通讯对方的公钥并且相信此公钥是由某个身份确定的人拥有的,这就要用到电子证书。电子证书是由大家共同信任的第三方---认证中心(Certificate Authority,CA)来颁发的,有某人的身份信息、公钥和CA的数字签名。任何一个信任CA的通讯一方,都可以通过验证对方电子证书上的CA数字签名来建立起和对方的信任,并且获得对方的公钥以备使用。

    数字证书的使用

    每一个用户有一个各不相同的名字,一个可信的证书认证中心(CA)给每个用户分配一个唯一的名字并签发一个包含名字和用户公开密钥的证书。

    如果甲想和乙通信,他首先必须从数据库中取得乙的证书,然后对它进行验证。如果他们使用相同的CA,事情就很简单。甲只需验证乙证书上CA的签名;如果他们使用不同的CA,问题就复杂了。甲必须从CA的树形结构底部开始,从底层CA往上层CA查询,一直追踪到同一个CA为止,找出共同的信任CA。

    证书可以存储在网络中的数据库中。用户可以利用网络彼此交换证书。当证书撤销后,它将从证书目录中删除,然而签发此证书的CA仍保留此证书的副本,以备日后解决可能引起的纠纷。

    如果用户的密钥或CA的密钥被破坏,从而导致证书的撤销。每一个CA必须保留一个已经撤销但还没有过期的证书废止列表(CRL)。当甲收到一个新证书时,首先应该从证书废止列表(CRL)中检查证书是否已经被撤销。 
    数字证书由谁来颁发,如何颁发?

    数字证书是由认证中心颁发的。

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

    数字证书颁发过程如下:用户首先产生自己的密钥对,并将公共密钥及部分个人身份信息传送给认证中心。认证中心在核实身份后,将执行一些必要的步骤,以确信请求确实由用户发送而来,然后,认证中心将发给用户一个数字证书,该证书内包含用户的个人信息和他的公钥信息,同时还附有认证中心的签名信息。用户就可以使用自己的数字证书进行相关的各种活动。

    消息摘要

    某些人可能会篡改或替换其原始消息,一种保证消息完整性的方法是同时发一个其消息的简单摘要与消息本身比对,如果相符则消息正确。

    数字签名

    不可抵赖和身份确认clip_image001

    证书

    是由证书签证机关(CA)签发的对用户的公钥的认证。

    证书的内容

    证书机构

    证书链

    建立顶级CA

  • 相关阅读:
    BF算法和KMP算法
    Python课程笔记 (五)
    0268. Missing Number (E)
    0009. Palindrome Number (E)
    0008. String to Integer (atoi) (M)
    0213. House Robber II (M)
    0198. House Robber (E)
    0187. Repeated DNA Sequences (M)
    0007. Reverse Integer (E)
    0006. ZigZag Conversion (M)
  • 原文地址:https://www.cnblogs.com/AloneSword/p/3662962.html
Copyright © 2011-2022 走看看