Java Tomcat SSL 服务端/客户端双向认证(一)

一、什么是SSL

    SSL (Secure Sockets Layer) is a standard security technology for establishing an encrypted link between a server and a client—typically a web server (website) and a browser, or a mail server and a mail client (e.g., Outlook).

    

传输层安全协议(英语:Transport Layer Security,缩写TLS),及其前身安全套接层(Secure Sockets Layer,缩写SSL)是一种安全协议,目的是为互联网通信,提供安全及数据完整性保障。网景公司(Netscape)在1994年推出首版网页浏览器网景导航者时,推出HTTPS协议,以SSL进行加密,这是SSL的起源。IETF将SSL进行标准化,1999年公布了第一版TLS标准文件。随后又公布了 RFC 5246(2008年8月)与 RFC 6176 (2011年3月)。在浏览器电子邮件即时通信VoIP网络传真等应用程序中,广泛支持这个协议。主要的网站,如GoogleFacebook等也以这个协议来创建安全连接,发送数据。目前已成为互联网上保密通讯的工业标准。

SSL包含记录层(Record Layer)和传输层,记录层协议确定了传输层数据的封装格式。传输层安全协议使用X.509认证,之后利用非对称加密演算来对通信方做身份认证,之后交换对称密钥作为会谈密钥(Session key)。这个会谈密钥是用来将通信两方交换的数据做加密,保证两个应用间通信的保密性和可靠性,使客户与服务器应用之间的通信不被攻击者窃听。

二、双向认证

    1、客户端认证。

        客户端通过浏览器访问某一网站时,如果该网站为HTTPS网站,浏览器会自动检测系统中是否存在该网站的信任证书,如果没有信任证书,浏览器一般会拒绝访问,IE会有一个继续访问的链接,但地址栏是红色,给予用户警示作用,即客户端验证服务端并不是强制性的,可以没有服务端的信任证书,当然是否继续访问完全取决于用户自己。如何去除地址栏的红色警告呢?后续会介绍导入服务端证书到浏览器的方法。

    2、服务器端认证。

        服务端需要获取到客户端通过浏览器发送过来的认证证书,该证书在服务端的证书库中已存在,仅仅是个匹配过程,匹配成功即通过认证,可继续访问网站资源,反之则无法显示网页

三、证书制作 

相关连接:http://www.cnblogs.com/xdp-gacl/p/3750965.html

基本逻辑:
1、生成服务端密钥库并导出证书;
2、生成客户端密钥库并导出证书;
3、根据服务端密钥库生成客户端信任的证书;
4、将客户端证书导入服务端密钥库;
5、将服务端证书导入浏览器。

注意:服务端的密钥库参数“CN”必须与服务端的IP地址相同,否则会报错,客户端的任意。

使用java自带keytool生成密钥库和证书:

1、生成服务器证书库
keytool -validity 365 -genkey -v -alias server -keyalg RSA -keystore S:\ssl\server.keystore -dname "CN=127.0.0.1,OU=icesoft,O=icesoft,L=Haidian,ST=Beijing,c=cn" -storepass 123456 -keypass 123456

2、生成客户端证书库

keytool -validity 365 -genkeypair -v -alias client -keyalg RSA -storetype PKCS12 -keystore S:\ssl\client.p12 -dname "CN=client,OU=icesoft,O=icesoft,L=Haidian,ST=Beijing,c=cn" -storepass 123456 -keypass 123456

3、从客户端证书库中导出客户端证书
keytool -export -v -alias client -keystore S:\ssl\client.p12 -storetype PKCS12 -storepass 123456 -rfc -file S:\ssl\client.cer

keytool -export -v -alias client -keystore S:\ssl\client.p12 -storetype PKCS12 -storepass 123456 -rfc -file S:\ssl\client.crt

4、从服务器证书库中导出服务器证书

keytool -export -v -alias server -keystore S:\ssl\server.keystore -storepass 123456 -rfc -file S:\ssl\server.cer

5、生成客户端信任证书库(由服务端证书生成的证书库生成,后面会用到这个文件)

keytool -import -v -alias server -file S:\ssl\server.cer -keystore S:\ssl\client.truststore -storepass 123456

6、将客户端证书导入到服务器证书库(使得服务器信任客户端证书)

keytool -import -v -alias client -file S:\ssl\client.cer -keystore S:\ssl\server.keystore -storepass 123456

最后创建的文件如下:

转载于:https://my.oschina.net/zhengweishan/blog/775322

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值