最近,我偶然发现了对 PKI work-in-action 过程的基本理解。我看过有关原理的主要文章,但我仍然觉得理解这个过程很愚蠢。我知道 PKI 不是为了“我的博客”,而是为了简单起见,让我们通过简单的例子“我的电子商店”(例如 apache 和 php)和简单的概念。我写了一些可能含糊甚至错误的陈述,但这就是我想了解 PKI 过程的内容:
最佳答案
逐一回答这些问题:
(1)“我的网店”作为企业需要
在某些第三方 CA 处“认证”。
这意味着我需要购买某种
该 CA 的 1 年成员(member)资格,以及
然后,他们将注册“我的网上商店”
在他们的系统上发给我一些
像证书和一对这样的东西
唯一的公钥和私钥。
我会得到一些证书文件吗?
是的。此外,这因 CA 而异 - 有些 CA,1 年的成员(member)资格和有效的信用卡就足够了(不难获得,即使您碰巧是一群盗贼),有些 CA 需要一定数量的文书工作以验证您就是您所说的那个人。 CA 的好坏取决于它的客户验证过程,因此通常过程越繁重,CA 越好(且成本更高)。
当您支付了款项并完成了文书工作后,您和 CA 将至少生成两件事:
你会得到两件事之一:
(2) 签发的证书填写我的
信息和公钥并存储在
我的网络服务器上的一些文件。这
证书验证“我的
e-shop”不是盗贼局。
是的……有点。您的网络服务器将需要签名证书和 key 对。 key 对用作与最终用户的 SSL 握手的一部分,该交换证明您拥有 key 对,而不是某些拿到证书的窃贼。这就是您要保护 key 对的原因。
(3) 用户每次访问“我的网店”
通过“https”他们的浏览器
“默默地”检查呈现的
“我的网店”证书
一种在CA注册的。
对于“沉默”的一些定义。基线浏览器检查证书:
- 当前有效
- 由浏览器信任的 CA 签名(或者它拒绝访问或给你一个烦人的弹出窗口)
浏览器附加组件将走得更远,并执行诸如完整路径检查(一直到自签名根)和证书状态检查之类的事情。通过管道共享信息的风险越高,需要进行的检查就越多。
(4) 当有用户进入“我的网店”时
通过 https 会发生以下情况:“我的
e-shop”(网络服务器)公开
用户的 key (PK1)。服务器
默默地出示证书
“我的网店”给用户,所以
用户获取公钥(PK2)
“我的网店”。一阵沉默后
检查用户的浏览器
验证提供的证书和
建立了安全管道。
好的 - 事情在这里出轨了。
有关详细信息,请检查 SSL 协议(protocol) - 握手部分将为您提供确凿的事实。
浏览器和网络服务器确实来回传递信息,让他们创建 session 加密 key 。浏览器确实会生成一些用于设置 session 的起始 Material ,但它不是“用户的公钥 (PK1)”。除非为客户端身份验证配置了服务器,否则用户不需要拥有 PKI 凭据。在正常运行的 My e-Shop 中,服务器有一个 PKI 凭证,浏览器正在为那个 session 动态生成一些关键 Material 。服务器完全不知道浏览器用户是谁,SSL-wise - 所有用户标识都来自密码或应用程序级别的其他东西。
注意:这是针对常规商业交易。风险越高,保护就越大。高风险交易经常需要客户身份验证。
(5) 当用户通过以下方式发送请求时
请求是安全管道
用“我的”公钥加密
电子商店”。然后,Web 服务器解密
请求及其私钥。
然后,Web 服务器发送加密的
使用公钥的响应
用户。最后,浏览器
用户用他的解密响应
私钥。
不完全的。这就是杂草——Web 应用程序的开发人员对所有这些都相对抽象。但是 - session 内容没有使用非对称 key 加密 - 这将是非常消耗 CPU 的。服务器的 PKI 和动态浏览器生成的握手数据用于交换 session 加密 key 。部分原因是客户端选择并发送在服务器的公钥中加密的 secret key 。由于只有服务器拥有私钥,因此只有服务器才能解密客户端发送的数据。
这个 secret key 是对称的(确切地说哪个算法也是握手的一部分)并且用于 session 的剩余部分。
关于apache - 关于公钥基础设施工作流程的一些理解差距,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4854498/