HTTPS协议

协议原理

在“常用的通讯安全机制”一文中,介绍过摘要认证和签名认证,并在最后提到过,与外部通讯时,https协议是基础。

HTTPS的全称是Hypertext Transfer Protocol Over Secure Socket Layer,即基于SSL的超文本传输协议,由网景(Netscape)首创。HTTPS协议在传输层(TCP协议)和应用层(HTTP协议)之间增加了SSL/TLS协议,所有请求和响应数据在经过网络传输之前,都会先进行加密,然后再进行传输。依托SSL协议,HTTPS协议能够确保整个通信过程都是经过加密的,秘钥随机产生,并且能够通过数字证书验证通信双方的身份,以此来保障信息安全。其中证书包含了证书所代表一端的公钥,以及其他基本信息如机构名称、证书所作用域名、证书中的数字签名等,通过数字证书能够验证证书的真实性。通信时,用随机产生的秘钥对通信内容进行加密,然后再用证书中的公钥对秘钥进行加密,将通信内容和加密后的公钥一起发送。服务器端用私钥对加密后的密钥进行解密,得到原始密钥,并用原始密钥对通信内容进行解密。通过这样的方式来保证通信的安全,也使加密性能和时间成本可控。

HTTPS既支持单向认证,也支持双向认证。所谓的单向认证即只校验服务端证书,而双向认证则表示既校验服务端证书的有效性,同时又需要校验客户端的证书有效性。大部分情况,我们并不需要用到客户端证书,很多用户甚至没有客户端证书,但是在某些特定情形下,也可能会对客户端的证书进行校验。

SSL/TLS

SSL的全称是Secure Sockets Layer,即安全套接层。它是一种网络安全协议,目的是为了保障网络通信的安全,校验通信双方的身份,加密传输的数据。SSL在传输层与应用层之间进行数据通信的加密。
SSL协议的优势在于它与应用层协议独立无关,高层的应用层协议如HTTP、SSH、FTP等等,能透明的建立于SSL协议之上,在应用层通信之间就已经完成加密算法,通信密钥的协商以及服务端和客户端的认证工作,在此之后所有应用层协议所传输的数据都会被加密,从而保证通信的私密性。

TLS是IETF(国际互联网工程任务组)制定的一种新的协议,它建立在SSL 3.0协议规范之上,是SSL 3.0的后续版本。两者差别极小,可以理解为SSL 3.1,它是写入了RFC的。

SSL/TLS协议可以分为两层:
记录协议(Record Protocol),它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。
握手协议(Handshake Protocol),它建立在记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。

SSL握手协议十分复杂,对于普通开发人员来说,只需要关注如何才能以最简洁的方式接入SSL/TLS强大的安全保护能力,JSSE正是这样一个工具。

JSSE(Java Security Socket Extension)是Sun公司为了解决互联网信息安全传输而提出的一个解决方案,实现了SSL和TLS协议,包含了数据加密、服务器验证、消息完整性和客户端验证等技术。通过使用JSSE简洁的API,可以在客户端和服务端之间通过SSL/TLS协议安全地传输数据。

部署HTTPS WEB

HTTPS即支持单向认证,也支持双向认证,单向认证仅需要服务端提供证书即可,客户端通过服务端证书验证服务端身份;而双向认证既需要服务端提供服务端证书,又需要客户端提供客户端证书,需要同时验证服务端和客户端的身份,并对通信内容加密。

Tomcat单向认证配置

在另一篇blog数字证书与https协议有写,这里就不重复了。在通过浏览器访问时,只需要将服务器证书安装好之后就能通过https协议访问服务器了。如果使用httpclient工具来访问呢?需要在生成sslContext时调用.loadTrustMaterial来加载服务器证书的。具体实现可以参考另一篇blog:httpclient工具方法

Tomcat双向认证的配置

双向认证和单向认证的区别在于双向认证需要对客户端证书进行校验,这样通信的双方都可以通过证书对对方的身份进行校验,增加了通信的安全性。相较于单向认证的配置,双向认证需要在其基础上进行一些修改:
Tomcat的server.xml文件增加信任库配置,truststoreFile指向信任库地址,通过信任库中的根证书,服务端才能够对根证书签名的客户端证书进行识别,truststorePass指信任库密钥,truststoreType指信任库格式,并且启用客户端认证,将clientAuth设置为true。具体做法可按照参考资料2来进行。Java通过httpclient工具访问需要进行客户端验证的服务器可参考资料3。

随着互联网技术和电子商务的快速发展,HTTPS协议在业界已经得到了广泛的认可和使用,有效地保护了用户私密信息的安全。像网上银行、第三方支付等一些金融行业,更是离不开https协议,大部分银行的专业版都需要使用内置客户端证书的USB key才能进行操作,而像支付宝这类的第三方支付企业,在进行大额交易时也必须先下载客户端证书才能够进行后续操作。

参考资料:
1.《大型分布式网站架构设计与实践》,作者: 陈康贤。
2. https://www.cnblogs.com/ycliu912/articles/5408989.html。
3. https://www.cnblogs.com/jiaoyiping/p/5469660.html。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值