TLS/X509和双向认证

接下来的故事解释了TLS和X509证书解决的问题。

最近,我不得不在MySQL主、备服务器之间设置双向TLS身份认真,这让我第一次有机会真正地设置和运行CA,并实现双向身份认证。

这是个非常不错的经历,我想在这里总结并扩展一下我学到的一些东西。首先声明:这并不是为了100%准确地反映规范而写的。相反,为了抽象在某些地方做了简化。希望在提及术语的地方有链接,可以找到更具体的含义。

数据安全问题

在定义计算机如何通信时,可以合理地假设信息将从一台计算机直接发送到另一台计算机。如下图计算机“Alice”向计算机“Bob”发送一个访问网站的请求:


计算机之间如何通信

然而,实际情况并非如此。两台电脑直接连接在一起是极其少见的;通常,中间有许多计算机(通常称为“路由器”或“防火墙”或任何数量的其他类似设备”)。它看起来更像:


计算机实际通信情况

这给计算机Alice和Bob带来了一个问题。首先,他们不能确定Alice和Bob之间的计算机没有记录正在说什么,如果Alice向计算机“Bob”发送一条消息,“Bob”不能确定看似由计算机“Alice”发送的消息,实际上真的是由“Alice”发送的,也不能确定收到的消息是未经串改的。
幸运的是,有一种机制可以解决这个问题。

TLS(传输层安全协议)

为了解决上面的问题,自1996年以来,传输层安全协议(TLS)及其前身安全套接字层(SSL)就已经存在。如前所述,有两组问题需要解决:

确保数据转发过程不被读取

为了确保数据不被位于网络连接中间的计算机读取,发送数据需要加密。加密是对信息进行编码的过程,只有那些应该能够阅读和理解它的人才能阅读和理解它。为了来回传递信息,两台计算机需要决定如何对数据进行加解密,以便只有它们能理解,而中间的计算机不能。

接着上面的例子,为了和Bob安全发送数据,Alice需要知道一些加密数据的方法,而且只有Bob可以解密。这是一个鸡和蛋的问题;如何共享这个加密方法,仍然是一个难题。解决方案在于一个名为“公钥加密”的过程。

不需要深入了解内部是如何工作的,只需知道Bob有一个用来编解码信息的密钥。Bob的密钥分成两部分:

  • 公共部分:用于加密数据;
  • 私有部分:用于解码数据;
    这就允许Bob将这个密钥的公共部分发送给Alice,Alice可以使用它来编码和发送只有Bob可以读取的信息。这些密钥也称为“密钥”一个公钥和一个私钥。

第一步,Alice需要请求Bob的公钥。这个过程被称为非对称加密,看起来像这样:


Alice和Bob之间的计算机无法解码公匙加密的信息

但是,这个过程有一个缺点:不能实现Bob向Alice发送只有Alice能读到的消息。为了回复Alice的消息,Bob需要一个只有Alice能理解的密钥。

Alice知道她可以发送只有Bob能解码的信息。所以,她可以利用这一点向Bob发送一些秘密信息,这些信息可以被Alice和Bob用来对彼此之间的信息进行加密。

该秘密信息就是对称密钥。这个密钥在Alice和Bob之间共享,可以用来解码任何一方发送的消息。这就实现了两种方式的加密连接。



上图中:Alice首先拿到Bob的公钥,然后通过公钥加密向Bob发送对称加密的密匙,之后就使用对称密匙加密要发送的信息。这里非对称加密的过程,目的是为了安全地共享后面要用的对称加密密匙。因此、不用担心是否有人在监听他们的连接。只有Alice和Bob有用于解码这些消息的对称密钥!

但是,这个过程有一个缺陷:我们如何确保Bob就是Bob?

确认Bob是本人(服务端身份验证)

在上述例子中,我们知道Alice通过计算机网络与Bob对话。然而,如果其中一台计算机突然开始假装是Bob,会发生什么?



如果Alice事先不认识Bob,那么她不可能知道“Bob”就是“Bob”。Alice会和任何假装是Bob的人建立一个加密连接。确实,虽然这里没有显示,对Bob来说中间的一个计算机可以伪装成Alice,而对Alice来说它可以是Bob!这就是所谓的“中间人攻击”。

然而,TLS标准有一部分是设计用来解决这个问题的。具体来说,当Alice第一次向Bob表示她想通过一个加密连接开始对话时,她不仅要求Bob提供公钥,而且要求他提供一个证明他是谁的证书(X.509证书)。然后,Alice向一个称为“证书权威机构”的可信顾问咨询Bob是否合法,并根据权威机构的认证决定是否继续通信。


通过CA验证Bob身份

如果证书不是由权威机构担保的,那么Alice将简单地拒绝连接。


证书未通过CA的验证结束连接

确认Alice是本人(客户端身份验证)

对Alice来说,现在通信是愉快的,而且相当安全。她知道与她交谈的Bob是真正的Bob,只有她和Bob可以看到发送的信息。然而,Bob不能保证Alice的身份。
每个连接都有两个方面:

  • 客户端:上面的例子指的是Alice,她先发起消息。
  • 服务点:上面的例子指的是Bob,向客户端返回消息。

验证服务端身份是一个非常常见的操作。的确,当你浏览这篇文章时,很可能你的浏览器就验证了你看到的博客网站就是它声称的那个博客网站。验证Alice身份实际上是一个不太常见的操作,但通常称为“Mutual TLS authentication”,因为Alice和Bob都需要验证。

考虑这样一个场景,Bob希望从Alice那里得到一些敏感的数据,可能是医疗数据或类似的数据。然后Bob会处理这些数据然后对Alice的情况做出诊断。在这种情况下,Bob肯定想确定Alice是真实的Alice,而不是编造假的诊断数据!

幸运的是,前面提到的TLS标准可以很容易地扩展为包括对Alice和Bob相同的验证过程:


现在,Alice和Bob都能保证他们就是他们所联系的那个人(由他们的证书权威机构担保),并且连接是加密的,这个连接可以说是非常安全的。

总结:

传输层安全性协议(Transport Layer Security, TLS)和X.509证书在第一次遇到时看起来像是很神奇的东西,以某种方式提供安全性,但不清楚具体如何提供安全性或为什么提供安全性。在使用了几次并进行必要的调试之后,让所有内容正确地通信就变得更简单了。希望这篇文章能够让你对理解HTTPS连接变得更加简单。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,295评论 6 512
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,928评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,682评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,209评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,237评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,965评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,586评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,487评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,016评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,136评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,271评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,948评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,619评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,139评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,252评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,598评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,267评论 2 358

推荐阅读更多精彩内容