HTTPS安全协议的原理及配置使用
2015-12-06 19:21
447 查看
HTTPS原理
客户端向服务器发送请求
服务器向客户端发送自己的证书
客户端验证证书的有效性(是否是可信用机构CA颁发的证书,如果不是则提出警告)并对比里面信息是否正确,不通过则立刻断开连接
向服务器端发送自己的证书及支持的加密算法列表
服务器端验证客户证书的有效性,并选择加密程度最高的加密算法,用客户的公钥加密后发给客户端
客户端用自己的私钥解密得到要使用的加密算法,然后随机产生主密码key在用服务器端的公钥对其加密并发送
服务器用自己的私钥解密获取主密码
以后发送的信息都通过对称加密进行加密通信
Https有单向和双向验证,它们的区别
单向认证只要求站点部署了ssl证书就行,任何用户都可以去访问(IP被限制除外等),只是服务端提供了身份认证。而双向认证则是需要是服务端需要客户端提供身份认证,只能是服务端允许的客户能去访问,安全性相对于要高一些
双向认证SSL 协议的具体通讯过程,这种情况要求服务器和客户端双方都有证书。 单向认证SSL 协议不需要客户端拥有CA证书,以及在协商对称密码方案,对称通话密钥时,服务器发送给客户端的是没有加过密的(这并不影响SSL过程的安全性)密码方案。这样,双方具体的通讯内容,就是加密过的数据。如果有第三方攻击,获得的只是加密的数据,第三方要获得有用的信息,就需要对加密的数据进行解密,这时候的安全就依赖于密码方案的安全。而幸运的是,目前所用的密码方案,只要通讯密钥长度足够的长,就足够的安全。这也是我们强调要求使用128位加密通讯的原因。
一般Web应用都是采用单向认证的,原因很简单,用户数目广泛,且无需做在通讯层做用户身份验证,一般都在应用逻辑层来保证用户的合法登入。但如果是企业应用对接,情况就不一样,可能会要求对客户端(相对而言)做身份验证。这时就需要做双向认证。
Tomcat配置单向Https
1.使用jdk中的keytool工具产生证书库文件,并复制到tomcat的conf目录下
2.修改tomcat的server.xml文件(keystoreFile可以通过相对路径指定)
3.配置需要强制使用https协议的url
客户端向服务器发送请求
服务器向客户端发送自己的证书
客户端验证证书的有效性(是否是可信用机构CA颁发的证书,如果不是则提出警告)并对比里面信息是否正确,不通过则立刻断开连接
向服务器端发送自己的证书及支持的加密算法列表
服务器端验证客户证书的有效性,并选择加密程度最高的加密算法,用客户的公钥加密后发给客户端
客户端用自己的私钥解密得到要使用的加密算法,然后随机产生主密码key在用服务器端的公钥对其加密并发送
服务器用自己的私钥解密获取主密码
以后发送的信息都通过对称加密进行加密通信
Https有单向和双向验证,它们的区别
单向认证只要求站点部署了ssl证书就行,任何用户都可以去访问(IP被限制除外等),只是服务端提供了身份认证。而双向认证则是需要是服务端需要客户端提供身份认证,只能是服务端允许的客户能去访问,安全性相对于要高一些
双向认证SSL 协议的具体通讯过程,这种情况要求服务器和客户端双方都有证书。 单向认证SSL 协议不需要客户端拥有CA证书,以及在协商对称密码方案,对称通话密钥时,服务器发送给客户端的是没有加过密的(这并不影响SSL过程的安全性)密码方案。这样,双方具体的通讯内容,就是加密过的数据。如果有第三方攻击,获得的只是加密的数据,第三方要获得有用的信息,就需要对加密的数据进行解密,这时候的安全就依赖于密码方案的安全。而幸运的是,目前所用的密码方案,只要通讯密钥长度足够的长,就足够的安全。这也是我们强调要求使用128位加密通讯的原因。
一般Web应用都是采用单向认证的,原因很简单,用户数目广泛,且无需做在通讯层做用户身份验证,一般都在应用逻辑层来保证用户的合法登入。但如果是企业应用对接,情况就不一样,可能会要求对客户端(相对而言)做身份验证。这时就需要做双向认证。
Tomcat配置单向Https
1.使用jdk中的keytool工具产生证书库文件,并复制到tomcat的conf目录下
keytool -genkey -v -alias tomcat -keyalg RSA -keystore D:/SSL/server/tomcat.keystore -dname "CN=localhost,OU=zlj,O=zlj,L=Peking,ST=Peking,C=CN" -validity 3650 -storepass 123456 -keypass 123456
2.修改tomcat的server.xml文件(keystoreFile可以通过相对路径指定)
<Connector port="8443" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" disableUploadTimeout="true" acceptCount="100" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystoreFile="conf/tomcat.keystore" keystorePass="123456" />
3.配置需要强制使用https协议的url
<!-- 强制SSL配置,即普通的请求也会重定向为SSL请求 --> <security-constraint> <web-resource-collection> <web-resource-name>SSL</web-resource-name> <url-pattern>/service/*</url-pattern><!-- 全站使用SSL <url-pattern>/*</url-pattern>--> </web-resource-collection> <user-data-constraint> <description>SSL required</description> <!-- CONFIDENTIAL: 要保证服务器和客户端之间传输的数据不能够被修改,且不能被第三方查看到 --> <!-- INTEGRAL: 要保证服务器和client之间传输的数据不能够被修改 --> <!-- NONE: 指示容器必须能够在任一的连接上提供数据。(即用HTTP或HTTPS,由客户端来决定)--> <transport-guarantee>CONFIDENTIAL</transport-guarantee> </user-data-constraint> </security-constraint>
相关文章推荐
- Linux系统基础网络配置老鸟精华篇 【转】
- 黑马程序员—javaSE—网络编程
- 4-5 UVA1590 IP网络(IP Networks)
- iOS Socket编程-C语言版(TCP)
- 【Android】网络状态获取工具
- 《图解tcp/ip》读书笔记(一)
- http响应状态码
- 神经网络(11)--具体实现:unrolling parameters
- Android---利用android-async-http开源项目返回json数据
- nginx学习(五) http模块
- Http之Get/Post请求区别
- FFMPEG采集摄像头数据并切片为iPhone的HTTP Stream流
- Linux多线程网络编程(一)
- TCP 流协议和消息分帧的理解
- uva 563 - Crimewave 网络流
- HDU 3338 Kakuro Extension 网络流
- 网络电话语音通话的android实现
- HttpServletRequest常用获取URL相关的方法
- Linux网络流量控制工具—Netem(可用于网络故障注入)
- <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>标签再使用时报错