《安全套接字》

上传人:资****亨 文档编号:178993150 上传时间:2021-04-06 格式:PPT 页数:27 大小:1.01MB
返回 下载 相关 举报
《安全套接字》_第1页
第1页 / 共27页
《安全套接字》_第2页
第2页 / 共27页
《安全套接字》_第3页
第3页 / 共27页
《安全套接字》_第4页
第4页 / 共27页
《安全套接字》_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《《安全套接字》》由会员分享,可在线阅读,更多相关《《安全套接字》(27页珍藏版)》请在金锄头文库上搜索。

1、网络编程的安全性,欧阳宏基,2,主要内容,1. 数字签名 公有密钥体制、私有密钥体制、 数字签名过程与算法、数字证书 与数字签名相关的Java API 2. SSL(安全套接字)与JSSE基本应用,3,数字签名,数字签名(Digital Signature):通过在数据单元上附加数据或者对数据进行秘密转换,防止他人对传送的数据进行破坏,从而使接收者可以确认数据的来源和完整性。 基于公有密钥体制和私有密钥体制都可以获得数字签名,绝大多数的数字签名是基于公钥密码体制的数字签名。 采用数字签名能够确保以下两点: (1)信息是由签名者发送的。 (2) 信息自签发后到接收者收到为止未曾做过任何修改。 一

2、套数字签名通常定义两种互补的运算,一个用于签名,另一个用于验证,4,私有密钥体制,私有密钥加密系统使用唯一的密钥(即私有密钥)进行加密和解密。该密钥必须为发送者和接收者所共享。即,若甲要向乙发一个加密邮件,甲需用一密钥将信息加密;乙收到邮件后,须用同样的密钥将信息解密。 私有密钥体制的缺点: (1) 一定要有一种安全的协议来保证密钥传送的可靠; (2) 有紧急的加密消息需要发送时,可能因接收方没有密钥而不能完成传送; (3) 若要将消息发给许多不同的团体,就需要与各个团体对应,维护许多不同的密钥。为克服私有密钥加密系统的这些弱点,人们引进了公共密钥加密系统,5,公有密钥体制,1) 鲍勃有两把钥

3、匙,一把公钥,一把私钥,公有密钥密码体制是现代密码学的最重要的发明和进展。在公有密钥体制中有两种密钥:一种公钥,一种私钥,两者都可以用于加密和解密。 用公共密钥加密的信息只能用与之对应的私有密钥解开;而用私有密钥加密的信息,任何拥有与之对应的公共密钥的人均可解开(这一点也是数字签名的实现原理)。因此,私有密钥总为个人保管而无须外传,公共密钥则可授权给他人使用而不会破坏安全性,公共密钥和私有密钥之间永远存在着一对一的关系,6,公钥密码体制,3) 苏珊给鲍勃写信,写完后用鲍勃的公钥加密,达到保密的效果,4)鲍勃收信后,用私钥解密,看到信件内容,7,数字签名实现过程,1)鲍勃给苏珊回信,写完后用Ha

4、sh函数,生成信件的摘要(digest,2)鲍勃使用私钥,对这个摘要加密,生成“数字签名”(signature,8,数字签名实现过程,3)鲍勃将这个签名,附在信件下面,一起发给苏珊,4)苏珊收信后,取下数字签名,用鲍勃的公钥解密,得到信件的摘要。由此证明,这封信确实是鲍勃发出的,5)苏珊再对信件本身使用Hash函数,将得到的结果,与上一步得到的摘要进行对比。如果两者一致,就证明这封信未被修改过,9,数字证书,公钥是可以冒充的,那么如何该保证公钥的可靠性呢?公钥加密体系采取了一个办法,将公钥和公钥的主人信息联系在一起,再请一个大家都信得过有信誉的、公正、权威机构确认,并加上这个权威机构的签名。这

5、就形成了证书,1)证书中心用自己的私钥,对鲍勃的公钥和一些相关信息一起加密,生成数字证书(Digital Certificate,10,数字证书,2)鲍勃拿到数字证书以后,再给苏珊写信,只要在签名的同时,再附上数字证书就行了,3)苏珊收信后,用CA的公钥解开数字证书,就可以拿到鲍勃真实的公钥,然后就能证明数字签名是否是鲍勃签的,11,数字证书的应用,数字证书”的典型实例:利用https协议在客户端和服务器之间通信,1) 客户端向服务器发起加密请求,2)服务器用自己的私钥加密网页以后,连同本身的数字证书,一起发送给客户端,12,数字证书的应用,3)客户端(浏览器)的“证书管理器”,有“受信任的根

6、证书颁发机构”列表。客户端会根据这张列表,查看解开数字证书的公钥是否在列表之内。(浏览器“工具”-“Internet选项”-“内容”,13,数字证书的应用,4)如果数字证书记载的网址,与你正在浏览的网址不一致,就说明这张证书可能被冒用,浏览器会发出警告,14,数字证书的应用,5)如果这张数字证书不是由受信任的机构颁发的,浏览器会发出另一种警告,15,数字证书的应用,6)如果数字证书是可靠的,客户端就可以使用证书中的服务器公钥,对信息进行加密,然后与服务器交换加密信息,16,数字签名算法,在数字签名方面,应用比较广泛的是:RSA算法。 该方法的过程如下,17,数字签名算法,数字签名算法一般分为两

7、个步骤:产生消息摘要和生成数字签名。 (1) 首先,系统根据一定的单向加密算法计算出消息的消息摘要。 使用单向散列函数(Hash函数)的目的是将任意长度的消息压缩成为某一固定长度的消息摘要。 模型为:h=H(M)其中,M是待加工的消息,可以为任意长度;H为单向散列算法,h作为生成的消息摘要,具有固定的长度,并且和M的长度无关。 Hash函数需要H具有以下的单向性质: 给定H和M,很容易计算h; 给定h和H,很难计算M,甚至得不到M的任何消息; 给定H,要找两个不同的M1和M2,使得H(M1)=H(M2)在计算上是不可行的,18,数字签名算法,目前在密码学上已经设计出了大量的单向散列函数, 如:

8、RabinHash方案、MerkleHash方案、NHash算法、MD2算法、MD4算法、MD5算法和SHA等。 实际系统中用得最多的单向散列函数是: 消息摘要算法MD5(MessageDigest5) 安全散列算法SHA(SecurityHashAlgorithm)。它们具有相似的原理和实现方法。 见源文件:md5,19,数字签名算法,2) 在产生签名阶段,发送方将产生的消息摘要H(M)用发方的私有密钥进行加密。 在验证签名阶段,接收方也要进行以下的计算: (1)由消息M利用单向散列函数产生消息摘要H(M); (2)将收到的消息摘要H(M)用发送方公开密钥进行解密; (3)两者进行比较,不一

9、致则发出否决消息,否则接受信息,20,相关的Java API-KeyPairGenerator,KeyPairGenerator 类用于生成公钥和私钥对。密钥对生成器是使用 getInstance 工厂方法构造的。 特定算法的密钥对生成器可以创建能够与此算法一起使用的公钥/私钥对。它还可以将特定于算法的参数与每个生成的密钥关联。 有两种生成密钥对的方式:与算法无关的方式和特定于算法的方式,21,相关的Java API-KeyPair,类KeyPair是简单的密钥对(公钥和私钥)持有者。它没有增强任何安全性,另外初始化时应该将它当作 PrivateKey 对待。 只有两个方法: (1) publ

10、ic PublicKey getPublic() 返回对此密钥对的公钥。 (2) public PrivateKey getPrivate() 返回对此密钥对的私钥,22,相关的Java API-Signature,Signature 类用来为应用程序提供数字签名算法功能。数字签名用于确保数字数据的验证和完整性。 使用 Signature 对象签名数据或验证签名包括以下三个阶段: (1) 初始化:使用 初始化验证签名的公钥(initVerify方法),或使用 初始化签署签名的私钥( initSign(PrivateKey) 和 initSign(PrivateKey, SecureRandom

11、)。 (2) 更新 :根据初始化类型,更新要签名或验证的字节。 update 方法。 (3) 签署或验证所有更新字节的签名。sign 方法和 verify 方法,23,SSL,SSL(Secure Socket Layer,安全套接层),为Netscape所研发,利用数据加密(Encryption)技术,可确保数据在网络上之传输过程中不会被截取及窃听。当前版本为3.0。它已被广泛地用于Web浏览器与服务器之间的身份认证和加密数据传输。 SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。SSL协议可分为两层: SSL记录协议(SSL Record Protocol):它

12、建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。 SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等,24,SSL的基本功能,安全套接字是位于服务器上的一个加密系统,服务器与客户端进行安全通信,服务器端必须具备两样东西: 密钥对 :包括一个公钥和一个私钥,用来对通信数据进行加密和解密。 证书:用来进行身份确认。可以是自签证书或者颁发证书,自签证书用于私有的Web网络;颁发证书由认证中心(CA)认证,用于公有Web系统。 SSL提供三个

13、功能: SSL服务器鉴别:允许客户端证实服务器的身份。具有SSL功能的浏览器具有一个由CA认证的证书列表,当浏览器与服务器进行商务活动时,浏览器就从服务器得到含有服务器公钥的证书。 加密SSL会话:所有通信数据都在发送发加密,接收方解密,并且能够鉴别数据是否在通信过程中被篡改。 SSL客户鉴别:允许服务器对客户身份进行鉴别。 这个信息对服务器来说非常重要,例如银行要把财务数据发给客户时,就必须检验接收者的身份,25,SSL的认证过程,服务器端认证过程: (1) 客户端向服务器端发送一个开始信息,以便开始一个新的会话连接。 (2) 服务器根据客户的信息确定是否需要生成新的主密钥,如需要则服务器会

14、在响应开始信息时,包含生成主密钥所需的信息。 (3) 客户根据收到的服务器响应信息,产生一个主密钥,并用服务器的公开密钥加密后传给服务器。 (4)服务器恢复该主密钥,并返回给客户一个用主密钥认证的消息,以此让客户认证服务器。 客户端认证过程: 经过认证的服务器发送一个提问给客户,客户则返回经过数字签名的回答信息和其公开密钥,从而向服务器提供认证,26,生成CA证书,要从SSL证书中生成一个CA证书,在JDK安装目录的bin目录下执行如下命令: keytool genkey keystore SSLKey(证书名称) keyalg rsa alias SSL,27,JSSE,JSSE(Java安全套接字扩展,Java Secure Socket Extension,简称 JSSE)是一组支持和实现 SSL 和 TLS 协议的API,可使得这些功能能够通过编程方式使用。使用 JSSE,我们可以定义运行任意应用程序协议包括 HTTP、TCP/IP、FTP,甚至 Telnet的客户机与服务器之间的安全套接字连接。 见源文件:ssl/SSLServer.java ssl/SSLClient.java 注意:运行客户端程序时在命令行输入如下命令 java -D.ssl.trustStore=SSLKey ssl.SSLClient

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号