《第9章 安全套接字.ppt》由会员分享,可在线阅读,更多相关《第9章 安全套接字.ppt(27页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、网络编程的安全性欧阳宏基欧阳宏基2主要内容1.数字签名数字签名公有密钥体制、私有密钥体制、公有密钥体制、私有密钥体制、数字签名过程与算法、数字证书数字签名过程与算法、数字证书与数字签名相关的与数字签名相关的JavaAPI2.SSL(安全套接字安全套接字)与与JSSE基本应用基本应用数字签名数字签名数字签名(DigitalSignature):通过在数据单元上附加:通过在数据单元上附加数据或者对数据进行秘密转换,防止他人对传送的数据数据或者对数据进行秘密转换,防止他人对传送的数据进行破坏,从而使接收者可以确认数据的来源和完整性。进行破坏,从而使接收者可以确认数据的来源和完整性。基于基于公钥公钥密
2、钥密钥体制体制和和私私钥钥密钥密钥体制体制都可以获得数字签名都可以获得数字签名,绝大多数绝大多数的数字签名是的数字签名是基于公钥密码体制的基于公钥密码体制的数字签名。数字签名。采用数字签名能够确保以下两点:采用数字签名能够确保以下两点:(1)信息是由签名者发送的信息是由签名者发送的。(2)信息自签发后到接收者收到为止未曾做过任何修改。信息自签发后到接收者收到为止未曾做过任何修改。一一套数字签名通常定义两种互补的运算,一个用于套数字签名通常定义两种互补的运算,一个用于签名签名,另一个,另一个用于用于验证验证。3私有密钥体制私有密钥加密系统使用唯一的密钥(即私有密钥)进行加密和解密。该密私有密钥加
3、密系统使用唯一的密钥(即私有密钥)进行加密和解密。该密钥必须为发送者和接收者所共享。即,若甲要向乙发一个加密邮件,甲需钥必须为发送者和接收者所共享。即,若甲要向乙发一个加密邮件,甲需用一密钥将信息加密;乙收到邮件后,须用同样的密钥将信息解密。用一密钥将信息加密;乙收到邮件后,须用同样的密钥将信息解密。私有密钥体制的缺点:私有密钥体制的缺点:(1)一定要有一种安全的协议来保证密钥传送的可靠;一定要有一种安全的协议来保证密钥传送的可靠;(2)有紧急的加密消息需要发送时,可能因接收方没有密钥而不能完成传送;有紧急的加密消息需要发送时,可能因接收方没有密钥而不能完成传送;(3)若要将消息发给许多不同的
4、团体,就需要与各个团体对应,维护许多不若要将消息发给许多不同的团体,就需要与各个团体对应,维护许多不同的密钥。同的密钥。为克服私有密钥加密系统的这些弱点,人们引进了公共密钥加密系统。为克服私有密钥加密系统的这些弱点,人们引进了公共密钥加密系统。4公有密钥体制(1)鲍勃有两把钥匙,一把公鲍勃有两把钥匙,一把公钥,一把私钥钥,一把私钥5(2)鲍勃把公钥送给他的小伙鲍勃把公钥送给他的小伙伴,每人一把。伴,每人一把。公开密钥公开密钥密码体制是现代密码学的最重要的发明和进展密码体制是现代密码学的最重要的发明和进展。在公有密钥体制中在公有密钥体制中有两种密钥:一种公钥,一种私钥,两者都可以用于加密和解密。
5、有两种密钥:一种公钥,一种私钥,两者都可以用于加密和解密。用用公共密钥加密的信息只能用与之对应的私有密钥解开公共密钥加密的信息只能用与之对应的私有密钥解开;而;而用私有密钥加密用私有密钥加密的信息,任何拥有与之对应的公共密钥的人均可的信息,任何拥有与之对应的公共密钥的人均可解开解开(这一点也是数字签名的这一点也是数字签名的实现原理实现原理)。因此,因此,私有私有密钥总为个人保管而无须外传,公共密钥则可授权给密钥总为个人保管而无须外传,公共密钥则可授权给他人使用而不会破坏他人使用而不会破坏安全性安全性,公共密钥和私有密钥之间永远存在着一对一的,公共密钥和私有密钥之间永远存在着一对一的关系。关系。
6、公钥密码体制6(3)苏珊给鲍勃写信,写完后用鲍勃苏珊给鲍勃写信,写完后用鲍勃的公钥加密,达到保密的效果。的公钥加密,达到保密的效果。(4)鲍勃收信后,用私钥解密,看到鲍勃收信后,用私钥解密,看到信件内容。信件内容。数字签名实现过程7(1)鲍勃给苏珊回信,写完后用鲍勃给苏珊回信,写完后用Hash函数,生成信件的摘要函数,生成信件的摘要(digest)。(2)鲍勃使用私钥,对这个摘要加密,鲍勃使用私钥,对这个摘要加密,生成生成“数字签名数字签名”(signature)。数字签名实现过程8(3)鲍勃将这个签名,附在信件下面,鲍勃将这个签名,附在信件下面,一起发给苏珊。一起发给苏珊。(4)苏珊收信后,
7、取下数字签名,用鲍勃的苏珊收信后,取下数字签名,用鲍勃的公钥解密,得到信件的摘要。由此证公钥解密,得到信件的摘要。由此证明,这封信确实是鲍勃发出的。明,这封信确实是鲍勃发出的。(5)苏珊再对信件本身使用苏珊再对信件本身使用Hash函数,将函数,将得到的结果,与上一步得到的摘要进得到的结果,与上一步得到的摘要进行对比。行对比。如果两者一致,就证明这封如果两者一致,就证明这封信未被修改过。信未被修改过。数字证书公钥是可以冒充的,那么如何该保证公钥的可靠性呢?公钥加密体系采取公钥是可以冒充的,那么如何该保证公钥的可靠性呢?公钥加密体系采取了一个办法,将公钥和公钥的主人信息联系在一起,了一个办法,将公
8、钥和公钥的主人信息联系在一起,再请一个大家都信得再请一个大家都信得过有信誉的公正、权威机构确认,并加上这个权威机构的签名。这就形成过有信誉的公正、权威机构确认,并加上这个权威机构的签名。这就形成了证书。了证书。9(1)证书中心用自己的私钥,对鲍勃的公钥和一些相关信息一起加密,生成证书中心用自己的私钥,对鲍勃的公钥和一些相关信息一起加密,生成数字证书数字证书(DigitalCertificate)。)。数字证书10(2)鲍勃拿到数字证书以后,就可以放心了。以后鲍勃拿到数字证书以后,就可以放心了。以后再给苏珊写信,只要在签名的同时,再附上再给苏珊写信,只要在签名的同时,再附上数字证书就行了。数字证
9、书就行了。(3)苏珊收信后,用苏珊收信后,用CA的公钥解开数字证书,就的公钥解开数字证书,就可以拿到鲍勃真实的公钥了,然后就能证明可以拿到鲍勃真实的公钥了,然后就能证明数字签名数字签名是否真的是鲍勃签的。是否真的是鲍勃签的。数字证书的应用“数字证书数字证书”的一个典型实例就是利用的一个典型实例就是利用https协议来进协议来进行网页加密行网页加密。11(1)客户端向服务器发起加密请求。客户端向服务器发起加密请求。(2)服务器用自己的私钥加密网页以后,连同服务器用自己的私钥加密网页以后,连同本身的数字证书,一起发送给客户端。本身的数字证书,一起发送给客户端。数字证书的应用12(3)客户端(浏览器
10、)的客户端(浏览器)的证书管理器证书管理器,有,有受信任的根证书颁发机受信任的根证书颁发机构构列表。客户端会根据这张列表,查看解开数字证书的公钥是否在列表。客户端会根据这张列表,查看解开数字证书的公钥是否在列表之内。列表之内。数字证书的应用13(4)如果数字证书记载的网址,与你正在浏览的网址不一致,就说明如果数字证书记载的网址,与你正在浏览的网址不一致,就说明这张证书可能被冒用,浏览器会发出警告。这张证书可能被冒用,浏览器会发出警告。数字证书的应用14(5)如果这张数字证书不是由受信任的机构颁发的,浏览器会发出另一种警告。如果这张数字证书不是由受信任的机构颁发的,浏览器会发出另一种警告。数字证
11、书的应用15(6)如果数字证书是可靠的,客户端就可以使用证书中的服务器公钥,对信息进如果数字证书是可靠的,客户端就可以使用证书中的服务器公钥,对信息进行加密,然后与服务器交换加密信息。行加密,然后与服务器交换加密信息。数字签名算法在数字签名方面,应用比较广泛的是在数字签名方面,应用比较广泛的是利用利用RSA计算签名计算签名。该方法的过程如下:。该方法的过程如下:(1)要签名的报文作为一个散列函数的输入,产生一个定长的安全散列码要签名的报文作为一个散列函数的输入,产生一个定长的安全散列码(消息摘消息摘要要)。(2)使用发方的使用发方的私有密钥对这个消息摘要进行加密就形成签名私有密钥对这个消息摘要
12、进行加密就形成签名。将报文和签名传。将报文和签名传送出去。送出去。(3)收方接受报文并收方接受报文并根据报文产生一个消息摘要根据报文产生一个消息摘要,同时使用发方的公开密钥对签,同时使用发方的公开密钥对签名进行解密。名进行解密。(4)如果计算得出的如果计算得出的消息摘要和解密后的签名互相匹配消息摘要和解密后的签名互相匹配,那么签名就是有效的。,那么签名就是有效的。16数字签名算法数字签名算法一般分为两个步骤:数字签名算法一般分为两个步骤:产生消息摘要产生消息摘要和和生成数字签名生成数字签名。(1)首先,系统根据一定的单向加密算法计算出消息的消息摘要。首先,系统根据一定的单向加密算法计算出消息的
13、消息摘要。使用单向散列函数的目的是将任意长度的消息压缩成为某一固定长度的消息摘使用单向散列函数的目的是将任意长度的消息压缩成为某一固定长度的消息摘要。单向散列函数又称为单向要。单向散列函数又称为单向Hash函数,它不是加密算法,却在密码学中有着函数,它不是加密算法,却在密码学中有着广泛的应用,与各种加密算法有着密切的关系。广泛的应用,与各种加密算法有着密切的关系。它的模型为:它的模型为:h=H(M)其中,其中,M是待加工的消息,可以为任意长度;是待加工的消息,可以为任意长度;H为单向散为单向散列算法,列算法,h作为生成的消息摘要,具有固定的长度,并且和作为生成的消息摘要,具有固定的长度,并且和
14、M的长度无关。的长度无关。一个好的单向散列算法需要一个好的单向散列算法需要H具有以下的单向性质:具有以下的单向性质:给定给定H和和M,很容易计算,很容易计算h;给定给定h和和H,很难计算,很难计算M,甚至得不到,甚至得不到M的任何消息;的任何消息;给定给定H,要找两个不同的,要找两个不同的M1和和M2,使得使得H(M1)=H(M2)在计算上是不可行的。在计算上是不可行的。17数字签名算法目前在密码学上已经设计出了大量的单向散列函数,目前在密码学上已经设计出了大量的单向散列函数,如:如:RabinHash方案、方案、MerkleHash方案、方案、NHash算法、算法、MD2算法、算法、MD4算
15、法、算法、MD5算法和算法和SHA等。等。通过考察发现,实际系统中用得最多的单向散列函数是通过考察发现,实际系统中用得最多的单向散列函数是消息摘消息摘要算法要算法MD5(MessageDigest5)和安全散列算法和安全散列算法SHA(SecurityHashAlgorithm)。它们具有相似的原理和实现。它们具有相似的原理和实现方法。方法。18数字签名算法(2)在产生签名阶段,发送方将产生的消息摘要在产生签名阶段,发送方将产生的消息摘要H(M)用发方的用发方的私有密钥进行加密。私有密钥进行加密。在验证签名阶段,接收方也要进行以下的计算:在验证签名阶段,接收方也要进行以下的计算:(1)由消息由
16、消息M利用单向散列函数产生消息摘要利用单向散列函数产生消息摘要H(M);(2)将收到的消息摘要将收到的消息摘要H(M)用发送方公开密钥进行解密;用发送方公开密钥进行解密;(3)两者进行比较,不一致则发出否决消息,否则接受信息。两者进行比较,不一致则发出否决消息,否则接受信息。19相关的Java API-KeyPairGeneratorKeyPairGenerator类用于生成公钥和私钥对类用于生成公钥和私钥对。密钥对生成器是使用。密钥对生成器是使用getInstance工厂方法(返回一个给定类的实例的静态方法)构造的。工厂方法(返回一个给定类的实例的静态方法)构造的。特特定算法的密钥对生成器可
17、以创建能够与此算法一起使用的公钥定算法的密钥对生成器可以创建能够与此算法一起使用的公钥/私钥对。它私钥对。它还可以将特定于算法的参数与每个生成的密钥关联。还可以将特定于算法的参数与每个生成的密钥关联。有两种生成密钥对的方式:与算法无关的方式和特定于算法的方式。有两种生成密钥对的方式:与算法无关的方式和特定于算法的方式。与算法无关的初始化与算法无关的初始化:所有的密钥对生成器遵循密钥大小和随机源的概念。对于不所有的密钥对生成器遵循密钥大小和随机源的概念。对于不同的算法,密钥大小的解释也不相同(例如,对于同的算法,密钥大小的解释也不相同(例如,对于DSA算法,密钥大小对应于模算法,密钥大小对应于模
18、的长度)。此的长度)。此KeyPairGenerator类有一个类有一个initialize方法,该方法带有两个通用方法,该方法带有两个通用的共享类型的参数。还有一个只带有的共享类型的参数。还有一个只带有keysize参数的方法,它使用以最高优先级安参数的方法,它使用以最高优先级安装的提供者的装的提供者的SecureRandom实现作为随机源。如果算法为实现作为随机源。如果算法为DSA算法,密钥大算法,密钥大小(模大小)为小(模大小)为512、768或或1024。特定于算法的初始化特定于算法的初始化:对于特定于算法的参数集合已存在的情况(例如,对于特定于算法的参数集合已存在的情况(例如,DSA
19、中中所谓的所谓的公用参数公用参数),有两个),有两个initialize方法具有方法具有AlgorithmParameterSpec参数。参数。其中一个方法还有一个其中一个方法还有一个SecureRandom参数,而另一个方法使用以最高优先级安参数,而另一个方法使用以最高优先级安装的提供者的装的提供者的SecureRandom实现作为随机源。实现作为随机源。20相关的Java API-KeyPair类类KeyPair是简单的密钥对(公钥和私钥)持有者。是简单的密钥对(公钥和私钥)持有者。它没有增强任何安全性,另外初始化时应该将它当作它没有增强任何安全性,另外初始化时应该将它当作PrivateK
20、ey对待。对待。只有两个方法:只有两个方法:(1)publicPublicKeygetPublic()返回对此密钥对的公钥组件的引用。返回对此密钥对的公钥组件的引用。(2)publicPrivateKeygetPrivate()返回对此密钥对的私钥组件的引用返回对此密钥对的私钥组件的引用。21相关的Java API-SignatureSignature类用来为应用程序提供数字签名算法功能。类用来为应用程序提供数字签名算法功能。数字签名用于确保数字数据的验证和完整性。数字签名用于确保数字数据的验证和完整性。使用使用Signature对象签名数据或验证签名包括以下三个阶段:对象签名数据或验证签名包
21、括以下三个阶段:(1)初始化:使用初始化:使用初始化验证签名的公钥初始化验证签名的公钥(initVerify方法方法),或使用,或使用初始化签署签名的私钥初始化签署签名的私钥(initSign(PrivateKey)和和initSign(PrivateKey,SecureRandom)。(2)更新更新:根据初始化类型,更新要签名或验证的字节。:根据初始化类型,更新要签名或验证的字节。update方法。方法。(3)签署或验证所有更新字节的签名。签署或验证所有更新字节的签名。sign方法和方法和verify方法。方法。22SSLSSL(SecureSocketLayer,安全套接层,安全套接层),
22、为为Netscape所研发所研发,利用利用数数据加密据加密(Encryption)技术,可确保数据在网络上之传输过程中不会被截取技术,可确保数据在网络上之传输过程中不会被截取及窃听及窃听。当前。当前版本为版本为3.0。它已被广泛地用于。它已被广泛地用于Web浏览器与服务器之间的浏览器与服务器之间的身份认证和加密数据传输。身份认证和加密数据传输。SSL协议位于协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支协议与各种应用层协议之间,为数据通讯提供安全支持持。SSL协议可分为两层:协议可分为两层:(1)SSL记录协议(记录协议(SSLRecordProtocol):它建立在可靠的
23、传输协议:它建立在可靠的传输协议(如(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。的支持。(2)SSL握手协议(握手协议(SSLHandshakeProtocol):它建立在):它建立在SSL记录协记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。商加密算法、交换加密密钥等。23SSL的基本功能安全套接字是位于服务器上的一个加密系统,服务器与客户端进行安全通安全套接字是位于服务器上的一个加密系统,服务器与客户端进行安
24、全通信,服务器端必须具备两样东西:信,服务器端必须具备两样东西:(1)密钥密钥对对:包括一个公钥和一个私钥,用来对通信数据进行加密和解密。:包括一个公钥和一个私钥,用来对通信数据进行加密和解密。(2)证书证书:用来进行身份确认。可以是自签证书或者颁发证书,自签证书:用来进行身份确认。可以是自签证书或者颁发证书,自签证书用于私有的用于私有的Web网络;颁发证书由认证中心网络;颁发证书由认证中心(CA)认证,用于公有认证,用于公有Web系统。系统。SSL提供三个功能提供三个功能:(1)SSL服务器鉴别服务器鉴别:允许客户端证实服务器的身份。具有:允许客户端证实服务器的身份。具有SSL功能的浏功能的
25、浏览器具有一个由览器具有一个由CA认证的证书列表,当浏览器与服务器进行商务活认证的证书列表,当浏览器与服务器进行商务活动时,浏览器就从服务器得到含有服务器公钥的证书。动时,浏览器就从服务器得到含有服务器公钥的证书。(2)加密加密SSL会话会话:所有通信数据都在发送发加密,接收方解密,并且能:所有通信数据都在发送发加密,接收方解密,并且能够鉴别数据是否在通信过程中被篡改够鉴别数据是否在通信过程中被篡改。(3)SSL客户鉴别客户鉴别:允许服务器对客户身份进行鉴别。:允许服务器对客户身份进行鉴别。这个信息对服务器这个信息对服务器来说非常重要,例如银行要把财务数据发给客户时,就必须检验接收来说非常重要
26、,例如银行要把财务数据发给客户时,就必须检验接收者的身份。者的身份。24SSL的认证过程服务器端认证过程:服务器端认证过程:(1)客户端向服务器端发送一个客户端向服务器端发送一个开始信息开始信息,以便开始一个新的会话连接。,以便开始一个新的会话连接。(2)服务器根据客户的信息确定是否需要生成新的主密钥,服务器根据客户的信息确定是否需要生成新的主密钥,如需要则服务如需要则服务器会在响应开始信息时包含生成主密钥所需的信息。器会在响应开始信息时包含生成主密钥所需的信息。(3)客户根据收到的服务器响应信息,客户根据收到的服务器响应信息,产生一个主密钥,并用服务器的公产生一个主密钥,并用服务器的公开密钥
27、加密后传给服务器开密钥加密后传给服务器。(4)服务器恢复该主密钥,服务器恢复该主密钥,并返回给客户一个用主密钥认证的消息并返回给客户一个用主密钥认证的消息,以此让,以此让客户认证服务器。客户认证服务器。客户端认证过程:客户端认证过程:经过认证的服务器发送一个提供给客户,经过认证的服务器发送一个提供给客户,客户则返回经过数客户则返回经过数字签名的回答信息和其公开密钥字签名的回答信息和其公开密钥,从而向服务器提供认证。,从而向服务器提供认证。25生成CA证书要从SSL证书中生成一个CA证书,在JDK命令行执行如下命令:keytoolgenkeykeystoreSSLKey(证书名称证书名称)key
28、algrsaaliasSSL26JSSEJSSE(Java安全套接字扩展安全套接字扩展,JavaSecureSocketExtension,简称,简称JSSE)是一组支持和实现是一组支持和实现SSL和和TLS协协议的议的API,可使得这些功能能够通过编程方式使用。使用,可使得这些功能能够通过编程方式使用。使用JSSE,我们,我们可以定义运行任意应用程序协议可以定义运行任意应用程序协议包括包括HTTP、TCP/IP、FTP,甚至,甚至Telnet的客户机与服务器之间的安的客户机与服务器之间的安全套接字连接。全套接字连接。见源文件:见源文件:ssl/SSLServer.javassl/SSLClient.java注意:运行客户端程序时在命令行输入如下命令注意:运行客户端程序时在命令行输入如下命令java-D.ssl.trustStore=SSLKey ssl.SSLClientjava-D.ssl.trustStore=SSLKey ssl.SSLClient27