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