《安全网络通信》PPT课件.ppt
《《安全网络通信》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《安全网络通信》PPT课件.ppt(69页珍藏版)》请在三一办公上搜索。
1、Java网络程序设计,安全网络通信,SSL简介JSSE简介创建基于SSL的安全服务器和安全客户,主要内容,SSL简介,SSL(Server Socket Layer)是一种保证网络上的两个节点进行安全通信的协议。IETF(Internet Engineering Task Force)对SSL作了标准化,制订RFC2246规范,并将其称为TLS(Transport Layer Security)。从技术上讲,目前的TLS1.0与SSL3.0的差别非常微小。,SSL简介,建立在SSL协议上的HTTP被称为HTTPS协议。HTTP使用默认端口为80,而HTTPS使用默认端口为443。,SSL简介,
2、用户在网上商店购物,当输入信用卡信息,进行网上支付交易时,存在以下不安全因素:(1)信用卡信息在网络上传输时有可能被他人截获。(2)用户发送的信息在网络上传输时可能被非法篡改,数据完整性被破坏。(3)用户正在访问非法Web站点,专门从事网上欺诈活动,比如骗取客户的资金。,SSL采用加密技术实现安全通信,保证通信数据的保密性和完整性,并且保证通信双方可以验证对方的身份。,加密通信,数据从一端发送到另一端时,发送者先对数据加密,然后再把它发送给接收者。这样,在网络上传输的是经过加密的数据。如果有人在网络上非法截获这批数据,由于没有解密的密钥,就无法获得真正的原始数据。接收者接收到加密的数据后,先对
3、数据解密,然后再处理。,加密通信示意图,安全证书,除了对数据加密通信,SSL还采用身份认证机制,确保通信双方都可以验证对方的真实身份。SSL通过安全证书证明客户或服务器的身份。当客户通过安全连接和服务器通信时,服务器会先向客户出示它的安全证书,这个证书声明该服务器是安全的而且的确是这个服务器。,安全证书,每一个证书在全世界范围内都是惟一的,其他非法服务器无法假冒原始服务器的身份。可以把安全证书比作电子身份证。,获取安全证书的两种方式,方式一:从权威机构购买证书。方式二:创建自我签名的证书。,从权威机构获得证书,安全证书可以有效的保证通信双方的身份的可信性。安全证书采用加密技术制作,他人几乎无法
4、伪造。安全证书由国际权威的证书机构(CA,Certificate Authority)如VeriSign()和Thawte()颁发,它们保证证书的可信性。申请安全证书时,必须支付一定的费用。一个安全证书只对一个IP地址有效。,公钥加密,安全证书既包含用于加密数据的密钥,又包含用于证实身份的数字签名。安全证书采用公钥加密技术。公钥加密是指使用一对非对称的密钥进行加密或解密。每一对密钥由公钥和私钥组成。公钥被广泛发布。私钥是隐密的,不公开。用公钥加密的数据只能够被私钥解密。反过来,使用私钥加密的数据只能被公钥解密。,创建自我签名证书,某些场合下,通信双方只关心数据在网络上可以安全传输,并不需要对方
5、进行身份验证。这种情况下,可以创建自我签名(self-assign)的证书,比如通过Sun公司提供的keytool工具就可以创建这样的证书。,制作证书的工具keytool,JDK1.4以上版本中包含这一工具,它的位置为:binkeytool.exe,此外,也可以到以下站点单独下载keytool:通过keytool工具创建证书的命令为:keytool-genkey-alias mystore-keyalg RSA-keystore C:test.keys,keytool命令将生成包含一对非对称密钥和自我签名的证书,命令中参数的意思:genkey:生成一对非对称密钥。alias:指定密钥对的别名,
6、该别名是公开的。keyalg:指定加密算法,本例中采用通用的RSA算法。keystore:指定安全证书的存放路径。,SSL握手,客户与服务器通信时,首先要进行SSL握手。SSL握手主要完成:(1)协商使用的加密套件。加密套件中包括一组加密参数,这些参数指定加密算法和密钥的长度等信息。(2)验证对方的身份。此操作是可选的。(3)确定使用的加密算法。,SSL简介JSSE简介创建基于SSL的安全服务器和安全客户,主要内容,JSSE(Java Secure Socket Extension),JSSE封装底层复杂的安全通信细节,使开发人员能方便的利用它开发安全的网络应用程序。,JSSE主要包括四个包:
7、包:包括进行安全通信的类,如SSLServerSocket和SSLSocket类。(2)包:包括安全套接字的工厂类,如SSLServerSocketFactory和SSLSocketFactory类。包:包括处理安全证书的类,如X509Certificate类。X.509是由国际电信联盟(ITU-T)制定的安全证书的标准。包:包括SUN公司提供的JSSE的实现类。,JSSE具有以下特征,纯粹用Java语言编写。可以出口到大多数国家。提供支持SSL2.0和SSL3.0的JSSE API,,并且提供SSL 3.0 的JSSE实现。提供支持TLS1.0的JSSE API和JSSE实现。提供用于创建安
8、全连接的类,如SSLSocket、SSLServerSocket和SSLEngine。,JSSE具有以下特征,支持加密通信。支持客户端和服务器端的身份验证。支持SSL会话。支持一些常用加密算法,比如RSA(加密长度2048位)、RC4(密钥长度128位)和DH(密钥长度1024位)。,JSSE API的主要类框图,JSSE中负责安全通信的最核心类是SSLServerSocket类与SSLSocket类,它们分别是ServerSocket与Socket类的子类。SSLSocket对象由SSLSocketFactory创建;SSLServerSocket的accept()方法也会创建SSLSock
9、et。SSLServerSocket对象由SSLServerSocketFactory创建。SSLSocketFactory、SSLServerSocketFactory以及SSLEngine对象都由SSLContext对象创建。SSLEngine类用于支持非阻塞的安全通信。,下列createSocket()方法创建采用SSL协议的SSLSocket对象。public void createSocket()throws Exceptionfactory=(SSLSocketFactory)SSLSocketFactory.getDefault();socket=(SSLSocket)facto
10、ry.createSocket(host,port);Stringsupported=socket.getSupportedCipherSuites();socket.setEnabledCipherSuites(supported);,C/S安全管理,在进行安全通信时,要求客户端与服务器端都支持SSL或TCL协议。客户端与服务器端可能都需要设置用于证实自身身份的安全证书,还要设置信任对方的哪些安全证书。,KeyStore类,存放安全证书。以下程序创建一个KeyStore对象,它从test.keys文件中加载安全证书。String passphrase=654321;/JKS是SUN支持的Ke
11、yStore的类型KeyStore keyStore=KeyStore.getInstance(JKS);char password=passphrase.toCharArray();/password参数用于打开安全证书keyStore.load(new FileInputStream(test.keys),password);,KeyManager类,选择证实自身身份的安全证书,把它发送给对方。KeyManagerFactory负责创建KeyManager对象,如:KeyManagerFactory keyManagerFactory=KeyManagerFactory.getInstan
12、ce(SunX509);keyManagerFactory.init(keyStore,password);KeyManager keyManagers=keyManagerFactory.getKeyManagers();,TrustManager类,决定是否信任对方的安全证书。TruesManagerFactory负责创建TrustManager对象,如:TrustManagerFactory trustManagerFactory=TrustManagerFactory.getInstance(SunX509);trustManagerFactory.init(keyStore);Tru
13、stManager trustManagers=trustManagerFactory.getTrustManagers();,SSLContext类,设置与安全通信有关的各种信息,如使用的协议(SSL或者TLS),自身的安全证书以及对方的安全证书。SSLContext还负责构造SSLServerSocketFactory、SSLSocketFactory和SSLEngine对象。,以下程序创建并初始化一个SSLContext对象,然后由它创建一个SSLServerSocketFactory对象:SSLContext sslCtx=SSLContext.getInstance(TLS);/采用
14、TLS协议sslCtx.init(kmf.getKeyManagers(),tmf.getTrustManagers(),null);SSLServerSocketFactory ssf=sslCtx.getServerSocketFactory();,SSLServerSocketFactory类,负责创建SSLServerSocket对象:SSLServerSocket serverSocket=(SSLServerSocket)sslServerSocketFactory.createServerSocket(8000);/监听端口8000,SSLServerSocketFactory对
15、象有两种创建方法:(1)调用SSLContext类的getServerSocketFactory()方法。(2)调用SSLServerSocketFactory类的静态getDefault()方法。,SSLSocketFactory类,负责创建SSLSocket对象:SSLSocket socket=(SSLSocket)sslSocketFactory.createSocket(localhost,8000);SSLSocketFactory对象有两种创建方法:(1)调用SSLContext类的getSocketFactory()方法。(2)调用SSLSocketFactory类的静态get
16、Default()方法。,SSLSocket类,SSLSocket类是Socket类的子类,因此两者用法有许多相似之处。SSLSocket类具有与安全通信有关的方法:(1)设置加密套件(2)处理握手结束事件(3)管理SSL会话(4)客户端模式,设置加密套件,SSLSocket类的getSupportedCipherSuites()方法返回一个字符串数组,包含当前SSLSocket对象所支持的加密套件组。SSLSocket类的setEnabledCipherSuites(String suites)方法设置当前SSLSocket对象的可使用加密套件组。可使用的加密套件组应该是所支持的加密套件组的
17、子集。,以下代码启用具有高加密强度的加密套件,可以提高该通信端的安全性,禁止那些不支持强加密的通信端连接当前通信端:String strongSuites=SSL_DES_DSS_WITH_3DES_EDE_CBC_SHA,SSL_RSA_WITH_RC4_128_MD5,SSL_RSA_WITH_RC4_128_SHA,SSL_RSA_WITH_3DES_EDE_CBC_SHA;sslSocket.setEnabledCipherSuites(strongSuites);,处理握手结束事件,SSL握手需要花费很长时间,当SSL握手完成,会发出一个HandshakeCompletedEvent
18、事件,该事件由HandshakeCompletedListener负责监听。SSLSocket类的addHandshakeCompletedListener()方法负责注册HandshakeCompletedListener监听器。,HandshakeCompletedEvent类提供获取与握手事件相关的信息的方法:(1)public SSLSession getSession()/获得会话(2)public String getCipherSuite()/获得实际使用的加密套件(3)public SSLSocket getSocket()/获得发出该事件的套接字HandshakeComple
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 安全网络通信 安全 网络 通信 PPT 课件
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-5493141.html