我知道这样一个事实,即SSL\TLS会话可以在没有SSL证书的情况下继续进行,这意味着您传递加密的数据,但是您没有真正与谁一起工作的坚实基础。
这是如何进行的?
当使用PuTTY连接到端点时,SSL通信过程与我在安全会话上与web服务器通信时有所不同吗?
发布于 2012-01-15 15:14:33
SSL/TLS从一个名为握手的过程开始,在这个过程中,客户端和服务器商定他们将使用哪种加密算法(密码套件),并执行一些非对称密码魔法来建立共享秘密,在会话期间,该秘密将用于对随后交换的应用程序数据进行对称加密和完整性检查。
通常,“密钥交换”位假定:
服务器证书的困难之处在于,服务器需要在客户端将接受的证书中拥有他的公钥。由于客户端接受基于其签名的证书,并根据有限的一组先验已知公钥(“根验证局”的密钥)进行验证,只有通过向所述验证局询问,才能获得适于验证的证书。大多数CA只会以一个价格(StartSSL将免费)这样做。如果您控制客户端代码,事情就更简单了,因为您可以在客户机中添加自己的“根证书”,实际上,还可以管理自己的CA并颁发自己的证书。这仍然是关键管理(可怕的公钥基础设施),因此,需要一个非零的成本。
您可以通过两种方式进行“无证书”SSL:
您可能会注意到,当Web浏览器看到一个自签名的证书时会大喊大叫,但它也会允许(在“我知道我在做什么”按钮上点击几次之后)安装一个“异常”,通过该异常,客户端接受使用未经验证的证书。例外的好处是,它可以永久化:服务器存储违规证书的副本,下次客户端连接到同一台服务器,服务器发回完全相同的证书时,客户端不再抱怨。除了已安装的异常外,还有一个弱点窗口(即,当用户决定“安装异常”时:当时,他并不真正知道证书是正确的,还是干预攻击者的证书),但随后恢复了安全性。
(这仍然是一个质量问题的想法,通过安装异常来训练用户绕过可怕的警告。)
油灰不是SSL客户端;它使用的是SSH协议,它在概念上类似于SSL协议,但实际上不同于SSL协议。SSH协议没有证书,因为它依赖于与我前面描述的模型相同的自签名证书和安装的异常。当您第一次连接到给定的服务器时,SSH客户端(Putty)将在接受服务器公钥之前请求确认,通常会显示公钥的“指纹”(一个散列值),以便您可以将该指纹与预期值(您知道“带外”,例如您背诵了它,或者您打电话给sysadmin并为您拼写出来)进行比较。然后,SSH客户端将永久记录公钥,不再要求确认--但如果给定的用户突然使用不同的公钥,SSH客户端将比面临新的自签名证书的Web浏览器更大声地哀号。
https://security.stackexchange.com/questions/10680
复制相似问题