从事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块工本费:

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

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

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

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

最后

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

作者:陈喜科

出品: 嘉为科技

其他优质文章

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

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

如何基于Artifactory搭建私服?

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

  1. 我是如何将网站全站启用Https的?-记录博客安装配置SSL证书全过程

    评论»   文章目录 为什么要Https 如何选择Https 安装部署SSL证书 平滑过渡Https 搜索引擎的响应 启用Https小结 正如大家所看到的,部落全站已经启用了Https访问了,连续几天 ...

  2. Web主机管理器(WHM)中如何安装SSL证书

    Web主机管理器(WHM)使用一个基于Web的应用程序,可帮助管理Web服务器上的托管账户.在Web主机管理器中如何安装SSL证书? 这里需要先购买SSL证书,选择受信任的CA机构(Digicert. ...

  3. 网络--keytool自签名SSL证书(免费)以及私钥签名、公钥验签

    本文主要介绍keytool自签名SSL证书(免费)以及私钥签名.公钥验签流程,点击查看keytool CA签名SSL证书(收费) 最近给银行做一个系统,虽说是给行内使用的,但是系统要同时支持内外网方式 ...

  4. asn1 pem pfx格式证书_Springboot中详细配置SSL证书

    一.为什么要部署SSL证书: 目前互联网采取的是全网强制SSL,尤其是微信开发.APP开发.谷歌等都是强制的,为确保数据安全性,把http请求改成HTTPS(URL https://而不是http:/ ...

  5. 在Spring Rest模板中跳过SSL证书验证

    使用Spring Rest模板时如何跳过SSL证书验证? 配置Rest Template,以便它使用Http Client创建请求. 注意:如果您熟悉sun.security.provider.cer ...

  6. 如何通过https访问网站(也就是如何部署SSL证书)

    SSL证书是由受信任的证书颁发机构(CA)颁发的,可以实现数据加密传输,防止信息在传输中被监听.截取和篡改,还能向用户证明网站的真实身份,防止被钓鱼网站攻击. 这里用宝塔举例子,比如现在你的网站是ht ...

  7. x509证书_从Linux shell提示符中查看TLS/SSL证书有效期

    $ openssl s_client -servername {SERVER_NAME} -connect {SERVER_NAME}:{PORT} | openssl x509 -noout -da ...

  8. npm install xxxx --legacy-peer-deps 命令 和 node中axios忽略SSL证书解决方案

    npm i 下载依赖 在npm版本高于8之后,会出现 npm install / npm install XX下载依赖的操作,会遇到无法解析依赖树的问题(依赖冲突): 用命令npm install - ...

  9. 网站http改https Let’s Encrypt 安装 续期教程 免费ssl证书Let’s Encrypt使用教程Certbot...

    为什么80%的码农都做不了架构师?>>>    Certbot项目地址https://certbot.eff.org/ 一.安装 先选择你的web服务器程序和操作系统: 就会出来适合 ...

最新文章

  1. Smali语法简单介绍
  2. Numpy:利用Numpy库建立可视化输入的二次函数数据点集np.linspace+np.random.shuffle+np.random.normal
  3. 下述有关计算机网络的描述错误的是6,下述有关计算机总线的描述错误的是( ) 。...
  4. 解决创建maven项目后,不能创建scala
  5. 心理医生给女人的忠告
  6. noip2016的研究
  7. 【转】ASP.NET ViewState详解
  8. 微博云原生运维如何快速应对热点流量峰值?
  9. ubuntu18使用wine安装TIM和微信
  10. python中ctype的应用,协议解析,C语言与python的完美映射,结构体与字符串的相互转换
  11. 家长如何使自己的孩子轻松快乐地学好数学和英语?
  12. 关于企业微信二次开发
  13. 设计一个几何图形的面积计算器,希望这个计算器可以计算圆和矩形等图形的面积
  14. 高校自主招生计算机要求,2019各高校自主招生报名条件及考核内容
  15. UE4学习之VR(三)
  16. 非常有用的制作logo的网站
  17. TRUNCATE,DORP,DELETE
  18. CDH-TXKT-集群的监控和故障诊断
  19. 《iOS开发进阶》读书笔记
  20. excel里面身份证号显示不全

热门文章

  1. Thunderbird邮件客户端,支持直接另存为模板
  2. Java实现为手机号码或身份证号码打星号
  3. 创新工场汪华:OMO时代,谁是下一个领跑者?
  4. id=%d是什么意思呢?
  5. 语句-python while,for
  6. Dell LATITUDE E5410笔记本Ubuntu无线网卡BCM43224驱动安装(原创)
  7. C#界面美工IrisSkin2+button美工
  8. LGP (Local Gradient Patterns)特征匹配算法
  9. javaj经典程序编程50题
  10. Unity编程笔记----音效管理器