Https协议要点:
- Https协议原理
- SSL、TLS
- 部署Https Web
Https协议原理
摘要认证和签名认证能够解决信息传输两端的验证问题,但是对于一些敏感信息(用户名、密码、个人隐私数据)还是无法保障安全,因为这些信息在http协议下是以明文形式传输,存在被拦截的风险。
https协议的全称基于SSL的http协议,就是http的安全版。https协议栈如下:
即https协议是在Http应用层与TCP传输层间加了一层安全层,信息在传输之前先经过SSL或TLS安全层加密,然后再传输,这样第三方就算拦截了信息也是加密后的密文,无法解密就没法利用。通常证书保存在应用服务端机器上。
SSL、TLS
SSL全称Secure Sockets Layer,即安全套接层,一种网络安全协议。与应用层协议无关,建立在TCP层之上,因此传输前就已经完成了加密算法、通信密钥协商、服务端客户端认证等工作,保障通信的私密性。
SSL的继任者TLS全称Transport Layer Security,传输层安全协议,基于SSL协议的通用化协议,逐步将取代SSL。
SSL协议分为两层:
- Record Protocol,记录协议;
- Handshake Protocol,握手协议;
记录协议主要提供数据封装、加密解密、压缩、校验等功能;握手协议主要进行加密算法协商、密钥交换、认证等。
具体的过程本文不做介绍,想了解的去看书。
Java也提供了SSL开发的解决方案JSSE(Java Security Socket Extension),里面有丰富的API来完成SSL的使用,常见的几个如:SSLContext、SSLSocket、SSLServerSocket与Socket请求响应区别并不大。
部署Https Web
1、Tomcat单向认证部署
单向认证即客户端通过服务端证书验证服务端身份,仅需服务端证书。
修改tomcat配置
cd tomcat/conf
vi server.xml
样例如下,找到https配置这行:
1 <!--
2 <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
3 maxThreads="150" scheme="https" secure="true"
4 clientAuth="false" sslProtocol="TLS" />
5 -->
去掉注释,修改为:
1 <Connector port="443" protocol="HTTP/1.1" SSLEnabled="true"
2 maxThreads="150" scheme="https" secure="true"
3 clientAuth="false" sslProtocol="TLS"
4 keystoreFile="g:\tomcat.keystore"
5 keystorePass="123456"
6 keystoreType="pkcs12"/>
指定单向认证,证书路径、密码、格式。如果443端口未开启,则需要手动开启,可能需要安装authbind。
配置完后启动tomcat即可,打开网页提示证书不被信任,将证书导入浏览器,然后配置host即可。
2、Tomcat双向认证部署
双向认证即客户端通过服务端证书验证服务端身份,服务端也要验证客户端身份,需要存在两份证书。
1 <!--
2 <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
3 maxThreads="150" scheme="https" secure="true"
4 clientAuth="false" sslProtocol="TLS" />
5 -->
去掉注释,修改为:
1 <Connector port="443" protocol="HTTP/1.1" SSLEnabled="true"
2 maxThreads="150" scheme="https" secure="true"
3 clientAuth="true" sslProtocol="TLS"
4 keystoreFile="g:\tomcat.keystore"
5 keystorePass="123456"
6 keystoreType="pkcs12"
7 truststoreFile="g:\tomcat.keystore"
8 truststorePass="123456"
9 truststoreType="jks"/>
双向认证需要开启客户端认证clientAuth=true,然后指定服务端证书路径、密码、格式,信任库地址,利用信任库地址中的根证书,服务端才能客户端证书进行识别。如果443端口未开启,则需要手动开启,可能需要安装authbind。
配置完后启动tomcat即可,浏览器需要导入客户端证书与私钥keystore。然后才能正常浏览网页。
安全级别在某些特殊场景,如大额转账等,为了更高级别安全,部分银行可能会给用户发USB key,USB key与网络隔离,线下保存。
总的来说https已经成为安全通信的工业标准。若文中的说法有问题,理解错误,欢迎大家指出。
参考资源
1、大型分布式网站构架设计与实践-page213