转载:http://blog.csdn.net/allwtg/archive/2009/12/09/4969543.aspx
公钥和私钥的概念
在现代密码体制中加密和解密是采用不同的密钥(公开密钥),也就是公开密钥算法(也叫非对称算法、双钥算法)”,每个通信方均需要两个密钥,即公钥和私钥,这两把密钥可以互为加解密。公钥是公开的,不需要保密,而私钥是由个人自己持有,并且必须妥善保管和注意保密。
证书的概念
数字证书则是由证书认证机构(CA)对证书申请者真实身份验证之后,用CA的根证书对申请人的一些基本信息以及申请人的公钥进行签名(相当于加盖发证书机 构的公章)后形成的一个数字文件。CA完成签发证书后,会将证书发布在CA的证书库(目录服务器)中,任何人都可以查询和下载,因此数字证书和公钥一样是公开的。实际上,数字证书就是经过CA认证过的公钥。
原则:
1、一个公钥对应一个私钥。
2、密钥对中,让大家都知道的是公钥,不告诉大家,只有自己知道的,是私钥。
3、如果用其中一个密钥加密数据,则只有对应的那个密钥才可以解密。
4、如果用其中一个密钥可以进行解密数据,则该数据必然是对应的那个密钥进行的加密。
5、非对称密钥密码的主要应用就是公钥加密和公钥认证,而公钥加密的过程和公钥认证的过程是不一样的
基于公开密钥的加密过程
比如有两个用户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的公钥解密文件,从而验证签名。
公钥、私钥、证书的生成
1、一个HTTPS服务器首先创建他自己的密钥对(key pair),包含公钥和私钥。
2、通过网络把他的公钥送到CA中心,公钥中包含了个人鉴别信息(他的名字、地址、所用设备的序列号等等)。
3、CA中心创建并签署一个包含公钥及个人信息的证书,从而保证密钥的确实性。
4、使用该证书的人可以通过检验CA中心的签名(检验CA签名需要CA的公钥)来验证证书的确实性。
公钥、私钥、证书的使用
在HTTPS协议的握手阶段是公钥、私钥、证书的典型使用场景。HTTPS握手的典型时序图如下:
上图中实线部分是必须的,虚线部分是可选的。该流程完成了两个任务:服务器身份的验证、加密传输对称加密密钥。
1、client hello和 server hello表示双方要建立一个加密会话。
2、服务器把数字证书传输给客户端,证书中包含服务器公钥,客户端用公钥解析证书中的数字签名,可以验证服务器的身份。
3、Server Hello Done表示hello 流程结束。
4、客户端生成一个对称加密密钥,用于实际数据的加密传输,并用服务器的公钥加密,把对生成的密钥传递给服务器。同时携带一个用刚刚生成的加密密钥加密的“client finished”。
5、服务器收到对称加密密钥,并尝试用该密钥解密加密字段,如能得到明文“client finished”,认为该密钥有效,可以用于之后的数据加密传输。同时用该密钥加密“server finished”,传递给客户端。
6、客户端用对称机密密钥解密,如能得到明文“server finished”,客户端认为该服务器已经正确的接收到对称密钥。
7、加密数据传输开始。
虚线部分是服务器端要求验证客户身份。