`

SSL单双向验证原理(转)

    博客分类:
  • J2EE
阅读更多
Key points
SSL验证
双向SSL握手
证书结构

一 SSL验证
为了便于更好的认识和理解 SSL 协议,这里着重介绍 SSL 协议的握手协议。SSL 协议既用到了公钥加密技术又用到了对称加密技术,对称加密技术虽然比公钥加密技术的速度快,可是公钥加密技术提供了更好的身份认证技术。SSL 的握手协议非常有效的让客户和服务器之间完成相互之间的身份认证,其主要过程如下:
  ① 客户端的浏览器向服务器传送客户端 SSL 协议的版本号,加密算法的种类,产生的随机数,以及其他服务器和客户端之间通讯所需要的各种信息。
  ② 服务器向客户端传送 SSL 协议的版本号,加密算法的种类,随机数以及其他相关信息,同时服务器还将向客户端传送自己的证书。
  ③ 客户利用服务器传过来的信息验证服务器的合法性,服务器的合法性包括:证书是否过期,发行服务器证书的 CA 是否可靠,发行者证书的公钥能否正确解开服务器证书的“发行者的数字签名”,服务器证书上的域名是否和服务器的实际域名相匹配。如果合法性验证没有通过,通讯将断开;如果合法性验证通过,将继续进行第四步。
  ④ 用户端随机产生一个用于后面通讯的“对称密码”,然后用服务器的公钥(服务器的公钥从步骤②中的服务器的证书中获得)对其加密,然后将加密后的“预主密码”传给服务器。
  ⑤ 如果服务器要求客户的身份认证(在握手过程中为可选),用户可以建立一个随机数然后对其进行数据签名,将这个含有签名的随机数和客户自己的证书以及加密过的“预主密码”一起传给服务器。
  ⑥ 如果服务器要求客户的身份认证,服务器必须检验客户证书和签名随机数的合法性,具体的合法性验证过程包括:客户的证书使用日期是否有效,为客户提供证书的 CA 是否可靠,发行 CA 的公钥能否正确解开客户证书的发行 CA 的数字签名,检查客户的证书是否在证书废止列表(CRL)中。检验如果没有通过,通讯立刻中断;如果验证通过,服务器将用自己的私钥解开加密的“预主密码”,然后执行一系列步骤来产生主通讯密码(客户端也将通过同样的方法产生相同的主通讯密码)。
  ⑦ 服务器和客户端用相同的主密码即“通话密码”,一个对称密钥用于 SSL 协议的安全数据通讯的加解密通讯。同时在 SSL 通讯过程中还要完成数据通讯的完整性,防止数据通讯中的任何变化。
  ⑧ 客户端向服务器端发出信息,指明后面的数据通讯将使用的步骤⑦中的主密码为对称密钥,同时通知服务器客户端的握手过程结束。
  ⑨ 服务器向客户端发出信息,指明后面的数据通讯将使用的步骤⑦中的主密码为对称密钥,同时通知客户端服务器端的握手过程结束。
  ⑩ SSL 的握手部分结束,SSL 安全通道的数据通讯开始,客户和服务器开始使用相同的对称密钥进行数据通讯,同时进行通讯完整性的检验。

二 双向SSL握手认证
  双向认证 SSL 协议的具体过程
  ① 浏览器发送一个连接请求给安全服务器。
  ② 服务器将自己的证书,以及同证书相关的信息发送给客户浏览器。
  ③ 客户浏览器检查服务器送过来的证书是否是由自己信赖的 CA 中心所签发的。如果是,就继续执行协议;如果不是,客户浏览器就给客户一个警告消息:警告客户这个证书不是可以信赖的,询问客户是否需要继续。
  ④ 接着客户浏览器比较证书里的消息,例如域名和公钥,与服务器刚刚发送的相关消息是否一致,如果是一致的,客户浏览器认可这个服务器的合法身份。
  ⑤ 服务器要求客户发送客户自己的证书。收到后,服务器验证客户的证书,如果没有通过验证,拒绝连接;如果通过验证,服务器获得用户的公钥。
  ⑥ 客户浏览器告诉服务器自己所能够支持的通讯对称密码方案。
  ⑦ 服务器从客户发送过来的密码方案中,选择一种加密程度最高的密码方案,用客户的公钥加过密后通知浏览器。
  ⑧ 浏览器针对这个密码方案,选择一个通话密钥,接着用服务器的公钥加过密后发送给服务器。
  ⑨ 服务器接收到浏览器送过来的消息,用自己的私钥解密,获得通话密钥。
  ⑩ 服务器、浏览器接下来的通讯都是用对称密码方案,对称密钥是加过密的。
  上面所述的是双向认证 SSL 协议的具体通讯过程,这种情况要求服务器和用户双方都有证书。单向认证 SSL 协议不需要客户拥有 CA 证书,具体的过程相对于上面的步骤,只需将服务器端验证客户证书的过程去掉,以及在协商对称密码方案,对称通话密钥时,服务器发送给客户的是没有加过密的(这并不影响 SSL 过程的安全性)密码方案。 这样,双方具体的通讯内容,就是加过密的数据,如果有第三方攻击,获得的只是加密的数据,第三方要获得有用的信息,就需要对加密的数据进行解密,这时候的安全就依赖于密码方案的安全。而幸运的是,目前所用的密码方案,只要通讯密钥长度足够的长,就足够的安全。这也是我们强调要求使用 128 位加密通讯的原因。

三 证书结构
  证书各部分的含义
  Version ,证书版本号,不同版本的证书格式不同
  Serial Number, 序列号,同一身份验证机构签发的证书序列号唯一
  Algorithm Identifier, 签名算法,包括必要的参数 Issuer 身份验证机构的标识信息
  Period of Validity, 有效期
  Subject, 证书持有人的标识信息
  Subject’s Public Key, 证书持有人的公钥
  Signature, 身份验证机构对证书的签名


  证书的格式
  认证中心所发放的证书均遵循 X.509 V3 标准,其基本格式如下:
  证书版本号(Certificate Format Version) 含义:用来指定证书格式采用的 X.509 版本号。
  证书序列号(Certificate Serial Number) 含义:用来指定证书的唯一序列号,以标识 CA 发出的所有公钥证书。
  签名(Signature) 算法标识(Algorithm Identifier) 含义:用来指定 CA 签发证书所用的签名算法。   签发此证书的 CA 名称(Issuer ) 含义:用来指定签发证书的 CA 的 X.500 唯一名称(DN, Distinguished Name)。
  证书有效期(Validity Period) 起始日期(notBefore) 终止日期(notAfter) 含义:用来指定证书起始日期和终止日期。
  用户名称(Subject) 含义:用来指定证书用户的 X.500 唯一名称(DN,Distinguished Name)。
  用户公钥信息(Subject Public Key Information)
  算法(algorithm)
  算法标识(Algorithm Identifier)
  用户公钥(subject Public Key) 含义:用来标识公钥使用的算法,并包含公钥本身。
  证书扩充部分(扩展域)(Extensions) 含义:用来指定额外信息。
 
  X.509 V3 证书的扩充部分(扩展域)及实现方法
  CA 的公钥标识(Authority Key Identifier)
  公钥标识(SET 未使用)(Key Identifier)
  签发证书者证书的签发者的甄别名(Certificate Issuer)
  签发证书者证书的序列号(Certificate Serial Number)

  X.509 V3 证书的扩充部分(扩展域)及实现
  CA 的公钥标识(Authority Key Identifier)
  公钥标识(SET 未使用)(Key Identifier)
  签发证书者证书的签发者的甄别名(Certificat
  签发证书者证书的序列号(Certificate Serial N含义:CA 签名证书所用的密钥对的唯一标识
  用户的公钥标识(Subject Key Identifier) 含义:用来标识与证书中公钥相关的特定密钥进行解密。
  证书中的公钥用途(Key Usage) 含义:用来指定公钥用途。
  用户的私钥有效期(Private Key Usage Period)
  起始日期(Note Before)
  终止日期(Note After) 含义:用来指定用户签名私钥的起始日期和终止日期。
  CA 承认的证书政策列表(Certificate Policies) 含义:用来指定用户证书所适用的政策,证书政策可由对象标识符表示。
  用户的代用名(Substitutional Name) 含义:用来指定用户的代用名。
  CA 的代用名(Issuer Alt Name) 含义:用来指定 CA 的代用名。
  基本制约(Basic Constraints) 含义:用来表明证书用户是最终用户还是 CA。
  在 SET 系统中有一些私有扩充部分(扩展域)Hashed Root Key 含义:只在根证书中使用,用于证书更新时进行回溯。
  证书类型(Certificate Type) 含义:用来区别不同的实体。该项是必选的。
  商户数据(Merchant Data) 含义:包含支付网关需要的所有商户信息。
  持卡人证书需求(Card Cert Required) 含义:显示支付网关是否支持与没有证书的持卡人进行交易。
  SET 扩展(SETExtensions) 含义:列出支付网关支持的支付命令的 SET 信息扩展。
  CRL 数据定义版本(Version) 含义:显示 CRL 的版本号。
  CRL 的签发者(Issuer) 含义:指明签发 CRL 的 CA 的甄别名。
  CRL 发布时间(this Update)
  预计下一个 CRL 更新时间(Next Update)
  撤销证书信息目录(Revoked Certificates)
  CRL 扩展(CRL Extension)
  CA 的公钥标识(Authority Key Identifier)
  CRL 号(CRL Number)
分享到:
评论

相关推荐

    SSL双向验证范例

    而SSL双向验证,也称为客户端认证,是一种加强的安全措施,它不仅要求服务器向客户端证明其身份(即服务器证书验证),还要求客户端向服务器证明自己的身份(即客户端证书验证)。这种方式可以防止中间人攻击,增加...

    netty实现SSL/TSL双向加密认证示例

    通过对这些代码的分析和学习,可以更好地理解 Netty 中的 SSL/TLS 双向认证工作原理。 总结,Netty 提供了强大而灵活的工具来实现 SSL/TLS 安全通信,包括双向认证。通过正确配置 `SslContext`、处理通道处理器和...

    Java ssl socket 双向认证

    Java SSL(Secure Socket Layer)套接字是一种用于在两个应用程序之间建立安全通信通道的协议,主要目的是为了确保数据传输的安全性。...对于开发者来说,理解SSL/TLS的工作原理以及如何在Java中实现是非常重要的技能。

    SSL双向认证握手过程 非常详细

    SSL双向认证握手过程是SSL/TLS协议中的一种身份验证机制,用于确保客户端和服务器之间的通信安全。本文将详细介绍SSL双向认证握手过程的每个步骤,并解释相关的数据结构和加密算法。 第一步:ClientHello 在SSL...

    AndroidHttpClient访问Tomcat双向SSL验证服务器.pdf

    - 由于默认情况下`WebView`可能不支持SSL双向验证,因此可能需要修改`WebView`的源码以实现这一功能。 - 完成研究后将单独撰写文档详细说明具体的实现方法。 #### 结论 本文详细介绍了如何使用`Android...

    易语言源码易语言SSL双向认证源码.rar

    通过学习这个源码,你可以深入理解SSL双向认证的工作原理,同时提升在易语言中进行网络通信安全编程的能力。这对于开发涉及敏感数据传输的应用,如在线支付、企业内部通讯等场景,是非常重要的。

    Tomcat下使用ssl实现双向认证[网络安全]

    总结,Tomcat下的SSL双向认证是通过配置Keystore、Truststore,修改Tomcat的服务器配置,并确保客户端正确配置来实现的。这一过程增强了服务器与客户端之间的通信安全性,对于保护敏感数据传输尤其重要。

    SSL双向认证.rar

    SSL(Secure Sockets Layer)是一种广泛使用的网络安全协议,它的...通过理解以上概念,你可以更好地理解SSL双向认证的工作原理,并能根据提供的易语言源码进行学习和实践,从而掌握如何在实际应用中实现这一安全机制。

    IOS,Android SSL双向认证HTTPS方式请求及配置证书

    本文将详细介绍如何在`iOS`和`Android`应用中实施SSL双向认证以及配置证书。 一、SSL/TLS协议基础 SSL/TLS协议的主要目标是为网络通信提供加密处理,以防止第三方窃取或篡改信息。HTTPS是HTTP协议与SSL/TLS的结合,...

    SSl双向认证学习笔记  .doc

    SSL双向认证学习笔记 本文档主要介绍SSL双向认证的一些知识,涵盖了基础知识、keytool命令、...SSL双向认证学习笔记涵盖了基础知识、keytool命令、openssl安装等方面,旨在帮助读者了解SSL双向认证的原理和实现方法。

    SSL双向认证

    ### SSL双向认证详解 #### 一、SSL协议概述 SSL(Secure Sockets Layer,安全套接层)协议是一种用于提供互联网通信安全的标准协议。它主要应用于保护网站与用户之间的数据交换,确保敏感信息如个人隐私、银行账户...

    Netty双向认证以及白名单证书验证

    本篇文章将深入探讨如何利用Netty实现HTTPS的双向认证(也称为SSL/TLS的客户端身份验证)以及白名单证书验证。 首先,我们需要理解HTTPS的工作原理。HTTPS基于HTTP协议,通过SSL/TLS层提供加密传输和服务器身份验证...

    SSL&TLS认证原理详解

    本文将深入探讨SSL/TLS的认证原理,包括加密方式、SSL/TLS的作用以及历史发展。 首先,加密方式是理解SSL/TLS工作原理的基础。对称加密是一种高效且简单的加密手段,使用相同的密钥进行加密和解密,但因为密钥的...

    android https 双向验证

    首先,双向验证的基本原理是:客户端不仅需要验证服务器的证书,服务器也需要验证客户端的身份。这通常通过客户端证书来实现,服务器会检查客户端提供的证书是否来自可信任的证书颁发机构(CA)。 **1. 客户端证书...

    android访问自签CA的Https SSL双向认证(j2SE也能使用)

    本篇文章将深入探讨如何在Android应用中实现对自签CA的HTTPS SSL双向认证,并且这些实现方法同样适用于Java SE(J2SE)环境。 首先,我们需要了解HTTPS的基本原理。HTTPS是HTTP协议的安全版本,它通过SSL/TLS协议来...

    SSL工作原理详解

    综上所述,SSL工作原理涉及了加密算法的选择、密钥的协商、身份的验证、数据的加密和完整性保护等多个方面,通过这些机制共同作用,SSL能够在互联网上构建起一个安全的通信环境,保护用户的数据免受窃听和篡改。

    基于SSL的身份认证和访问控制实现原理.pdf

    SSL(Secure Sockets Layer,安全套接层)是一种广泛使用的网络协议,它为数据通信提供了加密和身份验证的功能,以保证互联网上数据传输的安全性。基于SSL的身份认证和访问控制是网络信息安全领域中的重要技术,它...

    WAS6.1配置双向SSL

    其中,双向SSL认证是一种重要的安全措施,它不仅能够验证客户端的身份,还能够确保数据传输的安全性。本文将详细介绍如何在WAS 6.1版本中配置双向SSL认证。 #### 二、准备工作 在进行双向SSL配置之前,需要准备以下...

Global site tag (gtag.js) - Google Analytics