HTTPS安全协议的原理及配置使用

来源:互联网 发布:求生之路2游侠网络联机 编辑:程序博客网 时间:2024/06/05 03:54

HTTPS原理

  1. 客户端向服务器发送请求
  2. 服务器向客户端发送自己的证书
  3. 客户端验证证书的有效性(是否是可信用机构CA颁发的证书,如果不是则提出警告)并对比里面信息是否正确,不通过则立刻断开连接
  4. 向服务器端发送自己的证书及支持的加密算法列表
  5. 服务器端验证客户证书的有效性,并选择加密程度最高的加密算法,用客户的公钥加密后发给客户端
  6. 客户端用自己的私钥解密得到要使用的加密算法,然后随机产生主密码key在用服务器端的公钥对其加密并发送
  7. 服务器用自己的私钥解密获取主密码
  8. 以后发送的信息都通过对称加密进行加密通信

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>
0 0
原创粉丝点击