SSL如何工作?我刚刚意识到我们实际上并没有确定的答案,这是值得报道的。 我希望看到详细信息: 协议的高级描述。 密钥交换如何工作。 如何执行真实性,完整性和保密性。 拥有CA的目的是什么,以及他们如何颁发证书。 涉及任何重要技术和标准(例如PKCS)的细节。 一般 SSL(及其后继者,TLS)是一种直接在TCP之上运行的协议(尽管也有基于数据报协议的实现,如UDP)。这样,更高层(例如HTTP)上的协议可以保持不变,同时仍然提供安全连接。在SSL层下面,HTTP与HTTPS相同。 正确使用SSL / TLS时,攻击者可以在电缆上看到您连接的是哪个IP和端口,大致发送了多少数据以及使用了哪种加密和压缩。他也可以终止连接,但双方都知道连接被第三方中断。 在典型的使用中,攻击者也将能够找出你连接的主机名(但不是URL的其余部分):虽然HTTPS本身不公开主机名,但你的浏览器通常需要创建一个DNS首先请求找出发送请求的IP地址。 协议的高级描述 建立TCP连接后,SSL握手由客户端启动。客户端(可以是浏览器以及任何其他程序,例如Windows Update或PuTTY)会发送多种规格: 其中SSL的版本/ TLS正在运行, 它想要使用什么密码套件,以及 它想要使用什么压缩方法。 服务器检查它们支持的最高SSL / TLS版本,从客户端的一个选项(如果它支持一个选项)中挑选一个密码组,并且可以选择一种压缩方法。 在此基本设置完成后,服务器发送其证书。该证书必须由客户自己或客户信任的一方信任。例如,如果客户信任GeoTrust,则客户可以信任来自Google.com的证书,因为GeoTrust以加密方式签署了Google的证书。 验证了证书并确定这台服务器真的是他自称的人(而不是中间的人),交换了一个密钥。这可以是一个公钥,一个“PreMasterSecret”或根本就没有,取决于选择的密码套件。现在服务器和客户端都可以计算对称加密 的密钥,而PKE?。客户端告诉服务器,从现在开始,所有通信都将被加密,并向服务器发送加密和认证消息。 服务器验证MAC(用于身份验证)是否正确,并且消息可以正确解密。然后它返回一条消息,客户端也会对其进行验证。 握手现在已经完成,两台主机可以安全通信。有关更多信息,请参阅technet.microsoft.com/en-us/library/cc785811和en.wikipedia.org/wiki/Secure_Sockets_Layer。 要关闭连接,请使用close_notify’alert’。如果攻击者试图通过完成TCP连接(注入一个FIN数据包)来终止连接,则双方都会知道连接不正确终止。这个连接不能被破坏,只是被打断了。 一些更多细节 为什么您可以信任GeoTrust来信任Google.com? 一个网站想要安全地与你沟通。为了证明它的身份并确保它不是攻击者,你必须拥有服务器的公钥。但是,您几乎不能存储全球所有网站上的所有密钥,数据库将会非常庞大​​,并且更新必须每小时运行一次! 解决方案是证书颁发机构,简称CA。当您安装操作系统或浏览器时,可能会附带一个可信CA列表。这个列表可以随意修改; 您可以删除不信任的人,添加其他人,甚至可以创建自己的CA(尽管您将是唯一一个信任此CA的人,因此它对公共网站没有多大用处)。在此CA列表中,CA的公钥也被存储。 当Google的服务器向您发送证书时,它也会提及它由GeoTrust签署。如果您信任GeoTrust,您可以验证(使用GeoTrust的公钥)GeoTrust确实签署了服务器的证书。要亲自签署证书,您需要只有GeoTrust才知道的私钥。这样攻击者不能自己签署证书,并且不正确地声称自己是Google.com。当证书被修改了一位时,该标志将不正确,客户端将拒绝它。 所以如果我知道公钥,服务器可以证明它的身份? 是。通常,公钥加密和私钥解密。使用服务器的公钥加密消息,发送消息,如果服务器可以重复回复原始消息,它只是证明它获得私钥而不泄露密钥。 这就是为什么能够信任公钥非常重要的原因:任何人都可以生成私钥/公钥对,也是攻击者。你不想最终使用攻击者的公钥! 如果您信任的某个CA遭到入侵,攻击者可以使用被盗私钥为他们喜欢的任何网站签发证书。当攻击者可以向您的客户端发送伪造的证书时,他自己用您信任的CA的私钥签名,您的客户端不知道公钥是伪造的,并且使用被盗私钥签名。 但CA可以让我相信他们想要的任何服务器! 是的,那就是信任的来源。你必须相信CA不会根据自己的意愿制作证书。当微软,苹果和Mozilla等组织信任CA时,CA必须进行审计; 另一个组织会定期检查它们以确保所有内容都按照规则运行。 只有在注册人可以证明他们拥有颁发证书的域名的情况下,才会颁发证书。 什么是MAC用于消息认证? 每条消息都使用所谓的消息认证码(简称MAC)进行签名。如果我们同意密钥和哈希密码,则可以验证我的消息来自我,并且我可以验证您的消息来自您。 例如,使用“正确的马电池钉”键和“示例”消息,我可以计算MAC“58393”。当我用MAC发送这条消息给你(你已经知道密钥)时,你可以执行相同的计算并将计算出的MAC与我发送的MAC进行匹配。 攻击者可以修改消息,但不知道密钥。他无法计算正确的MAC,并且您会知道该消息不是真实的。 通过在计算MAC时包含序列号,可以消除重播攻击。SSL执行此操作。 你说客户端发送了一个密钥,然后用它来建立对称加密。什么阻止攻击者使用它? 服务器的公钥确实。既然我们已经证实公钥真的属于服务器而不是其他人,我们可以使用公钥对密钥进行加密。当服务器收到这个消息时,他可以用私钥解密。当其他人收到它时,他们不能解密它。 这也是密钥大小很重要的原因:公钥和私钥越大,破解客户端发送到服务器的密钥就越难。 如何破解SSL 总结: 尝试用户是否忽略证书警告; 应用程序可能会从未加密的通道(例如http)加载数据,这些数据可能会被篡改; 提交给HTTPS的未受保护的登录页面可能会被修改,以便提交给HTTP; 未打补丁的应用程序可能因BEAST和CRIME等攻击而受到攻击; 诉诸其他方法,如物理攻击;