世上根本就没有HTTPS协议,只有HTTP协议。——知乎某答友

某天,收到领导指示:学习一下X.509相关原理。

很多开发者可能和我一样觉得X.509这个词很陌生,但其实我们经常和它打交道,属于典型的“日用而不知”的东西。

那么X.509是什么呢?
X.509是一种数字证书格式标准
应用很广泛,现在HTTPS依赖的SSL证书使用的就是使用的X.509格式。这也就是说,每当我们打开https开头的网站都会用到它。

格式标准

简单地说,格式标准就像写HTML文件时的规范:开头声明文档类型,html作为根标签,元信息放在head标签中,页面内容放在body标签中等等。
当然这个例子不是那么贴切,因为实际上不按照这个格式编写的html文件浏览器也能解析出来。
更贴切的例子应该是JSON文件格式,规定了嵌套关系必须用大括号,数组必须用中括号,字符串必须用双引号等等,如果违反了一条其中的规则,那么就无法被正确的解析。

这个标准的具体内容是什么呢?
X.509规定的格式大致如下:

版本号
序列号
签名算法
颁发者
证书有效期开始日期终止日期
主题
主题公钥信息公钥算法主体公钥
颁发者唯一身份信息(可选)
主题唯一身份信息(可选)
扩展信息(可选)
签名

下图是某网站的 X.509 证书信息

数字证书

那么数字证书又是什么?
简单的说,数字证书就是通过加密算法来制造的一个网络“身份证”,用来证明通信方的真实身份。
这个“身份证”的制作过程也很有意思,并不是由一个机构统一发放,而是层层颁发。
比如 A 持有了可信证书,那么它颁发给的 B 的证书也是可信的, B 再颁发给 C 的证书也是可信的。
整体结构很像数据结构中的“树”,其中 A 的证书为“根证书”,B 的为“中介证书”,C 的为“终端证书”。
而 A、B 都被称作认证机构,简称 CA(Certificate authority)。

 根证书|
中介证书|
终端证书
  • 根证书:通常预先安装在操作系统和浏览器中,是由大公司和政府联合制作的(用户也可以自己制作,但是会有安全风险),作为证书链的起点。
  • 中介证书:持有中介证书的CA主要负责给终端颁发证书,这些终端证书既有收费的也有免费的,免费终端证书一般使用期限是1年。
  • 终端证书:终端证书一般就是我们在浏览器上可以查看到的证书,通常用于具体网站服务中。这类证书不会再用作颁发新的证书。

每个证书都可以沿着树往上追溯到根证书,从而形成一条信任链。
比如下面这种图就是某网站证书的信任链信息。

关于 X.509 的内容就分享完了。

但是心中的疑惑驱使着我继续探索,这证书靠谱么?
如果黑客伪造认证机构给木马网站颁发证书呢?

安全机制

证书采用的是一种非对称加密机制来保证信息不被窃取和复制。

加密技术

这里稍稍解释下非对称机密,先说说密码学。

信息加密的需求其实一直都存在,从古代开始就使用各种技术来加密重要的信息,但是古代的加密安全程度都是基于加密方式的。

也就是说,别人如果知道了加密方式,那么就可以解密密文信息。

而现代的加密技术安全性在于密钥的安全,也就是说加密方式(算法)是公开的,只要密钥不被窃取或泄露,信息就是安全的。

虽然加密算法有很多种,但是大致上可以分为两类:对称加密和非对称加密。

对称加密的通信双方都是用同一个密钥进行加解密,而非对称加密则要求使用不同的密钥进行加密和解密。

再回到证书的颁发过程,现在很多云服务厂商都提供了申请数字证书的功能,它会像CA发起申请,CA收到申请之后,做了下面的事情:

  1. 使用加密算法生成公私钥对。私钥一般是以.key为后缀名的文件,公钥存储于以.csr结尾的文件中。
  2. .csr文件中补充一些信息比如有效期限等,颁发者,并用自己的私钥对证书进行签名。这样就生成符合X.509格式的证书。
  3. 用户收到证书后,在web服务器(或负载均衡等设备)上进行部署。

SSL证书

符合X.509格式的证书有多种,这里以SSL证书为例。

常见的场景会是下面这样:

  1. 客户端,比如浏览器会向服务端发送请求,服务端为了证明自己的身份,会发送证书给对方。
  2. 浏览器读取证书的数字签名部分,用自身根证书列表中对应的公钥证书对其进行解密。如果解密成功,并且证书哈希值与签名内的哈希值匹配一致,可证明站点提供的证书确实是该CA根证书签发的,否则给出风险提示。
  3. 验证通过之后,使用证书中的公钥对随机数和对称加密算法加密,发送给服务端,服务端用私钥进行解密,获得密钥和加密算法。
  4. 服务端与浏览器后续通信将会使用新的对称加密算法和随机密钥加密信息。

证书在整个流程起到了重要的作用,那么能不能通过窃取和伪造的方式来获取通信内容呢?

  • 窃取。首先证书当然是可以被窃取的,因为它是公开的,但是拿到了证书后也只能和服务端进行通信,不能用来窃取其它信息,至于证书的私钥存储在服务端,更加不可能随意被窃取了。
  • 伪造。如果有人伪造了一张网站证书,那么浏览器在向CA查询证书信息的时候就会验证失败。

那这么说就是绝对安全了吗?非也~

对于DNS劫持的情况还是无解的。比如浏览器访问网站的时候给了一个假证书,然后向CA验证证书的时候又访问了一个假网站,证书就有可能被验证通过。从而黑客可以作为中间方获取并转发双方的数据。

总结

SSL证书从生成到使用涉及到了三次加解密过程:

  1. 证书生成的时候利用私钥签名,验证证书的时候利用公钥解密。
  2. 确认证书有效后,利用证书中的公钥进行加密,服务端利用私钥解密。
  3. 双方使用新生成的随机密钥进行数据加解密。

用一张结构图表示下HTTPS和X.509的关系:

    HTTPS/       \
HTTP    TLS/SSL/      \通信内容    确认身份对称加密    SSL证书 —— X.509 格式,非对称加密

转载于:https://www.cnblogs.com/yalishizhude/p/11044207.html

你了解HTTPS,但你可能不了解X.509相关推荐

  1. HTTP协议和HTTPS协议初探

    概况 HTTP是hypertext transfer protocol(超文本传输协议)的简写,它是TCP/IP协议的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的过程. HTTP是 ...

  2. 什么是https?http和https之间区别是什么?

    什么是https? HTTPS(Secure Hypertext Transfer Protocol)安全超文本传输协议 它是一个安全通信通道,它基于HTTP开发,用于在客户计算机和服务器之间交换信息 ...

  3. java忽略证书验证(兼容http,https)

    概述 日常上传.下载文件时可能有不需要验证证书的场景,比如证书过期.不正确之类的也可以正常的上传下载文件. Java中使用https协议时,是通过X.509证书进行校验的. 首先我们先了解下什么是X. ...

  4. [笔记] 如何从不同扩展名的数字证书中提取明文信息? *.pem *.der *.crt *.cer *.key之间的区别是什么?...

    副标题:PEM, DER, CRT, CER, KEY, CSR, PFX/P12 等文件格式讲解 本文整理自网络,相关内容版权归原作者所有, (如有雷同绝非巧合) 作者博客:http://www.c ...

  5. Kubernetes 集群安全机制详解

    本文主要介绍 Kubernetes 的安全机制,如何使用一系列概念.技术点.机制确保集群的访问是安全的,涉及到的关键词有:api-server,认证,授权,准入控制,RBAC,Service Acco ...

  6. TLS协议分析 (九) 现代加密通信协议设计

    六. TLS协议给我们的启发 - 现代加密通信协议设计 在看了这么多的分析和案例之后,我们已经可以归纳出加密通信协议设计的普遍问题,和常见设计决策, 设计决策点: 四类基础算法 加密/MAC/签名/密 ...

  7. 外部系统连接SFDC,获取SFDC侧的数据

    目录 ■1.前言 ■2.操作 1.建立连接 2.取得数据 2.1.设定Head情报 2.2.发送请求(使用GET方式发送请求,不然会返回 405 ) ■相关知识 0.对于URL和URI的理解 1.对于 ...

  8. nginx配置http、https访问,nginx指定ssl证书,阿里云腾讯云华为云设置nginx https安全访问

    nginx配置http.https访问 要设置https访问需要从对应的云厂商申请证书,并下载Nginx证书到服务器. 我这里从阿里云申请了免费的域名证书,然后将证书放置在服务器的/etc/ssl/. ...

  9. 消除安卓SDK更新时的“https://dl-ssl.google.com refused”异常的方法

    消除安卓SDK更新时的"https://dl-ssl.google.com refused"异常的方法 消除安卓SDK更新时的"https://dl-ssl.google ...

  10. https://blog.csdn.net/blmoistawinde/article/details/84329103

    背景     很多场景需要考虑数据分布的相似度/距离:比如确定一个正态分布是否能够很好的描述一个群体的身高(正态分布生成的样本分布应当与实际的抽样分布接近),或者一个分类算法是否能够很好地区分样本的特 ...

最新文章

  1. 计算机网络中路由器,浅析计算机网络中的路由器
  2. PHP邮件队列,php群发邮件,用数据库做邮件队列
  3. SPSS实战应用案例50篇(一):从SPSS的角度讲清楚卡方检验
  4. 网易云信入选杭州市优质产品推荐目录!
  5. 函数形参传递概念及问题分析
  6. 今天的中巴等各式车子的企业即时通讯
  7. 带你彻底搞懂高性能网络模式Reactor 和 Proactor
  8. python纵向制表符命令_Python中raw_input()中子命令的制表符完成
  9. .Net 安装aliyun-oss
  10. 【干货】推荐系统解构.pdf(附下载链接)
  11. 突发!百度张亚勤退休
  12. matlab中的tall,tall 数组 - MATLAB Simulink - MathWorks 中国
  13. Alpha冲刺 (2/10)
  14. PHP 可变变量的使用
  15. Contextual 上下文绑定机制
  16. android自定义控件
  17. vim 删除当前词_键盘快捷键 - 在VIM中的光标之后或周围删除单词
  18. bilstm-crf_序列标注问题
  19. 华中科技大学 计算机硕士,我所经历的华中科技大学计算机考研复试
  20. 密码学——现代密码体制总结(别再管哈希叫加密了噢~)

热门文章

  1. 裁员风暴席卷科技圈 新旧科技公司面临不可避免的变革阵痛
  2. 系统架构师复习-操作系统
  3. BCS冬奥主题活动日:奥运网络安全成全球关注焦点
  4. DBA主宰一切请求,MySQL 查询重写
  5. 互联网公司面试必问的mysql题目(上)
  6. Javascript ECMA-1(数据类型,字符串操作)
  7. 阿里“双十一”决胜物流战 智能、开放才能走的更远
  8. %@ include file=和jsp:include file=区别
  9. 《C语言及程序设计》实践参考——转着圈加密
  10. ios 中NSString的一些调用