把JavaTM Secure Socket Extension (JSSE) Reference Guide把翻译了一下,留着自己看,也分享给大家,略有删减,不保证翻译的正确性。
Secure Sockets Laye安全套接字层(SSL)是使用最广泛的Web协议实现方案。SSL使用组合加密过程提供一个安全的网络通信。本节介绍SSL和加密过程。
SSL提供了一个安全增强的标准TCP/IP套接字协议用于网络通信。在“TCP/IP协议栈与SSL”下图所示,安全套接字层是传输层和应用层之间。应用程序最常用的SSL协议是超文本传输协议(HTTP),互联网网页的协议。其他的应用,如网络新闻传输协议(NNTP),Telnet,轻量级目录访问协议(LDAP),交互邮件访问协议(IMAP)、文件传输协议(FTP),可以使用SSL以及。
TCP/IP Protocol Stack With SSL
TCP/IP Layer
|
Protocol
|
Application Layer
|
HTTP, NNTP, Telnet, FTP, etc.
|
Secure Sockets Layer
|
SSL
|
Transport Layer
|
TCP
|
Internet Layer
|
IP
|
SSL是Netscape 1994的开发,并与互联网社区的投入,已经发展成为一个标准。现在是国际标准化组织的控制下,互联网工程任务组(IETF)。
在1999年1月IETF已经更名为SSL传输层安全(TLS),并发布了1.0规范。TLS
1.0是对应SSL3.0协议的最新版本。
SSL 3.0 和
TLS 1.0之间的差异很小。
一、为什么使用SSL?
在网络上传输敏感信息可能有三个以下问题:
-
你不能总是确信与你交流的实体是真正的你认为它。
-
网络数据可以被截获,所以它可能被未经授权的第三方获取,例如:黑客
-
如果攻击者可以拦截数据,攻击者可以在发送到接收者之前修改数据。
SSL解决这些问题。它通过两个通信方在一个称为认证的过程中确保另一方的身份来解决第一个问题。一旦双方进行认证,SSL为双方提供加密的链接,该链接可以安全传输加密消息。加密双方之间的通信链接提供了隐私,因此解决了第二个问题。使用SSL加密算法包括一个安全的哈希算法,这是一种类似于
checksum。这确保数据在运输中不被修改。安全哈希解决了数据完整性的第三个问题。
注意,身份验证和加密都是可选的,依赖于两个实体之间协商的
cipher suites 。
最明显的例子,当你使用SSL在电子商务交易。在电子商务交易中,假装你可以保证与你正在通信的服务器的身份是愚蠢的。这将是很容易让人创建一个虚假的网站,承诺提供更好的服务如果你输入你的信用卡卡号(其实就是伪网站)。SSL允许你的客户验证服务器的身份。它也允许服务器来验证客户端的身份,虽然在互联网交易,这是很少做。
一旦客户端和服务器确认了对方的身份,SSL
通过加密算法保证了隐私性和数据完整性。这就允许敏感信息在互联网上安全传输,如信用卡号码。
SSL提供认证、隐私和数据完整性,它不提供不可抵赖(
non-repudiation)服务。不可抵赖意味着发送消息的实体,不能稍后否认发送过它们。当数字签名与一个消息相关联时,该通信可以被证实的。SSL不单独提供
不可抵赖。
二、SSL如何工作-How SSL Works
SSL高效的原因之一是,它使用几种不同的加密过程。SSL使用公共密钥加密来提供认证,密钥加密和数字签名提供隐私和数据完整性。在理解SSL之前,理解这些加密过程是很有用的。
(1)Cryptographic Processes
密码学的主要目的是使未经授权的第三方访问和理解通信双方的私人回话变得困难。它并不总是能够限制所有未经授权的数据访问,但私人数据可以通过加密的过程使未授权的人无法理解。加密使用复杂的算法将原始消息-明文,转换成编码的信息-称为密文。用于加密和解密通过网络传输的数据的算法通常有两类:私钥和公钥。
私钥和公钥都取决于使用约定密钥或密钥对。key是字符串被加密算法使用,对数据进行加密和解密。密钥就像锁的钥匙:只有正确的钥匙才能打开锁。
在两个通信方之间安全传输密钥不是件小事。公钥证书允许一方安全地传输公钥,同时确保接收方公钥的真实性。公钥证书在后面的章节中描述。
在随后的加密过程的描述中,我们使用如下约定:我们用Alice爱丽丝和Bob鲍伯的名字对两个通信方进行标记。我们称为未经授权的第三方,也被称为attacker,查利。
Secret Key Cryptography
使用密钥加密,通信双方,Alice和Bob,使用相同的密钥进行加密和解密的消息。在任何加密的数据通过网络发送之前,Alice和Bob必须有密钥,必须同意加密算法,密钥和算法讲于加密和解密。
密钥加密的主要问题之一是如何从一方获取密钥,而一个黑客不允许访问。如果Alice和Bob使用密钥加密保护他们的数据,但如果Charlie获得了他们key,Charlie就能能够理解他拦截Alice和Bob之间消息。不仅Charlie 可以解密 Alice和Bob之间消息,他也可以假装他是Alice,并且发送加密数据给Bob。Bob不会知道消息来自查Charlie,而不是Alice。
一旦密钥分配问题得到解决,密钥加密可以成为一个有价值的工具。该算法提供了良好的安全性和数据加密相对较快。在SSL会话发送敏感的数据大部分是使用密钥加密发送。
秘密密钥加密也称为对称密码,因为同一密钥用于对数据进行加密和解密。众所周知的秘密密钥的加密算法,包括数据加密标准(DES),
triple-strength DES(3DES),
Rivest Cipher (RC2),和
Rivest Cipher 4(RC4)。
Public Key Cryptography
公钥密码通过使用公钥和私钥来解决密钥分发的问题。公开密钥可以通过网络公开,而私钥由沟通的一方保持私有。公共和私有密钥是加密和解密的逆操作;一个用于加密,一个用于解密。
让我们假设Bob使用公钥密码向Alice发送一个消息。Alice有一个公钥和一个私钥,所以她把她的私钥在一个安全的地方,并发送她的公钥给Bob。Bob使用Alice的公钥对消息加密。Alice稍后可以用她的私钥解密消息。
如果Alice用自己的私钥加密消息加密并发送消息给Alice,Bob可以肯定,他接收到的数据来自Alice;如果Bob能够解密数据用爱丽丝的公钥,消息必定被爱丽丝用他私人密钥加密,只有Alice's拥有她自己的私人密钥。问题是,任何其他人也可以读取消息,因为爱丽丝的公钥是公开的。虽然这种场景不适用安全的数据通信,它提供了数字签名的基础。数字签名是一个公钥证书的组件,并用于SSL客户端或服务器进行身份验证。公钥证书和数字签名在后面的章节中描述。
公开密钥密码也被称为非对称密码,因为不同的密钥被用来加密和解密的数据。一个众所周知的公共密钥加密算法通常使用的SSL是Rivest Shamir Adleman(RSA)算法。另一个公开密钥算法使用的SSL是专为秘密密钥交换是Diffie Hellman(DH)算法。公钥加密需要大量的计算,使得它非常慢。因此,它通常只用于加密小块数据,如密钥,而不是加密数据通信的大部分。
A Comparison Between Secret Key and Public Key Cryptography
私钥加密和公钥加密都有优点和缺点。私钥加密,数据可以很快速加密和解密,但由于通信双方必须共享相同的密钥信息,交换密钥可以是一个问题。公钥加密,密钥交换是不是一个问题,因为公钥不需要被保密,但用于加密和解密数据的算法需要大量的计算,因此非常慢。
公钥证书Public Key Certificates
公钥证书提供了一种安全的方法,让实体传递公钥用于非对称加密。公开密钥证书避免了以下情况:如果Charlie创建自己的公钥和私钥,他可以声称他是Alice,并把他的公钥给Bob。Bob将能够与Charlie沟通,但Bob会认为他是他的数据发送给Alice。
Once the CA is confident that the applicant represents the organization it says it represents, the CA signs the certificate attesting to the validity of the information contained within the certificate.
公钥证书可以被认为是等同于数字通行证。由受信机构签发,并为发信人提供身份证明。发行公钥证书的可信组织称为证书颁发机构(CA)。CA可以比作公证人。要从CA获得证书,必须提供身份证明。一旦CA确信申请人代表它所说的组织,CA签发证书,证明有效的信息包含在证书中。
公钥证书包含多个字段,包括:
-
Issuer - 发行人是颁发证书的CA. 如果用户信任颁发证书CA ,而且证书有效,则用户可以信任证书
-
Period of validity - 证书有失效日期, 此日期是在验证证书有效性时应检查的一段信息
-
Subject - 主题字段包含证书表示的实体信息.
-
Subject's public key -最主要的信息,证书的公钥. 所有的其他字段确保此密钥的有效性
-
Signature - 证书是由CA签发的证书数字签名。使用CA的私钥创建签名并确保证书的有效性
如果Bob接收到Alice的公钥是有效的公开证书,Bob讲不会被愚弄发送秘密信息给伪装成Alice的Charlie
很多证书有可能在被一个证书链链接。当使用证书链时,第一个证书总是发送者的。链中的最终证书是根CA的证书CA是一个被广泛信任的公共证书颁发机构。几个根CA的信息通常存储在客户端的Internet浏览器中。此信息包括CA的公钥。众所周知,CAs包括VeriSign,Entrust,和GTE CyberTrust.。
Cryptographic Hash Functions
当发送加密的数据时,通常采用SSL加密哈希算法来确保数据的完整性。哈希算法防止Charlie篡改Alice发送给Bob的数据。
加密哈希算法是一个类似于
checksum。主要的区别是
checksum被设计检查数据中意外变化,加密哈希算法是用来检测故意的改变。当数据由加密哈希
算法处理时,生成一个称为哈希的小串位。对消息的微小更改通常会使生成的哈希值发生较大变化。加密哈希算法不需要加密密钥。两个哈希算法通常用于SSL中是:
Message Digest 5 (MD5) 和
Secure Hash Algorithm (SHA)。
SHA是由美国国家科学技术研究所(NIST)提出。
Message Authentication Code
消息验证码(MAC)类似于一个加密哈希,它是基于一个私钥。
如果Alice想确认Charlie不篡改她发给Bob的消息,她可以给她的消息计算HMAC和追加的HMAC她的原始消息。然后她就用和Bob分享的密钥加密包含HMAC的消息。当Bob解密消息并计算HMAC,他将能够区分消息在传输过程中是否被修改过。在SSL中HMAC是用于传输数据的安全。
Digital Signatures
为了发送消息创建的一个加密哈希,这个哈希是用发送者的私钥加密。这个加密的哈希被称为数字签名。
(2)The SSL Process
Communication using SSL begins with an exchange of information between the client and the server.
使用SSL在客户端和服务器。这种信息交流被称为SSL握手。
-
协调 cipher suite
-
身份认证(可选)
-
用约定的加密机制建立信息安全
Negotiating the Cipher Suite
SSL会话开始于一个客户端与服务器之间的协同,协调他们将使用的cipher suite。一个cipher suite是一套密码算法和密钥大小,计算机可以使用在加密数据。cipher suite包括公共密钥交换算法或密钥协议算法、Hash算法信息。客户端告诉服务器哪个cipher suites它支持,并且服务器选择最佳的相互接受的cipher suite。
Authenticating the Server
在SSL认证步骤是可选的,但在电子商务交易的例子,在网上,客户一般会想验证服务器。认证服务器允许客户端确认服务器代表的实体。
为了证明服务器属于它属于的组织,服务器提出了公钥证书给客户端。如果证书是有效的,客户可以确定服务器的身份。客户端和服务器交换信息,使他们能够协同一致密钥。例如,与RSA,客户端使用服务器的公开的公钥证书,加密私密信息。客户端发送的加密信息到服务器。只有服务器用私钥解密这些消息。
Sending the Encrypted Data
客户端和服务器都现在可以使用相同的密钥。每一个讯息,他们使用的加密哈希算法共享的秘密信息,加密算法是在这个过程中的第一步选择的,计算HMAC并且把他们附加到消息中。然后他们使用密钥和密钥算法(第一步协调好的),加密的数据安全和HMAC。客户端和服务器现在可以安全通信,使用加密和哈希数据。
(3)The SSL Protocol
前一节中提供的SSL握手的一个高层次的描述,这是发送加密信息之前,客户端和服务器之间的信息交换。本节提供了更多的细节。
“SSL Messages”图片展示了在SSL握手交换消息的顺序。每个SSL消息都被如下图描述:
SSL消息按以下顺序发送:
客户端发送服务器信息包括SSL支持最高版本和一系列的密码套件支持。
-
Client hello - 客户端向服务端发送它支持的SSL版本和一些了它支持的cipher suites
-
Server hello - 服务端选择最高版本的SSL和最好切大家都支持的cipher suite,并且把这些消息发送给客户端
-
Certificate - 服务器发送客户端证书或证书链。证书链通常开始与服务器的公共密钥证书,以证书颁发机构的根证书。这一消息是可选的,但用来服务器认证。
-
Certificate request -如果服务器需要认证客户端,服务器发送认证请求。在互联网上这个消息很少发。
-
Server key exchange - 服务器发送客户端密钥交换消息, when the public key information sent in 3) above is not sufficient for key exchange.
-
Server hello done - 服务器告诉客户段,完成初步协同的消息。
-
Certificate - 如果服务端在4)请求客户端证书,客户端发送它证书链,正如服务端所所做的在消息3。
-
Client key exchange - 客户端生成用于创建用于对称加密的密钥信息。例如RSA,然后客户端加密(用服务器的公钥)这个密钥信息,并将其发送给服务器。
-
Certificate verify - 这个消息被发送时,客户端提供证书以上。其目的是让服务器完成认证客户端的过程。当这个消息被使用,客户端发送的信息进行数字签名,它使用加密哈希函数。当服务器解密这些信息与用户的公共密钥,服务器能够对客户端进行身份验证。
-
Change cipher spec - 客户端发送一个消息告诉服务器更改加密模式
-
Finished - 客户端告诉服务器,它已经准备好安全的数据交流.
-
Change cipher spec -服务器发送一个消息告诉客户端更改加密模式
-
Finished - 服务端告诉客户端它已经准备好安全的数据交流
-
Encrypted data - 客户端和服务器使用对称加密算法和Hash算法在消息1和2协商好的进行通信
-
Close Messages - 在链接的最后,每一方都会发送一个close_notify消息通知同伴,连接关闭
如果在SSL会话过程中产生的参数都保存过,这些参数有时可以重新用于未来的SSL会话。节约SSL会话参数允许加密通信更快速开始。
Cipher Suite Choice and Remote Entity Verification
SSL / TLS协议定义了一系列具体的措施以保证“保护”的链接。然而 cipher suite的选择将直接影响的连接安全。例如,如果一个匿名的cipher suite被选择,应用程序将无法验证远方对端的身份。如果没有加密suite被选择,那么数据的隐私得不到保护。此外, the SSL/TLS protocols do not specify that the credentials received must match those that peer might be expected to send. 。如果连接被莫名其妙地重定向到一个恶意节点,但盗贼的资格提供了可接受的基于当前信任材料,连接将被认为是有效的。
当使用原始的SSLSockets/SSLEngines类时你应该在发送任何数据前检查点对方的的证书。SSLSocket and SSLEngine 类没有自动地确认URL中的hostname匹配对方证书中的hostname,。应用可以用URL欺骗如果主机未验证的开发。。
协议如HTTPS需要主机名验证。应用程序可以使用hostnameverifier覆盖默认主机名规则。更多信息见httpsurlconnection。
例如协议需要hostname确认。应用程序可以使用HostnameVerifier 覆盖默认HTTPS hostname 规则。更多信息见HttpsURLConnection。
三、SSL 和 TLS 参考
For a list of resources containing more information about SSL, see Secure Sockets Layer Documentation .
阅读(1147) | 评论(0) | 转发(0) |