无密钥SSL是一项专为使用云供应商进行SSL加密的公司打造的服务。一般来说,云供应商必须掌握公司的私钥,然而 无秘钥SSL提供了一种避免这种情况的途径。由于监管方面的原因,众多组织无法共享其私钥。借助无密钥SSL,这些公司在确保密钥安全的同时,依然能够享用TLS和云服务。
SSL(确切地说应称为TLS)是一种用于在网络上进行身份验证和加密通信的协议。SSL/TLS需要用到所谓的公钥和私钥。若某公司利用该协议来保护其网站的往返流量(可参考HTTPS),通常私钥仍由该公司持有。但当该公司迁移至云端并由供应商提供TLS加密时,私钥则会变为由供应商持有。
通过将涉及私钥的握手环节移出供应商的服务器,私钥便能安全地保留在公司手中。云供应商并非直接使用私钥来验证其服务器,而是将数据转发至公司服务器并从公司服务器接收数据来完成操作。此通信是通过安全的加密通道进行的。所以,私钥仍然在使用,但不会与公司外部的任何人共享。
例如,假设Acme公司实施TLS。Acme公司会将其私钥妥善地存储在自己拥有并控制的服务器上。如果Acme公司迁移到云端并使用云服务提供商进行网络托管,那么私钥将由该供应商持有。但倘若Acme公司与实施无密钥SSL/TLS的供应商一同迁移到云端,那么私钥就可以像在非云SSL实施中一样,保留在Acme公司拥有和控制的服务器上。
无秘钥SSL是如何运作的呢?
无密钥SSL建立在这样一个事实基础之上:私钥仅仅在TLS握手期间使用一次,也就是在TLS会话开启之时。无秘钥SSL通过在地理上拆分TLS握手的步骤来实现其功能。提供无密钥SSL服务的云供应商会将这个过程中涉及私钥的部分迁移到另一台服务器上,通常是客户的本地服务器。
当在握手过程中需要用私钥来解密数据或者进行签名时,供应商的服务器会把必要的数据转发给客户的私钥服务器。私钥在客户服务器上对数据进行解密或者签名,然后客户服务器再将数据发送回供应商服务器,TLS握手便如同往常一样继续进行。
从云供应商的角度来看,无秘钥SSL是“无密钥”的:他们永远不会看到其客户的私钥,但是客户仍然拥有并且可以使用私钥。与此同时,公钥依旧在客户端正常使用。
无密钥SSL如何与RSA密钥交换TLS握手一起使用?
在RSA握手中,TLS握手的步骤如下:
1.客户端向服务器发送一条明文 "hello" 消息,其中包括他们要使用的协议版本、受支持的密码套件列表和称为“客户端随机数”的随机数据短字符串。
2.服务器使用其SSL证书、首选密码套件和一个不同的随机数据短字符串(称为“服务器随机数”)响应(以明文格式)。
3.客户端创建另一组随机数据,称为“预主机密”。客户端从服务器的SSL证书中获取公钥,加密预主机密,并将其发送到服务器;只有拥有私钥的人员才能解密预主机密。
4.该服务器解密“预主密钥”。注意,这是唯一一次使用私钥!
5.现在,客户端和服务器都有客户端随机数、服务器随机数和预主密钥。它们彼此独立,将这三个输入组合起来可得到会话密钥。它们都应达到相同的结果,并且会话期间的所有后续通信都用这些新会话密钥进行加密。
在步骤4中,无秘钥SSL开始发挥作用。有了 无秘钥SSL,云供应商无需自行对预主密码进行解密。相反,他们会通过安全通道以加密形式将预主密码发送到由客户托管或控制的服务器。客户的私钥会对预主密码进行解密,然后将解密后的预主密码发回给云供应商。云供应商的服务器利用这个解密后的预主密码得出会话密钥,随后TLS通信如同往常一样继续进行。
无密钥SSL如何与Ephemeral Diffie-Hellman密钥交换一起使用?
短暂Diffie-Hellman(DHE) 握手(“短暂”是因为同一密钥从未使用两次)使用Diffie-Hellman算法生成会话密钥,这是一种在不安全通道上交换密钥的方法。通过这种TLS握手,私钥身份验证成为独立于会话密钥生成的过程。
除了使用的算法之外,DHE握手和RSA握手之间的主要区别在于如何生成预主机密。在RSA握手中,预主机密由客户端生成的随机数据组成。在DHE握手中,客户端和服务器使用商定的参数分别计算相同的预主机密。
1.就像在RSA握手中一样,客户端发送他们要使用的协议版本、受支持的密码套件列表以及客户端随机数。
2.服务器使用其选择的密码套件、服务器随机数和SSL证书响应。在这里,DHE握手开始与RSA握手存在差异:服务器也发送其Diffie-Hellman (DH)参数,其将用于计算预主密钥。它也将包含数字签名用于身份验证。这是唯一一次使用私钥,它验证服务器是其声称的身份。
3.客户端验证服务器的数字签名并验证SSL证书。然后客户端用它的DH参数进行回复。
4.双方使用客户端的DH参数和服务器的DH参数,彼此分开计算预主机密。
5.然后,他们将此预主机密与客户端随机数和服务器随机数组合以获取会话密钥。
私钥仅在步骤2得以使用,而这正是无密钥SSL彰显其重要性的地方。在这个时候,SSL/TLS供应商会把客户端随机数、服务器随机数以及服务器的DH参数发送至由客户控制且拥有私钥的服务器。这些信息被用于生成服务器的数字签名,并且会被发送回云供应商,云供应商再将其传递给客户端。客户端能够利用公钥来验证这个签名,随后握手过程继续进行。如此一来,云供应商便无需接触私钥。
短暂Diffie-Hellman握手虽然比RSA握手所需时间略长,却拥有被称为前向保密的优势。由于私钥仅用于身份验证,所以攻击者无法利用它来查找任何特定的会话密钥。
什么是会话密钥?
会话密钥是在TLS握手完成后,由通过TLS进行安全通信的双方所使用的对称密钥。一旦双方确定了一组会话密钥,就不再需要使用公钥和私钥。而且,TLS会为每个独特的会话生成不同的会话密钥。
什么是前向保密?什么是完美前向保密?
前向保密能够确保即使私钥被公开,加密的数据依然保持加密状态,这也被称作“完美前向保密”。如果每个通信会话都使用唯一的会话密钥,并且会话密钥与私钥分开生成,那么前向保密就成为可能。倘若单个会话密钥遭到破坏,攻击者也只能解密该会话,而其他所有会话都将保持加密状态。
在为实现前向保密而设置的协议中,私钥仅在初始握手过程中用于身份验证,除此之外不会被使用。短暂Diffie-Hellman握手将会话密钥与私钥分开生成,所以具有前向保密的特性。
与之相反,RSA并不具备前向保密。在私钥受损的情况下,攻击者能够确定过去对话的会话密钥,因为他们可以解密以明文形式存在的预主密钥以及客户端随机数和服务器随机数。通过将这三者结合起来,攻击者就可以得到任何指定的会话密钥。