Java HTTPS请求

 

区别

  http协议是明文传输,https是加密传输

 

作用

  它的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。

 

原理

  a. 一般意义上的https,就是服务器有一个证书。主要目的是保证服务器就是他声称的服务器,这个跟第一点一样;服务端和客户端之间的所有通讯,都是加密的。

  b. 具体讲,是客户端产生一个对称的密钥,通过服务器的证书来交换密钥,即一般意义上的握手过程。

  c. 接下来所有的信息往来就都是加密的。第三方即使截获,也没有任何意义,因为他没有密钥,当然篡改也就没有什么意义了。

  d.少许对客户端有要求的情况下,会要求客户端也必须有一个证书。

这里客户端证书,其实就类似表示个人信息的时候,除了用户名/密码,还有一个CA 认证过的身份。因为个人证书一般来说是别人无法模拟的,所有这样能够更深的确认自己的身份。目前少数个人银行的专业版是这种做法,具体证书可能是拿U盘(即U盾)作为一个备份的载体。

 

加密过程:

 

       在https的通信过程中,组合使用了公用密钥方式加密和共享密钥方式加密这两种技术。公用密钥方式要比共享密钥方式慢得多,因此使用公用密钥来完成共享密钥的交换。公用密钥是从证书中获得的。拿到共享密钥之后,所有的内容之间的通信都会使用共享密钥来进行加密和解密。公用密钥的作用就是为了安全的交换共享密钥,共享密钥是用来通信内容的加密和解密。这样既确保了通信之间的安全,也确保了加密和解密的效率。

 

制作:

C:\Program Files\Java\jdk1.7.0_71\bin>keytool -v -genkeypair -alias tomcat -keya

lg RSA -keystore d:/tomcat.keystore -validity 36500

输入密钥库口令:

再次输入新口令:

您的名字与姓氏是什么? (必须与域名一致如:baidu.com

  [Unknown]:  xiaoxiao

您的组织单位名称是什么?

  [Unknown]:  daxiao

您的组织名称是什么?

  [Unknown]:  xiao

您所在的城市或区域名称是什么?

  [Unknown]:  beijing

您所在的省/市/自治区名称是什么?

  [Unknown]:  daxing

该单位的双字母国家/地区代码是什么?

  [Unknown]:  cn

CN=xiaoxiao, OU=daxiao, O=xiao, L=beijing, ST=daxing, C=cn是否正确?

  [否]:  y

正在为以下对象生成 2,048 位RSA密钥对和自签名证书 (SHA256withRSA) (有效期为 36,50

0 天):

         CN=xiaoxiao, OU=daxiao, O=xiao, L=beijing, ST=daxing, C=cn

输入 <tomcat> 的密钥口令

        (如果和密钥库口令相同, 按回车):

[正在存储d:/tomcat.keystore]

 

创建自签名证书:

 

输入创建keystore时输入的密码

将证书导出

keytool -export -alias tomcat -keystore d:\tomcat.keystore -storepass 123456 -rfc -file d:\tomcat.cer

双击此证书进行安装,证书存储:“受信任的根证书颁发机构”

 此安装可以让本地可以被信任,但是换别的机器依然不行,所以上线后服务器的证书必须是购买

 

配置tomcat文件:

 

 server.xml

    <Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
               maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS"
               keystoreFile="D:\tomcat.keystore"
               keystorePass="zhang1214"
               ciphers="TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA"
                />

 ciphers属性:机密级别

 web.xml

    让所有的请求都走https

<security-constraint> 
       <web-resource-collection > 
              <web-resource-name >SSL</web-resource-name> 
              <url-pattern>/*</url-pattern> 
       </web-resource-collection>
                             
       <user-data-constraint> 
              <transport-guarantee>CONFIDENTIAL</transport-guarantee> 
       </user-data-constraint> 
</security-constraint>

 双向:

http://jingyan.baidu.com/article/0f5fb099f1f9566d8334ea38.html

猜你喜欢

转载自flyouwith.iteye.com/blog/2258195