Week10 - HTTPS的S到底怎么运作的,为什么非对称金钥需要数位签章来组成凭证呢 - 资安介绍篇 [Server

小明: OK,我已经申请好HTTPS的凭证了,只要把ca_bundle.crt, certificate.crt, private.key放入Server我们网站就有HTTPS啰。

小美: 太好了,是说这三个档案到底是什么呢?

小明: ㄜ ...我记得HTTPS是用非对称式加密,会有把公钥,有把私钥,然后浏览器端透过公钥加密,然后传到Server上透过私钥来解密,对吧?

小美: 可是这三个档案好像不是非对称式加密那么简单,certificate.crt叫做凭证,ca_bundle.crt叫做中间凭证,我压根没看到公钥的档案啊。

小明: ...让我Google一下...

不知道大家是否有遇到以上状况,我在以前透过凭证来替Server安装HTTPS时,其实我只是将凭证安装完毕,但是并不知道实作内容到底是什么样子,这篇文章就来介绍一下HTTPS的概念。

将会介绍

非对称式加密数位签章凭证的作用实际上HTTPS是怎么运作信任链

非对称式加密

我们可以先有个简单的观念就是:

资料可以透过公钥加密,但无法透过公钥解密,只能透过私钥解密。
资料可以透过私钥加密,但无法透过私钥解密,只能透过公钥解密。

因为只能靠不同把钥匙解密,所以我们称为「非对称」

为什么要这样呢?

因为如果可以靠「同一把」钥匙解密,虽然我们理想上可以透过下图加密资料:

但实际上很容易因为钥匙被拦截,而导致资料外洩:

所以需要非对称加密

如果加密资料不能用「同一把」钥匙解密,就可以避免这个问题了,所以套到拦截的情境会变成下图:

但是攻击者如果有自己的公钥与私钥呢?

这是个更棘手的状况,因为攻击者可以趁机替换小明拿到的公钥,如下图:

小明的资料还是照样被偷走了,那要怎么办呢?

我们需要一个公正的第三方证明,此公钥是此Server的

所以我们需要凭证证明此公钥,而证明的方法就是「数位签章」

我们可以先有个简单的概念:

凭证 = 公钥 + 此公钥是属于哪个Server的资讯 + 数位签章

我们的公钥可以透过一个有公信力的第三方来证明是此Server的公钥,而不是来路不明的攻击者,此方法是透过数位签章。

数位签章与加密相反,他是透过「私钥加密,公钥解密」,他让我们的公钥是有第三方签名的,如图:

这个签名拥有这个公钥的属于哪个Server的资讯,而签章要解密就需要公钥,所以我们的浏览器都有这些「第三方公钥库」,浏览器配合第三方公钥库可以这样验证凭证:

所以套回攻击者的情境就会变成下图:

小明的浏览器就会跳出下图,就是说明此凭证不是第三方公钥库拥有的:

在攻击者无法进行任何攻击手段时,正常安全的Client与Server沟通流程如下:

有趣的是,其实不止浏览器,我们的任何程式,都有类似的第三方公钥库去验证HTTPS的签章是否符合正常,比如说Node.js在询问到没看过的HTTPS签章时就会出现下图:

实际上HTTPS是怎么运作

接下来,介绍一下HTTPS实际怎么运作,

其实Client并不会每次都用非对称加密与Server沟通,只有在「第一次」,而已,可以参考此篇文章

里面的图讲解的很清楚,在此贴上

图的意思整体是说:

透过「非对称式加密」,让浏览器可以「安全的」传送一个钥匙给Server,我们称为Session KEY,之后浏览器与Server沟通就透过此Session KEY来做「对称式加密」

为什么要这样呢?因为非对称式加密的数学演算较久,而对称式加密较快,我们可以透过非对称式加密来达到「安全传送钥匙」的效果,再透过此钥匙用一般的对称加密,就可以又快又安全了~

信任练

虽然我们整个流程貌似完全安全了,但还有最后一个破口,就是「第三方」,如果第三方的私钥被偷窃,那所有透过此第三方签出去的凭证都会有安全上的危险,因为偷窃者可以使用此私钥来製作一模一样的签章。

那要怎么分散风险呢?最简单的方法就是:

不要很常用这个我们称为「根凭证」的原始私钥,把他一直藏着,就不会被偷啦!

是不是让人觉得这方法很没技术性?但仔细想想,这的确就是最根本的解决办法xdd,我们可以看看知名的第三方组织Let's Encrypt的根凭证保护方法,是将根凭证「离线储存在安全地点」,

但我们还是需要签证呀,总不能每次签证都要请人员跑道安全地点拿私钥来签证吧,为此第三方会再做出多组公私钥,并用根凭证的私钥签这些公钥,这些签完的公钥就将我们称为「中间凭证」,根凭证的私钥签完就可以先离线储存在安全地点了,我们后来的签证都靠中间凭证的私钥来做。

如果我们Server去请第三方帮忙签章,第三方都会用此中间凭证的私钥来签章,这样一来,如果中间凭证的私钥被偷,也只有被这组签发的凭证会报销。

小叮咛

这边提出我当初学习常常有的误解:

HTTPS的作用用来保证Client与Server沟通的安全,但没办法确保Server不对Client做坏坏的事。HTTPS能保证Client与Server沟通时资料不会外洩,但如果攻击者在拦截封包时直接将封包丢掉,那Client还是收不到封包,这不是HTTPS要解决的事情。HTTPS跟资料库的明码没有关係,并不会因为有HTTPS而导致资料库的明码受到加密。

谢谢你的观看,也欢迎指正交流~感谢!


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章