SSL/TLS(1):基本概念通俗解释
SSL/TLS (2):通俗解释SSL/TLS为什么安全

前言

在前面的文章中,我们分析了SSL/TLS的一些基本概念和为什么他们安全,尤其提到了公钥和私钥的概念,还有一个很重要的文件,就是CA证书,关于CA证书的官方解释,可以参考百科的解释,这里我们可以简单的认为,CA证书是一个网站的 二维码,这个二维码包括了服务器的一些信息,比如服务器所在的组织、支持的加密算法,还有更重要的公钥信息。

X.509

我们在使用mbedtls时,会发现有X.509的名称,在其他地方也会遇到这个概念,这里我们只做通俗的解释:证书是有专门的认证机构颁发的,所以证书的格式有n多种是,而X.509是一种事实上的证书标准,很多应用程序都支持x.509标准规范。

示例证书

我们看到的证书,一般是个文件,名字为 xxxx.crt或xxx.pem,这里我们以阿里云IOT平台SDK中给示例程序使用的 证书举例,直接查看证书内容,如下:

很显然,除了发现字符对的很整齐外,我们是一脸懵逼,完全就是天书,一堆乱码,那么如何解析这个证书内容呢? 前面讲到证书都是有标准格式的(X.509),这个证书是对外发布的,包含公钥的,所以就不存在保密而言,所以我们可以通过 生成证书的 openss 工具反向查看证书,命令如下:

openssl x509 -in ali_crt.pem -inform pem -noout -text

解析后的内容如下:

ubuntu@VM-0-17-ubuntu:/opt/ssl$ openssl x509 -in ali_crt.pem -inform pem -noout -text
Certificate:Data:Version: 3 (0x2)Serial Number:04:00:00:00:00:01:15:4b:5a:c3:94Signature Algorithm: sha1WithRSAEncryptionIssuer: C = BE, O = GlobalSign nv-sa, OU = Root CA, CN = GlobalSign Root CAValidityNot Before: Sep  1 12:00:00 1998 GMTNot After : Jan 28 12:00:00 2028 GMTSubject: C = BE, O = GlobalSign nv-sa, OU = Root CA, CN = GlobalSign Root CASubject Public Key Info:Public Key Algorithm: rsaEncryptionRSA Public-Key: (2048 bit)Modulus:00:da:0e:e6:99:8d:ce:a3:e3:4f:8a:7e:fb:f1:8b:83:25:6b:ea:48:1f:f1:2a:b0:b9:95:11:04:bd:f0:63:d1:e2:67:66:cf:1c:dd:cf:1b:48:2b:ee:8d:89:8e:9a:af:29:80:65:ab:e9:c7:2d:12:cb:ab:1c:4c:70:07:a1:3d:0a:30:cd:15:8d:4f:f8:dd:d4:8c:50:15:1c:ef:50:ee:c4:2e:f7:fc:e9:52:f2:91:7d:e0:6d:d5:35:30:8e:5e:43:73:f2:41:e9:d5:6a:e3:b2:89:3a:56:39:38:6f:06:3c:88:69:5b:2a:4d:c5:a7:54:b8:6c:89:cc:9b:f9:3c:ca:e5:fd:89:f5:12:3c:92:78:96:d6:dc:74:6e:93:44:61:d1:8d:c7:46:b2:75:0e:86:e8:19:8a:d5:6d:6c:d5:78:16:95:a2:e9:c8:0a:38:eb:f2:24:13:4f:73:54:93:13:85:3a:1b:bc:1e:34:b5:8b:05:8c:b9:77:8b:b1:db:1f:20:91:ab:09:53:6e:90:ce:7b:37:74:b9:70:47:91:22:51:63:16:79:ae:b1:ae:41:26:08:c8:19:2b:d1:46:aa:48:d6:64:2a:d7:83:34:ff:2c:2a:c1:6c:19:43:4a:07:85:e7:d3:7c:f6:21:68:ef:ea:f2:52:9f:7f:93:90:cfExponent: 65537 (0x10001)X509v3 extensions:X509v3 Key Usage: criticalCertificate Sign, CRL SignX509v3 Basic Constraints: criticalCA:TRUEX509v3 Subject Key Identifier: 60:7B:66:1A:45:0D:97:CA:89:50:2F:7D:04:CD:34:A8:FF:FC:FD:4BSignature Algorithm: sha1WithRSAEncryptiond6:73:e7:7c:4f:76:d0:8d:bf:ec:ba:a2:be:34:c5:28:32:b5:7c:fc:6c:9c:2c:2b:bd:09:9e:53:bf:6b:5e:aa:11:48:b6:e5:08:a3:b3:ca:3d:61:4d:d3:46:09:b3:3e:c3:a0:e3:63:55:1b:f2:ba:ef:ad:39:e1:43:b9:38:a3:e6:2f:8a:26:3b:ef:a0:50:56:f9:c6:0a:fd:38:cd:c4:0b:70:51:94:97:98:04:df:c3:5f:94:d5:15:c9:14:41:9c:c4:5d:75:64:15:0d:ff:55:30:ec:86:8f:ff:0d:ef:2c:b9:63:46:f6:aa:fc:df:bc:69:fd:2e:12:48:64:9a:e0:95:f0:a6:ef:29:8f:01:b1:15:b5:0c:1d:a5:fe:69:2c:69:24:78:1e:b3:a7:1c:71:62:ee:ca:c8:97:ac:17:5d:8a:c2:f8:47:86:6e:2a:c4:56:31:95:d0:67:89:85:2b:f9:6c:a6:5d:46:9d:0c:aa:82:e4:99:51:dd:70:b7:db:56:3d:61:e4:6a:e1:5c:d6:f6:fe:3d:de:41:cc:07:ae:63:52:bf:53:53:f4:2b:e9:c7:fd:b6:f7:82:5f:85:d2:41:18:db:81:b3:04:1c:c5:1f:a4:80:6f:15:20:c9:de:0c:88:0a:1d:d6:66:55:e2:fc:48:c9:29:26:69:e0

证书规范

我们就以上述解析后的证书为例,介绍一下证书包含的内容:

  • 版本号(Version Number): 规范的版本号,目前版本为3, 值为0x02
  • 序列号(Serial Number): 由发证机关分配的卫衣序列号,最大不超过20个字节,本例中为:04:00:00:00:00:01:15:4b:5a:c3:94
  • 签名算法(Signature Algorithm): 数字证书锁采用的算法,本例中使用的为:sha1WithRSAEncryption
  • 颁发者(Issuer): 发证单位的标识信息,可以理解为发证单位的地址、名称等其他信息,这里有一些简称:
  • CN : country Name
  • ST : state or provice name
  • L : locality name
  • O: organization name
  • CN: common name, 这里CN是最重要的一个标识,代表了发证机关的 名称,后面会介绍
  • 有效期(Validity): 证书的有效期限,包括起止时间
  • 主题(Subject): 证书拥有者的标识信息(Distinguished Name),与Issuer相似。
  • 公钥信息(SubJect Public Key Info): 所保护的公钥相关的信息:
  • 公钥算法 (Public Key Algorithm)公钥采用的算法;
  • 主体公钥(Subject Unique Identifier):公钥的内容。
  • 颁发者唯一号(Issuer Unique Identifier): 代表颁发者的唯一信息,仅2、3版本支持,可选;
  • 主体唯一号(Subject Unique Identifier): 代表拥有证书实体的唯一信息,仅2,3版本支持,可选:
  • 扩展(Extensions,可选): 可选的一些扩展。中可能包括:
  • Subject Key Identifier:实体的秘钥标识符,区分实体的多对秘钥;
  • Basic Constraints:一指明是否属于CA;
  • Authority Key Identifier:证书颁发者的公钥标识符;
  • CRL Distribution Points: 撤销文件的颁发地址;
  • Key Usage:证书的用途或功能信息。

此外,证书的颁发者还需要对证书内容利用自己的私钥添加签名, 以防止别人对证书的内容进行篡改。

小结

本文介绍了CA证书的基本内容和标准(X.509), 我们在编程调试时,需要关注的一般有两个信息:

  • CN: 发证机关的 名字,common name,我们在使用mbedtls时,往往需要验证证书名称,所以在程序中 CN要设置正确。
int mbedtls_ssl_set_hostname( mbedtls_ssl_context _ssl, const char _hostname );
// 注意,这里设置的 hostname 必须对应服务器证书中的 common name,即 CN 字段。
  • Validity: 证书有效期,在调试的时候,验证证书中,会验证机器时间是否在证书有效期内,这个容易忽略,毕竟在一些嵌入式机器中,系统时钟不太重要,所以可能不是真实的时钟,这个时候,就会造成证书验证失败。

SSL/TLS(3): CA证书解释相关推荐

  1. 关于 SSL加密协议 及 CA 证书

    SSL,对于很多人来说,只是听说过而已,实际应用遇到相对比较少.很不幸,在我试图配置 IIS6 + SSL,遇到了一些麻烦,在试过许多网上的方法后,问题却依然存在.在一番费时费力的网络资料搜索后,有点 ...

  2. PostgreSQL SSL启用与CA证书生成、配置

    2019独角兽企业重金招聘Python工程师标准>>> ref: https://yq.aliyun.com/articles/14965 PG服务器配置SSL证书验证 在CA服务器 ...

  3. 华为防火墙配置SSL+自签CA证书挑战登录

    HW USG部署SSL+CA证书登录 前言 了解证书 自签证书 服务器配置 客户端配置 客户端登录 前言 关于证书,涉及作者的知识盲区,本人仅根据自己的理解编写,仅供参考! 了解证书 公钥CA:理解为 ...

  4. 数字证书连接服务器异常,连接时Socket.io + SSL +自签名CA证书出现错误

    我正在运行使用使用自签名CA证书创建的证书的https服务器. 现在,我想将Socket.io客户端连接到连接到https服务器的Socket.io服务器.不幸的是,我得到一个错误,告诉我: Erro ...

  5. Android中使用Webview SSL 自签名CA证书安全校验方案

    前言: 因为我们的项目是Android + H5,之前的做法是把H5所需要的资源和html下载到本地这样证书校验不会走系统浏览器层只需要项目中预埋根证书就可以了,但是如果用webview加载线上的域名 ...

  6. SSL/TLS(4): TLS连接握手过程详细分析

    SSL/TLS(1):基本概念通俗解释 SSL/TLS (2):通俗解释SSL/TLS为什么安全 SSL/TLS(3): CA证书解释 前言 在前面的文章中,我们讲述了SSL/TLS相关概念和CA证书 ...

  7. 蚂蚁区块链第9课 SSL/TLS工作原理及在蚂蚁BAAS中的应用

    1,摘要 辉哥在学习蚂蚁BAAS系统时,发现了一堆证书或者公私钥名称,包括trustCa,ca.crt,client.crt,client.key,pub.txt,MyPKCS12.p12等等文件,不 ...

  8. SSL/TLS 双向认证(一) -- SSL/TLS工作原理

    本文部分参考: https://www.wosign.com/faq/faq2016-0309-03.htm https://www.wosign.com/faq/faq2016-0309-04.ht ...

  9. SSL/TLS工作原理

    一: SSL/TLS介绍 什么是SSL,什么是TLS呢?官话说SSL是安全套接层(secure sockets layer),TLS是SSL的继任者,叫传输层安全(transport layer se ...

  10. 数字证书、CA、CA证书、SSL证书、CA锁 简单介绍

    1.数字证书是什么? 数字证书不是数字身份证,而是身份认证机构盖在数字身份证上的一个章或印(或者说加在数字身份证上的一个签名).其作用类似于现实生活中司机的驾驶执照或日常生活中的身份证. 2.CA是什 ...

最新文章

  1. git克隆 不带目录_Git 系统学习笔记
  2. 一文带你了解Spring核心接口Ordered的实现及应用
  3. ASP.NET DataSet查询结果转换为JSON格式数据
  4. C语言编程学生学籍登录窗口,C语言实现学生学籍管理系统
  5. swift2.2的新特性
  6. java之for循环
  7. js跨域 ajax跨域问题解决
  8. 9-4 节点取余分区
  9. x86基础之数与数据类型
  10. 278.第一个错误版本(力扣leetcode) 博主可答疑该问题
  11. windows10桌面_32位windows10系统正式版推荐下载
  12. teststand调用python模块_TestStand 界面重置【小技巧】
  13. 《论文阅读》FroDO: From Detections to 3D Objects
  14. win10 android 传多个文件夹,win10怎么使用ROBOCOPY快速复制多个文件夹
  15. 黄山的正宗徽菜和新鲜景区
  16. 如何检测机器是否支持TPM
  17. 数字抽奖小程序_抽奖小程序凭什么成为流量的风口?怎么以最快的方式引流?...
  18. 特斯拉使用顶级编程语言创建自动驾驶汽车
  19. python科学数据库(一)
  20. 前端笔记之移动端响应式(中)视口百分比布局弹性盒模型remfillpage

热门文章

  1. linux系统硬盘坏道,Linux下两种修复硬盘坏道方法
  2. kpi绩效考核流程图_XX公司KPI绩效考核案例.doc
  3. Java 开通会员增加会员天数(LocalDateTime)
  4. 远程关闭计算机提示拒绝访问权限,win7系统远程关机拒绝访问的解决方法
  5. tesseract-ocr验证码识别
  6. origin柱状图同时有两组数和两组数差值_Origin入门教程(十二):「误差棒」棒棒棒儿...
  7. AWS云lamda实时判断IoTCore上传的数据并插入RDS中
  8. 学习的爬虫一点小感悟附上爬取淘宝信息的教程
  9. 华为热设计工程师待遇_【华为热设计工程师面试】华为热设计工程师大家要慎重考虑。-看准网...
  10. 英文名为什么最好不用joe?JOE英文名的寓意是什么?