SSL协议..docx

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
SSL协议握手协议(分4个阶段)每个握手协议包含以下3个字段  (1)Type:表示10种消息类型之一  (2)Length:表示消息长度字节数  (3)Content:与消息相关的参数1.1建立安全能力阶段(XXXXHello)Client hello消息包括Version,Random,Session id,Cipher suite,Compression method等信息。ServerHello服务器用ServerHello信息应答客户,包括下列内容 (1)一个SSL版本号。取客户端支持的最高版本号和服务端支持的最高版本号中的较低者。 (2)一个用于生成主秘密的32字节的随机数。(客户端一个、服务端一个) (3)会话ID (4)从客户端的密码套件列表中选择的一个密码套件 (5)从客户端的压缩方法的列表中选择的压缩方法这个阶段之后,客户端服务端知道了下列内容: (1)SSL版本 (2)密钥交换、信息验证和加密算法 (3)压缩方法(4)有关密钥生成的两个随机数。(主密钥)1.2 服务器鉴别与密钥交换服务器启动SSL握手第2阶段,是本阶段所有消息的唯一发送方,客户机是所有消息的唯一接收方。(a)证书:服务器将数字证书和到根CA整个链发给客户端,使客户端能用服务器证书中的服务器公钥认证服务器。(b)服务器密钥交换(可选):这里视密钥交换算法而定。(c)证书请求:服务端可能会要求客户自身进行验证。(d)服务器握手完成:第二阶段的结束,第三阶段开始的信号。这里重点介绍一下服务端的验证和密钥交换。这个阶段的前面的(a)证书 和(b)服务器密钥交换是基于密钥交换方法的。而在SSL中密钥交换算法有6种:无效(没有密钥交换)、RSA、匿名Diffie-Hellman、暂时Diffie-Hellman、固定Diffie-Hellman、Fortezza。1.3 客户机鉴别与密钥交换:客户机启动SSL握手第3阶段,是本阶段所有消息的唯一发送方,服务器是所有消息的唯一接收方。(a)证书(可选):为了对服务器证明自身,客户要发送一个证书信息,这是可选的,在IIS中可以配置强制客户端证书认证。(b)客户机密钥交换(Pre-master-secret):这里客户端将预备主密钥发送给服务端,注意这里会使用服务端的公钥进行加密。(c)证书验证(可选),对预备秘密和随机数进行签名,证明拥有(a)证书的公钥。这种情况,除非服务器在阶段II明确请求,否则没有证书信息当服务器收到预备主秘密时,它使用私钥进行解密。服务端拥有私钥是一个证据,可以证明服务器是一个它在第一个信息发送的公钥证书中要求的实体。客户和服务器都知道预备主密钥。1.4 完成客户机启动SSL握手第4阶段,使服务器结束。该阶段分为4步,前2个消息来自客户机,后2个消息来自服务器。1.5 密钥生成的过程为了保证信息的完整性和机密性,SSL需要有六个加密秘密:四个密钥和两个IV。为了信息的可信性,客户端需要一个密钥(HMAC),为了加密要有一个密钥,为了分组加密要一个IV,服务端也是如此。OpenSSL初始化int SSL_library_init(void);选择会话协议创建会话环境建立SSL套接字SSL* SSL_new(SSL_CTX *ctx); //申请一个SSL套接字int SSL_set_fd(SSL* ssl, int fd); //绑定读写套接字int SSL_set_rfd(SSL* ssl, int fd); //绑定只读套接字int SSL_set_wfd(SSL* ssl, int fd); //绑定只写套接字(5)完成SSL握手客户端: int SSL_connect(SSL* ssl);服务端: int SSL_accept(SSL* ssl)(6)提取对方的证书信息X509* SSL_get_peer_certificate(SSL* ssl); //可以从SSL中提取对方的证书信息,这些信息已经被SSL验证过了X509_NAME* X509_get_subject_name(X509 *a); //获得证书所有者的姓名(7)进行数据通信int SSL_read(SSL* ssl, void *buf, int num);int SSL_write(SSL *ssl, const void *buf, int num);(8)结束SSL通信int SSL_shutdown(SSL *ssl); //关闭SSL套接字void SSL_free(SSL *ssl); //释放SSL套接字void SSL_CTX_free(SSL_CTX *ctx); //释放SSL会话环境

文档评论(0)

tiangou + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档