1、 SSL概述算法
SSL协议采用数字证书及数字签名进行双端实体认证,用非对称加密算法进行密钥协商,用对称加密算法将数据加密后进行传输以保证数据的保密性,而且经过计算数字摘要来验证数据在传输过程当中是否被篡改和伪造,从而为敏感数据的传输提供了一种安全保障手段。浏览器
SSL协议提供的服务主要有:安全
1)认证用户和服务器,确保数据发送到正确的客户机和服务器服务器
认证用户和服务器的合法性,使它们可以确信数据将被发送到正确的客户机和服务器上。客户机和服务器都有各自的识别号,这些识别号由公开密钥进行编号,为验证用户是否合法,SSL协议要求在握手交换数据时进行数字认证,以此确保用户的合法性。网络
2)加密数据以防止数据中途被窃取函数
SSL协议所采用的加密技术既有对称密钥技术,也有公开密钥技术。在客户机和服务器进行数据交换前,交换SSL初始握手信息,在SSL握手信息中采用了各类加密技术对其进行加密,以保证其机密性和数据的完整性,而且用数字证书进行鉴别,这样就能够防止非法用户进行破译。编码
3)维护数据的完整性,确保数据在传输过程当中不被改变加密
SSL协议采用Hash函数和机密共享的方法提供信息的完整性服务,创建客户机和服务器之间的安全通道,使全部通过SSL协议处理的业务在传输过程当中能所有完整准确无误的到达目的地。spa
SSL体系结构:命令行
SSL协议位于TCP/IP协议模型的网络层和应用层之间,使用TCP来提供一种可靠的端到端的安全服务,它是客户/服务器应用之间的通讯不被攻击窃听,而且始终对服务器进行认证,还能够选择对客户进行认证。SSL体系结构如图1所示。
在SSL通信中,首先采用非对称加密交换信息,使得服务器得到浏览器端提供的对称加密的密钥,而后利用该密钥进行通信过程当中信息的加密和解密。为了保证消息在传递过程当中没有被篡改,能够加密HASH编码来确保信息的完整性。SSL通信过程,如图2所示。
通常状况下,当客户端是保密信息的传递者时,客户端不须要数字证书验证本身身份的真实性,如电子银行的应用,客户须要将本身的帐号和密码发送给银行,所以银行的服务器须要安装数字证书来代表本身身份的有效性。在某些应用中,服务器端也须要对客户端的身份进行验证,这时客户端也须要安装数字证书以保证通信时服务器能够辨别出客户端的身份,验证过程相似于服务器身份的验证过程。
3、SSL Socket双向认证的实现
SSL Socket通讯是对Socket通讯的拓展。在Socket通讯的基础上添加了一层安全性保护,提供了更高的安全性,包括身份验证、数据加密以及完整性验证。
SSL Socket双向认证明现技术: JSSE(Java Security Socket Extension),它实现了SSL和TSL(传输层安全)协议。在JSSE中包含了数据加密,服务器验证,消息完整性和客户端验证等技术。经过使用JSSE,能够在客户机和服务器之间经过TCP/IP协议安全地传输数据。为了实现消息认证:
服务器端须要:
一、KeyStore: 其中保存服务器端的私钥
二、Trust KeyStore: 其中保存客户端的受权证书
客户端须要:
一、KeyStore:其中保存客户端的私钥
二、Trust KeyStore:其中保存服务端的受权证书
密钥和受权证书的生成方法:
使用Java自带的keytool命令,在命令行生成。
一、生成服务器端私钥kserver.keystore文件
keytool -genkey -alias serverkey -validity 1 -keystore kserver.keystore
二、根据私钥,导出服务器端安全证书
keytool -export -alias serverkey -keystore kserver.keystore -file server.crt
三、将服务器端证书,导入到客户端的Trust KeyStore中
keytool -import -alias serverkey -file server.crt -keystore tclient.keystore
四、生成客户端私钥kclient.keystore文件
keytool -genkey -alias clientkey -validity 1 -keystore kclient.keystore
五、根据私钥,导出客户端安全证书
keytool -export -alias clientkey -keystore kclient.keystore -file client.crt
六、将客户端证书,导入到服务器端的Trust KeyStore中
keytool -import -alias clientkey -file client.crt -keystore tserver.keystore
生成的文件分红两组,服务器端保存:kserver.keystore tserver.keystore 客户端保存:kclient.keystore tclient.kyestore(一般状况下,咱们也能够将对方的证书导入本身存放私匙的keystore中)。
身份验证的原理
客户端采用本身的私钥进行数据加密,发送给服务端,服务器端采用客户端的公匙(client.crt证书中存在)对数据解密,若是解密成功,证实消息来自可信的客户端,进行逻辑处理;
同理,服务器端采用kserver.keystore中的私钥进行数据加密,发送给客户端,客户端采用tclient.keystore中的server.crt证书对数据解密,若是解密成功,证实消息来自可信的服务器端,进行逻辑处理。若是解密失败,那么证实消息来源错误。不进行逻辑处理。
SSL Socket双向认证的安全性:
(1)能够确保数据传送到正确的服务器端和客户端。
(2)能够防止消息传递过程当中被窃取。
(3)防止消息在传递过程当中被修改.。
在系统运行中可能出现如下状况:
(1) 服务器端、客户端都持有正确的密钥和安全证书,此时服务器端和客户端能够进行正常通讯。
(2) 客户端的密钥和安全证书不正确,此时服务器端和客户端不能够进行正常通讯。
(3) 客户端未持有密钥和安全证书,此时服务器端和客户端也不能够进行正常通讯。