SSL/TLS证书是用于用户浏览器和网站服务器之间的数据传输加密,实现互联网传输安全保护,大多数情况下指的是服务器证书。服务器证书是用于向浏览器客户端验证服务器,这种是属于单向认证的SSL证书。但是,如果服务器需要对客户端进行身份验证,该怎么办?这就需要双向认证证书。

为什么需要另一种认证方式的证书?因为当同时使用两种认证方式的证书时,有助于双方(即客户端和服务器端)之间的相互认证。另外,与标准SSL证书不同的是,双向认证的SSL证书实际上被称作为个人认证证书(PAC)

在了解SSL证书的两种认证方式之前,您必须先要了解如何创建HTTPS连接的。

SSL身份验证的工作原理

  • 网站所有者为其网站域名购买SSL证书,CA遵循国际行业验证标准对申请人身份和域名所有权进行验证。验证成功后,CA为该域名颁发SSL证书。
  • 网站所有者将CA机构颁发的SSL证书公钥和私钥都安装到网站服务器上。
  • 当客户端浏览器提交HTTPS请求,将进行SSL握手
  • SSL握手结束后,浏览器将生成会话密钥,并使用服务器SSL / TLS证书中的公钥对会话密钥进行加密。
  • 会话密钥发送到服务器后,服务器使用相应的私钥对会话密钥解密。
  • 客户端浏览器与服务器双方利用这个会话密钥加密解密传输过程的所有数据。

之所以在上述过程中强调“ SSL握手”一词,是因为在单向认证和双向认证流程中,只有使用的证书类型和SSL握手过程本身不同,而所有其他步骤是一样的。

现在,在了解了SSL基础知识后,我们再进一步探讨单向认证SSL和双向认证的含义和工作过程。

如何使用常规的SSL证书进行单向认证?

什么是单向认证SSL证书?

在所有通信中,涉及两个端点,即浏览器和它所连接的网站(即客户端和服务器)。 在单向SSL身份认证过程中,仅验证一个端点(服务器)的身份。 当您尝试打开网站时,您的浏览器会通过检查网站的SSL证书来验证网站服务器的合法性。单向认证SSL证书也称为服务器身份认证证书。

SSL单向认证流程

在整个SSL握手流程中,仅仅单向验证了服务器的SSL证书。因此,这个单向认证过程使客户端浏览器可以连接到正确的网站服务器,并且仅通过安全连接将所有数据传输到目标站点。

接下来,我们再了解双向认证的相关知识。

如何使用个人认证证书进行双向认证?

什么是双向认证证书?

双向认证是指在SSL握手过程中将同时验证客户端和服务器的身份,所以双向认证SSL证书至少包括两个或两个以上的证书,一个是服务器证书,另一个或多个是客户端证书(即个人认证证书)。

双向认证流程

双向认证SSL握手过程与单向认证有所不同。大部分步骤与单向认证过程一样,但是,当客户端成功验证服务器后,会增加服务器验证客户端的流程步骤,具体如下图红色标注所示:

正如您所见,双向认证过程中,SSL握手多了两个步骤,也就是多了服务器验证客户端身份的流程。

双向认证的必备条件

  • 私钥
  • 个人认证证书
  • CA根证书
  • CA中间证书(非所有情况下必需)

有了以上必备东西,当客户端验证服务器身份后,服务器才能验证客户端身份。双方都有自己独立的SSL证书,而且这些证书必须是由受信任的第三方CA机构颁发的。

为什么需要双向认证SSL证书?

了解了单向认证和双向认证在SSL握手过程中的不同后,新的问题出现了:为什么需要双向认证证书?网站使用双向认证将选择哪些客户端与其进行安全通信?

因为双向认证需要服务器和客户端提供身份认证,只能是服务器允许的客户方能访问,安全性相对于高一些。所以需要做双向认证的SSL证书多数是企业,尤其是像金融行业等对安全性要求较高的企业。

比如,一个企业有自己的内部网站,该网站主要是用于员工查询信息和官方事务交流的。他们不希望任何人都可以这样自由访问内部网站。这种情况下,就可以选择使用双向认证的SSL证书验证客户端身份,然后再让他们访问网站。如此一来,企业可避免网络犯罪分子和僵尸程序进入该内部网站,降低不安全性风险。

总的来说,一般Web应用都是采用SSL单向认证的,用户数自由无限制,且无需在通讯层对用户身份进行验证,一般都在应用逻辑层来保证用户的合法登入。但如果是企业应用对接,数据信息相对较多且复杂,可能会要求对客户端做身份验证,这时就需要做SSL双向认证,这也是保护公司内部数据信息的最好的方法。

最新文章

  1. Redis系列四之复制
  2. HTTP状态码查询
  3. linux上安装配置vsftpd
  4. Github 与Git pages
  5. Windows下为64位的python3.4.3安装numpy
  6. Cocos2d-x坐标系介绍
  7. python基础:搜索路径
  8. 调用webservice查询手机号码归属地信息
  9. 如何查看windows操作系统当前使用的字符集
  10. 如何解决设置Session保存在StateServer后引起WebService/WebMethod无法异步获取Session
  11. POJ Farm Tour
  12. spring sts 从数据库中反向生成实体类
  13. Spring 通过来AOP 实现前置,环绕,异常通知,注解(转)
  14. 笔记本win10关机异常解决
  15. php curl_setopt的相关设置查询手册
  16. 基于Accord.Audio和百度语言识别
  17. c/c++ 数组 数组的引用,指针数组的引用
  18. (网页)js每隔5分钟执行一次ajax请求的实现方法(转)
  19. zoj 月赛B题(快速判断一个大数是否为素数)
  20. <NET CLR via c# 第4版>笔记 第17章 委托

热门文章

  1. Unknown CMake command
  2. 7 apache和nginx的区别
  3. npm的命令参数 --save-dev和 --save两者有什么区别?
  4. 纯CSS实现3D正方体动画效果
  5. 强迫自己学Jquery
  6. W3C中不同标准的含义
  7. VMware虚拟机 - 如何让鼠标从虚拟机中返回到个人计算机中
  8. 了解LockSupport工具类
  9. Python _PyQt5 【总】
  10. 建议收藏,从零开始创建一个Activiti工作流,手把手教你完成