ssl - 为什么我需要 SSL 证书?
问题描述
我有一个简短的问题:为什么我需要SSL 证书(我的意思是只有证书而不是 SSL 连接)?
就我而言,谷歌浏览器检测到连接是加密且安全的,但一切都是红色的,因为我自己创建了证书。 如果连接是安全的,为什么我需要 SSL 证书?
解决方案
仅仅因为 192.168.xxx.xxx 的流量没有离开您的网络边界并不意味着它是安全的。
尤其是如果您将 BYOD 连接到网络(即使没有,您也不想成为内部多汁的硬壳),有人可能会携带受损的笔记本电脑或手机,将其连接到网络,病毒可以拦截网络上发生的一切(参见firesheep)。
所以你必须假设网络是恶意的——把你的局域网当作互联网来对待。
所以现在问题又回来了——为什么我不能依赖自签名证书(在本地网络和互联网上)?
那么,你在保护什么?TLS (SSL) 可以防止两件事:
拦截 - 即使我 MITM 您(我成为您的路由器),我也无法读取您发送和接收的内容(因此我无法读取您的信用卡号或密码)
欺骗 - 我无法在您和服务器之间注入代码。
那么它是怎样工作的?
我连接到服务器并获得由 CA 签名的证书。这个 CA 被浏览器认为是信任的(他们必须经过各种审计才能获得这种信任,如果他们破坏它,他们就会被驱逐)。他们验证您控制服务器,然后签署您的公钥。
因此,当客户端从服务器获取签名的公钥时,他知道他将加密只有目标服务器才能解密的消息,因为 MITM 无法用自己的公钥替换服务器的(他的公钥不会由 CA 签署)。
现在您可以安全地与服务器通信。
如果浏览器接受任何SSL 证书(自签名)会发生什么?
还记得浏览器如何区分官方证书和伪造的 MITM 证书吗?由 CA 签署。如果没有 CA,则浏览器实际上无法知道它是在与官方服务器还是 MITM 对话。
所以自签名证书是一个很大的禁忌。
但是,您可以做的是生成一个证书并使其成为“根”证书(实际上,为您的内部计算机启动您自己的 CA)。然后,您可以将其加载到您的浏览器 CA 存储中,并且您将能够通过 SSL 进行通信,而无需通过 letencrypt 之类的东西(顺便说一下,这是企业网络监控工具的工作方式)。
推荐阅读
- python - 如何结合 str 和 int 返回月末的日期?
- mysql - 在 STR_TO_DATE 中运行 MySQL REGEXP_SUBSTR 以从文本中提取日期时遇到问题
- python - 在 Python 中按顺序执行多个 if 语句?
- sql - (SQL 初学者问题)帮助理解 HAVING 和 GROUP BY 是如何应用的
- django - Make it so url can only be accessed through redirect
- javascript - 将表情符号添加到输入
- vue.js - Vue日期选择日期时间不适用于模态
- java - 如果用户具有正确的角色,则显示内容。Spring Java 安全性
- android - 使用导航导航到独立片段
- javascript - 在 Node.js 中执行顺序操作