SSL-HTTPS与Java-Tomcat配置
2014-04-24 11:32
204 查看
Java安全通信:HTTPS与SSL
HTTPS扫盲
1、HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),保护HTTP通信的安全通道, 简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。SSL提供身份验证和加密通讯方法。2、HTTPS 与 HTTP的区别
A.https协议需要到ca申请证书,一般免费证书很少,需要交费。
B.http是超文本传输协议,信息是明文传输;https 则是具有安全性的ssl加密传输协议。
C.http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
D.http的连接是无状态的,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议。
3、HTTPS的作用
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中
1)keytool -genkey -alias clientkey -keystore kclient.keystore
2)keytool -export -alias clientkey -keystore kclient.keystore -file client.crt
3)keytool -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 |
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" /> |
将 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> |
相关文章推荐
- SSL-HTTPS与Java-Tomcat配置
- java tomcat https 配置
- javaweb-day04-5(javaWeb开发入门 - tomcat体系架构、配置https加密连接器)
- linux apache Tomcat配置SSL(https)步骤
- windows和linux下配置tomcat的https通信(ssl单向认证)
- 修改端口Tomcat配置https协议、以及http协议自动REDIRECT到HTTPS-java教程
- Tomcat 7 SSL 配置HTTP自动跳转到HTTPS
- centos中tomcat配置ssl,用于iphone手机https下载自动安装
- 详解 Nginx + Tomcat HTTPS/SSL 配置方法
- tomcat配置ssl,https
- 在 Tomcat 中配置 SSL/TLS 以支持 HTTPS
- JAVA 发送 Https 请求 及 在webLogin和tomcat下的配置
- 详解 Nginx + Tomcat HTTPS/SSL 配置
- 本地Tomcat配置ssl 实现https访问
- Tomcat6 配置HTTPS SSL 发布Axis2 webservice
- 在 Tomcat 中配置 SSL/TLS 以支持 HTTPS
- 详解 Nginx + Tomcat HTTPS/SSL 配置方法
- Tomcat配置Https (SSL)
- 在 Tomcat 中配置 SSL/TLS 以支持 HTTPS
- tomcat配置ssl,https