SSL-HTTPS与Java-Tomcat配置

Java安全通信:HTTPSSSL

HTTPS扫盲

1、HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),保护HTTP通信的安全通道, 简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSLSSL提供身份验证和加密通讯方法。

2、HTTPS 与 HTTP的区别

A.https协议需要到ca申请证书,一般免费证书很少,需要交费。

B.http超文本传输协议,信息是明文传输;https 则是具有安全性ssl加密传输协议。

C.httphttps使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443

D.http的连接是无状态的,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议

3HTTPS的作用

1.建立一个信息安全通道,来保证数据传输的安全 2.确认网站的真实性。

a.简单说HTTPS,就是服务器有一个证书。主要目的是保证服务器就是他声称的服务器;服务端和客户端之间的所有通讯,都是加密的。

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

c.所有的信息往来就都是加密的。第三方即使截获,他没有密钥,篡改也就没有什么意义

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

 

SSL简介

SSL (Secure Socket Layer) 用以保障在Internet上数据传输之安全,利用数据加密(Encryption)技术,可确保数据在网络上之传输过程中不会被截取及窃听。广泛地用于Web浏览器与服务器之间的身份认证和加密数据传输。SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。

SSL提供的服务

a.认证用户和服务器,确保数据发送到正确的客户机和服务器;

b.加密数据以防止数据中途被窃取;

c.维护数据的完整性,确保数据在传输过程中不被篡改。

 

SSL协议的握手过程

SSL 协议既用到了公钥加密技术(非对称加密)又用到了对称加密技术,对称加密技术虽然比公钥加密技术的速度快,可是公钥加密技术提供了更好的身份认证技术。SSL 的握手协议非常有效的让客户和服务器之间完成相互之间的身份认证,其主要过程如下:

[客户端]的浏览器向[服务器]传送客户端SSL 协议的版本号,加密算法的种类,产生的随机数,以及其他服务器和客户端之间通讯所需要的各种信息。

[服务器][客户端]传送SSL 协议的版本号,加密算法的种类,随机数以及其他相关信息,同时服务器还将向客户端传送自己的证书。

客户利用服务器传过来的信息验证服务器的合法性,服务器的合法性包括:证书是否过期,发行服务器证书的CA 是否可靠,发行者证书的公钥能否正确解开服务器证书的发行者的数字签名,服务器证书上的域名是否和服务器的实际域名相匹配。如果合法性验证没有通过,通讯将断开;如果合法性验证通过,将继续进行第四步。

用户端随机产生一个用于后面通讯的对称密码,然后用服务器的公钥(服务器的公钥从步骤中的服务器的证书中获得)对其加密,然后传给服务器。

服务器用私钥解密对称密码(此处的公钥和私钥是相互关联的,公钥加密的数据只能用私钥解密,私钥只在服务器端保留。详细请参看: http://zh.wikipedia.org/wiki/RSA%E7%AE%97%E6%B3%95),然后用其作为服务器和客户端的通话密码加解密通讯。同时在SSL 通讯过程中还要完成数据通讯的完整性,防止数据通讯中的任何变化。

客户端向服务器端发出信息,指明后面的数据通讯将使用的步骤中的主密码为对称密钥,同时通知服务器客户端的握手过程结束。

服务器向客户端发出信息,指明后面的数据通讯将使用的步骤中的主密码为对称密钥,同时通知客户端服务器端的握手过程结束。

SSL 的握手部分结束,SSL 安全通道的数据通讯开始,客户和服务器开始使用相同的对称密钥进行数据通讯,同时进行通讯完整性的检验。

  

 

 

认证、数字证书和PKI解决的几个问题

  保密性 只有收件人才能阅读信息。

  认证性 确认信息发送者的身份。

  完整性 信息在传递过程中不会被篡改。

  不可抵赖性 发送者不能否认已发送的信息。

 

 

配置服务器端证书

Java提供相对简单的被称为keytool的命令行工具,可以简单地产生自己签名的证书。

 

Java实现 SSL认证 (单向,双向)

 

1)生成服务端私钥,并且导入到服务端KeyStore文件中
keytool -genkey -alias serverkey -keystore kserver.keystore
过程中,分别需要填写,根据需求自己设置就行
keystore密码:123456 
名字和姓氏:jin
组织单位名称:none
组织名称:none
城市或区域名称:BJ
州或省份名称:BJ
国家代码:CN
serverkey私钥的密码,不填写和keystore的密码一致。这里千万注意,直接回车就行了,不用修改密码。否则在后面的程序中以及无法直接应用这个私钥,会报错。

就可以生成kserver.keystore文件 
server.keystore是给服务端用的,其中保存着自己的私钥

2)根据私钥,导出服务端证书
keytool -export -alias serverkey -keystore kserver.keystore -file server.crt
server.crt就是服务端的证书

3)将服务端证书,导入到客户端的Trust KeyStore
keytool -import -alias serverkey -file server.crt -keystore tclient.keystore
tclient.keystore是给客户端用的,其中保存着受信任的证书

采用同样的方法,生成客户端的私钥,客户端的证书,并且导入到服务端的Trust KeyStore
1keytool -genkey -alias clientkey -keystore kclient.keystore
2keytool -export -alias clientkey -keystore kclient.keystore -file client.crt
3keytool -import -alias clientkey -file client.crt -keystore tserver.keystore

如此一来,生成的文件分成两组
服务端保存:kserver.keystore tserver.keystore
客户端保存:kclient.keystore  tclient.kyestore

 

 

参数说明:

-genkey 表示要创建一个新的密钥 

-dname 表示密钥的Distinguished Names(用于表明密钥的发行者身份)

    CN=commonName (普通名称)

    OU=organizationUnit (组织单元)

    O=organizationName (组织名称)

    L=localityName (地点)

    S=stateName (州名)

    C=country (国家名)

-keyalg 使用加密的算法,这里是RSA

-alias 密钥的别名

-keypass 私有密钥的密码,这里设置为123456

-keystore 密钥保存在C:\下的.jks文件中

-storepass 存取密码,这里设置为123456,这个密码提供系统从.keystore文件中将信息取出,keystore密码

-validity 该密钥的有效期为 3600

-storetype 证书格式PKCS12

 

 

Tomcat配置

server.xml

 <Connector port="443" protocol="org.apache.coyote.http11.Http11Protocol"

               maxThreads="150" SSLEnabled="true" scheme="https" secure="true"

               clientAuth="false" sslProtocol="TLS"

   keystoreFile="E:\kserver.keystore"

   keystorePass="123456" 

   />

 

应用的web.xml 

将 URL 映射设为 /* ,这样你的整个应用都要求是 HTTPS 访问,而 transport-guarantee 标签设置为 CONFIDENTIAL 以便使应用支持 SSL

    <security-constraint>

        <web-resource-collection>

            <web-resource-name>securedapp</web-resource-name>

            <url-pattern>/*</url-pattern>

        </web-resource-collection>

        <user-data-constraint>

            <transport-guarantee>CONFIDENTIAL</transport-guarantee>

        </user-data-constraint>

    </security-constraint>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值