SSL入门指南
由 Mux 主办的 DEV 全球展示挑战赛:展示你的项目!
如今许多网站都有那个很酷的绿色锁形图标和 HTTPS(即基于 SSL 的 HTTP),但 SSL 究竟有什么好处呢?
1. 问题
每项技术都旨在解决问题,SSL 也不例外。
当用户在家连接到 Facebook 或 Google 等网站时,网络服务器和浏览器之间发送的消息会经过路由器、代理服务器等多个设备。其中任何一个设备都可能被攻破,这种攻击被称为中间人攻击(MITM)。
我们需要解决两个问题:
- 传输的数据不安全,可以被读取/修改。
- 客户端无法确定他们是在与真正的服务器通信,还是与冒充服务器的人通信。
2. 什么是 SSL?它能起到什么作用?
SSL(安全套接字层)是一种安全协议,它在客户端和 Web 服务器之间建立加密连接。SSL
可以:
- 使用加密技术确保信息传输安全。
- 通过 SSL 证书验证服务器身份
我们举个例子,Alice 是上网的客户端,Bob 是服务器,Eve 是恶意的中间人攻击者。现在我们来看看 SSL 如何帮助 Alice 和 Bob。
使用加密技术进行安全消息传输。
基本思路是:Alice 和 Bob 可以想出一个共享的密钥,并使用AES、DES、3DES 等对称加密算法来隐藏他们的消息。
但是,在Eve的监视下,Alice/Bob如何才能安全地交换密钥呢?答案是:非对称加密。
非对称加密 是一种使用两个密钥的加密方式: 公钥 (可以公开分发)和 私钥 (只有所有者知道)。用任一密钥加密的数据只能 用 另一个密钥解密。
在初次联系时,Bob 向 Alice 发送了一个SSL 证书,其中包含他的公钥和一些元数据(我们将在验证服务器的身份部分讨论它)。
然后,Alice 可以生成一个共享的秘密密钥,用 Bob 的公钥对其进行加密,然后发送给 Bob,只有 Bob 可以使用他的秘密密钥进行解密,Eve 不能。
现在双方已经安全地交换了密钥,可以开始使用对称加密了。
问:为什么不全程使用非对称加密呢?
A:性能方面,非对称加密需要更高的计算成本。
通过 SSL 证书验证服务器身份
如前所述,Alice 通过 SSL 证书接收 Bob 的公钥。那么它是否存在 Eve 中间人攻击的风险呢?简而言之:从技术上讲,Eve 无法攻击它,Alice 可以在客户端验证证书并决定是否信任它。
SSL 证书是由受信任的第三方(称为CA,即证书颁发机构)颁发给 Bob 的域名的数字文档。
SSL证书包含Bob的公钥和元数据(域名、组织机构等)。证书颁发机构(CA)会验证这些信息,确保证书中的公钥与Bob的私钥匹配,然后使用其私钥对证书进行签名,生成数字签名,从而防止证书日后被篡改。
下图很好地描述了数字签名:
如果Eve试图修改公钥,她将无法生成新的签名。之后,Alice只需使用CA的公钥验证签名,如果验证成功,则证明该证书确实来自BOB且未被篡改。
浏览器从哪里获取CA的公钥来验证签名?
它已经在客户端浏览器或操作系统中了。
CA 拥有自己的证书,其中包含浏览器可以用来验证网站 SSL 证书上数字签名的公钥。
有根 CA 和中间 CA。
- 根证书颁发机构 (Root-CA):默认的受信任证书颁发机构集合,它们的证书称为根证书,存储在用户的浏览器或操作系统中。浏览器可以从本地获取它们的公钥。根证书颁发机构会对其自身证书进行签名,即自签名证书。
- 中间 CA:可以看作是子 CA。它们的证书由根 CA 签名。它们可以像往常一样签署网站的证书,也可以颁发另一个子节点证书。如果证书由中间 CA 签名, Bob 需要向 Alice 提供所有中间 CA 的证书(递归地),以及他自己的 SSL 证书,因为 Alice 已经拥有根 CA 的证书,所以不需要提供根 CA的证书。这样就形成了一个信任链。
如果证书的信任链指向本地根 CA,则网站会显示漂亮的绿色锁;否则,浏览器将显示警告“证书不是由受信任的 CA 颁发的”。
例如,您可以自行检查,StackOverflow的证书由Let's Encrypt (一个中间 CA)签名,而其证书由Digital Signature Trust Co (一个根 CA)签名。
3. 那么,在哪里可以获得 SSL 证书呢?
哦,现在我不得不提一下,天下没有免费的午餐,你可能需要付费才能获得它,可以去Digicert查询一下。
但你喜欢免费的东西,所以你想在真正花钱之前先测试一下也是可以理解的。Let 's Encrypt是一个不错的免费解决方案,缺点是他们的证书只有 3 个月的有效期,之后你就需要续订。
当然,CA 可能会被攻破并造成安全风险,但那是另一个问题。
就这些了,因为我想尽量简短,所以我尽量避免深入探讨任何细枝末节,但我尽力包含了关键词。
文章来源:https://dev.to/tdx/beginner-s-guide-to-ssl-351j