HTTPS那些事儿(一),网络中的身份证——SSL证书!

从事web开发的程序员应该没有人没听过http和https这两个词,就算不是很熟悉也应该会知道https比http安全,https是加密的,且将成为主流未来将会取代http等。


稍微了解一点的还会知道https和http最大的区别就是前者在http协议的基础上套了一层SSL/TLS协议,用SSL/TLS协议加密http报文后再传输。今天我们就来谈谈SSL/TLS协议的核心——证书


SSL/TLS简单科普

SSL(安全套接层,英语:Secure Sockets Layer,缩写:SSL),进化版叫TLS(传输层安全性协议 英语:Transport Layer Security,缩写:TLS),这两个统称SSL/TLS协议,是一种非对称加密协议,被广泛地用于Web浏览器与服务器之间的身份认证和加密数据传输。


简单来说,这个协议在web中的应用原理就是客户端(如:浏览器)向服务器传输HTTP报文前会先向服务器发起请求说:


我要用SSL协议和你通信了!


服务器收到请求后知道客户端要用SSL协议通信并将自己的公钥和证书发送回给客户端,客户端收到服务器发回的证书和公钥,验证证书合法后用服务器给的公钥加密http报文,再传输给服务器。


这个过程和TCP的三次握手很像,事实上这个过程就叫SSL握手。握手完毕后客户端就用服务器的公钥加密HTTP request的报文传给服务器,服务器用私钥解密收到的HTTP request报文,处理完业务逻辑后用私钥加密HTTP response报文再返回给客户端,客户端收到加密的HTTP response报文后用服务器的公钥解密后就是客户看到的网页或数据了。这就是https的工作过程。


SSL证书又是啥?

从上面我们大概知道了SSL协议是怎么运作的,其中的关键就是服务器发给客户端的SSL证书。客户端需要验证这个证书是合法的才能相信收到的公钥确实是自己想访问的服务器的公钥,而不是被哪个病毒网站冒牌顶替了,也就是没有遭到中间人***,验证合法后SSL握手才能建立。


那么证书又是什么?顾名思义,证书就是能证明服务器身份的东西,怎么能证明呢?现实生活中我们又是怎么证明我是我而不是假冒的呢?


身份证!!!


带上户口本去公安局办张身份证,上面有我们的照片姓名性别籍贯出生年月等信息,找工作买车票办银行卡时向别人出示我们的身份证就能证明我是我了,一切需要信用的事都有证可依了。


而SSL证书就是网络中的身份证,服务器有了这个证就相当于我们有了身份证,就能证明自己真的是客户端想访问的服务器而不是假冒的了。


SSL证书是哪来的?

SSL证书就是服务器的身份证,那证书是哪来的?客户端凭什么要相信证书?


我们的身份证是公安局发的,由国家为我们背书,国家的信用那肯定是杠杠的谁都信。


对于SSL证书来说也存在着公安局这一角色来为证书背书,那就是CA(数字证书认证机构 英语:Certificate Authority,缩写为CA)。


CA就是负责发放和管理数字证书的权威机构,服务器想要证书就带上自己的户口本去找CA申请一张证书,CA收到服务器的申请后经过非常严格的核查手续证明服务器确实是那个服务器后就用自己的公章(公钥)给服务器的申请签个名(加密)后一个证书就产生了。


所以服务器发给客户端的证书上还会带有CA的公章(签名),客户端看到CA的公章后就放心了相信服务器的身份了。


看到这你可能又会问了,客户端凭啥相信CA?因为操作系统不管是windows还是linux,出厂时就内置了一个受信任的根证书颁发机构列表,其实就是存着CA的公钥,当服务器说自己的证书是哪个CA发的就拿哪个CA的公钥出来解密看看是不是真的,因为CA的私钥不容易被***窃取。


自签名证书又是咋回事?

CA真好,可是还有个问题:CA不是活雷锋,找CA办证是要钱的,而且这钱还不像我们去办身份证只收个20块工本费:

1.png


这价格真是感人,要是我们有些内网网站或者我们开发时要调试需要用SSL协议也花这个钱那不是很浪费?难道除了充钱就没别的方法了?还真有,那就是自签名证书。


我们已经知道CA就是互联网中发身份证的公安局,但CA和现实中的公安局还是有区别的。现实中的公安局只有一个,那就是中华人民共和国的公安局,其他机构发的身份证都是假证还是犯法的。


然而互联网中的CA就有很多家,甚至是个人都可以自己刻个萝卜章自建CA,而这种自建CA签发的证书就叫自签名证书。然而操作系统只认受信任的根证书颁发机构列表里的那几个CA,我们自己刻萝卜章建的CA对于操作系统来说是不安全的,所以在浏览器打开这种用自签名证书的网站就会收到下面的红牌警告:

2.png

但不论如何,钱是省下来了!


最后

关于SSL证书的科普就到这,我们大概知道HTTPS中用到的证书是咋回事了,也知道对于我们开发者来说最常用到的其实是自签名证书,可自签名证书也不是能随便生成的,下回我再给大家介绍一下如何生成自签名证书。


作者:陈喜科

出品: 嘉为科技


其他优质文章

运维流程管理:保障运维管理效能的推手

【案例分析】如何实现企业SSL证书有效管理和监控?

【华润创业】快消品牌与消费者间的距离,是一支优秀的数字化团队!

如何基于Artifactory搭建私服?



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章