惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

L
LINUX DO - 最新话题
G
Google Developers Blog
J
Java Code Geeks
The GitHub Blog
The GitHub Blog
F
Full Disclosure
H
Help Net Security
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Vercel News
Vercel News
酷 壳 – CoolShell
酷 壳 – CoolShell
Recent Announcements
Recent Announcements
Help Net Security
Help Net Security
The Hacker News
The Hacker News
IT之家
IT之家
Y
Y Combinator Blog
Martin Fowler
Martin Fowler
L
Lohrmann on Cybersecurity
C
CERT Recently Published Vulnerability Notes
V
Visual Studio Blog
博客园 - 聂微东
Hacker News: Ask HN
Hacker News: Ask HN
H
Hacker News: Front Page
Know Your Adversary
Know Your Adversary
Security Latest
Security Latest
Security Archives - TechRepublic
Security Archives - TechRepublic
Simon Willison's Weblog
Simon Willison's Weblog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
T
Troy Hunt's Blog
Last Week in AI
Last Week in AI
Schneier on Security
Schneier on Security
N
News and Events Feed by Topic
博客园 - 【当耐特】
有赞技术团队
有赞技术团队
AWS News Blog
AWS News Blog
Blog — PlanetScale
Blog — PlanetScale
博客园_首页
Google DeepMind News
Google DeepMind News
Cloudbric
Cloudbric
N
News | PayPal Newsroom
A
About on SuperTechFans
S
Schneier on Security
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Hugging Face - Blog
Hugging Face - Blog
M
MIT News - Artificial intelligence
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
雷峰网
雷峰网
T
The Exploit Database - CXSecurity.com
罗磊的独立博客
K
Kaspersky official blog
The Cloudflare Blog
I
Intezer

Razeen`s Blog

Let's Encrypt 推出 Gen Y 根证书架构:揭示 Web PKI 的五大未来趋势 通过 Wi-Fi 自动备份你的 iPhone 到 Nas 管理培训感悟:从技术视角看管理之路 UPS 一拖多:保护你的 NAS 和 Linux 服务器 从影音中心到 AI 助手:我的50款 Homelab 服务清单 从SSL证书有效期将缩短到47天聊开去 部署一个自己的 Running Page 谈谈特斯拉 Model Y 用车一年的感受和费用分析 弃用 Disqus 评论,使用自建 Waline 使用 Prometheus 和 Grafana 搭建你的证书监控面板 服务器迁移记:一次磁盘换板引发的Linux分区与挂载的学习 改善信息来源, 利用 RSS 高效获取资讯 (RSShub + Reeder5 + WeWe RSS) 多种 Docker 镜像拉取解决方案与实践 App分享 | AppCleaner - Mac上的卸载神器 Azure OpenAI API 申请和使用 如何开通 OneKey 虚拟信用卡,并充值消费 如何拥有一个可长期在国内使用的国外手机号码 分享开通 ChatGPT Plus 过程 如何开通 Depay 虚拟信用卡,并充值消费 如何开通欧易Web3钱包, 交易入账 如何5分钟内1块钱注册 ChatGPT 如何注册美区的 Apple ID (2023年/无需科学上网) NAS折腾记(11): NASTool3.0体验和降级 NAS折腾记(10): Docker版本的NASTool配置 NAS折腾记(9): NASTool与微信交互,微信发送消息远程下载电影【多图】 NAS折腾记(8):群晖安装 NASTool 实现影音半自动化【多图】 内网穿透(2):Tailscale 组网实现内网穿透,操作简单,无成本 内网穿透(1):总结了11中内网穿透的方式,总有一种适合你 NAS折腾记(7):从零开始设置(黑)群晖系统 NAS折腾记(6):黑群晖系统安装好后怎么洗白? NAS折腾记(5):群晖硬盘休眠设置与分析 NAS折腾记(4): 20分钟手把手带你完美安装 DS918+ 黑群晖7.1.1 NAS折腾记(3):NAS 装机 NAS折腾记(2):B360-ITX 双M.2 双2.5G网口 6 SATA主版 开箱 NAS折腾记(1):328元的4盘位Nas机箱开箱 Openwrt + Clash 全局科学上网 Newifi3 刷入 OpenWrt 固件 v21.02 利用 Markdown 画一些流程图、时序图、甘特图等 Homelab(8): 搭建自用 Gitlab 与 Docker 仓库 Nginx Tcp 转发保留客户端真实 IP (PROXY Protocol) Homelab (7):IPSec VPN(基于证书认证)客户端设置 Homelab (6): 基于自签发证书的 IPSec VPN 搭建 Homelab (5): DDNS 动态域名解析 Homelab (4): Linux 服务器基础环境准备 Homelab (3): 整体网络与基础硬件介绍 Go学习笔记(十)老项目迁移 go module 大型灾难记录 Github Actions 初体验之自动化部署 Hexo 博客 记一次 Nginx DNS 缓存导致转发问题 Homelab (2): 电信悦me网关修改桥接模式,路由器拨号 Homelab (1):5分钟上手黑群晖 NAS 终极 Bash 脚本指南 Typora 自动上传图片到七牛云 Ubuntu 20.04 LTS 有线网卡驱动安装 折腾 Ubuntu 20.04 LTS 开发环境 Go学习笔记(九) 计时器的生命周期[译] 利用 git hook 规范你的代码与 commit message 规范 git commit message 与自动化版本控制 超详细 vim 配置 (with MacVim) Golang 中的 RESTful API 最佳实践 折腾服务器(开篇) 我的第一台个人服务器 Newifi3 实现低成本家庭级科学上网 Go学习笔记(八) | 使用 os/exec 执行命令 如何用 Go 调用 Windows API Mac OS 自动根据 WI-FI 名字改变网络位置 关于 Docker 清理 MIME Types 速查表 Go学习笔记(七) | 理解OAuth 2.0并实现一个客户端 我又又又把博客迁移了 Go学习笔记(六) | 使用swaggo自动生成Restful API文档 Go学习笔记(五) | 使用代码片段(snippets)提高编码效率 书单 - 2018 IPFS 初体验,利用 IPFS 托管你的静态网站 记一次 PostgreSQL LIKE 索引优化,联合字段 LIKE 查询优化。 Disqus 添加有趣的 Reactions 的功能 TLS 1.3 详解 (RFC 8446解读) gRPC在Go中的使用(三)gRPC实现TLS加密通信与流模式 gRPC在Go中的使用(二)gRPC实现简单通讯 gRPC在Go中的使用(一)Protocol Buffers语法与相关使用 CentOS 安装 tshark 抓包工具 Go学习笔记(四) | win上使用VSCode搭建Go开发环境 日常 Postgres 数据库点滴记录 简单了解 PKCS 规范 美食篇 | DIY戚风蛋糕(烤箱做蛋糕) Go学习笔记(三) | 怎么写Go基准测试(性能测试) TLS1.3正式更新,为Nginx添加TLS1.3的支持 一次诡异的数据库删除 GitHub Pages自定义域名开启HTTPS 证书透明度是什么?它是怎么工作的? Go学习笔记(二) | 我对 recover 的一点误解 搭建证书透明度(certificate-transparency)日志服务之从入门到放弃 修复远程登陆 Centos 时,出现 UTF-8 Warning HTTPS篇之SSL握手过程详解 Go学习笔记(一) | postgres与golang点点滴滴 AWS 命令行界面(aws-cli)从安装到快速上手 常用 linux 命令小结(一)文件目录操作 云服务器搭建 hexo 博客,git hooks自动更新 SSH 免密登陆, SSH Config 配置 Golang CGO Mac 交叉编译 Windows 使用 goose 让数据库迁移更加轻松 开始使用Ghost
数字证书分类及怎么区分各类数字证书
2017-11-06 · via Razeen`s Blog

在刚开始接触数字证书的时候,我们经常会听到“服务器证书”,“客户端证书”,“邮件证书”等等相关的数字证书名字,这就是数字证书的一种按照用途分类的分类方式。那么数字证书到底有多少类?又是怎么去区分的呢?

几张证书

下面是我截图的几张证书信息,你知道他们是干什么的,该怎么分类么?

这里有六张证书:

  • 1.我的服务器证书;
  • 2.一张中间证书;
  • 3.VerSign Class 3 CA证书;
  • 4.一张邮件证书;
  • 5.我的iOS app软件签名证书;
  • 6.我的iOS 推送服务证书。 这里你可以看到,我是按照证书的用途分别来介绍这几张证书的,这就是证书分类的一种方式。通常,数字证书可分为两大类:根据持有者分类和根据秘钥分类。

根据证书持有者分类

1.根据证书持有者是否为CA进行分类

根据证书持有者是否为CA,可以将证书分为两类:CA证书和用户证书。CA证书可以为用户或者其他CA签发证书,用户证书则不可以。
X.509证书格式中通过扩展项BasicConstrains来区分这两类证书。当其中的cA项为TRUE时表示为CA证书,为FALSE时表示用户证书。

BasicConstrains扩展项格式用ASN.1描叙如下:

    BasicConstrains := SEQUENCE {
        cA                  BOOLEAN DEFAULT FALSE
        pathLenConstraint   INTEGER(0..MAX) OPTIONAL    
    }

上图中的证书2,3都是CA证书,查看第二章证书的ANS.1结构我们可以看到

OBJECT IDENTIFIER2.5.29.19basicConstraints(X.509 extension)
BOOLEAN     true
OCTET STRING(1 elem)
    SEQUENCE(2 elem)
    BOOLEAN     true  # 说明这是一章CA证书
    INTEGER     0     

其他几张就是用户证书,可以看到证书1的ASN.1结构

OBJECT IDENTIFIER2.5.29.19basicConstraints(X.509 extension)
OCTET STRING(1 elem)
    SEQUENCE(0 elem)

2.按照证书持有者类型进行分类

根据证书的持有者类型,通常将证书分为几类:个人证书、单位证书和系统证书等。

个人证书是CA系统给个人签发的证书,代表个人身份。证书之中需要包括个人信息(如姓名、身份证、E-mail、电话等)和个人的公钥。就像上图4,5,6三张证书。

单位证书是CA系统给机构或者组织等签发的证书,代表单位身份。证书中需要包含单位信息 (如名称、组织机构代码、E-mail、联系人等)和单位的公钥。这类证书在一些公司或机构的站点很容易看到,如GitHub的证书,在证书中我们可以看到一些其组织公司的信息。

系统证书是CA系统给系统软件或设备系统签发的证书,又代表系统的省份。证书中需要包含系统的信息(如IP地址,域名等)和系统公钥。系统证书又包括Web服务器证书、域控制器证书、VPN设备证书、OCSP服务器证书、时间戳服务器证书等。证书1就是一张系统证书(Web服务器证书)

X.509格式本身并不支持这种分类,通常通过在Subject中增加DN(Distinct Name)项区分,如可以增加OU=PERSON表示个人证书,OU=UNIT表示单位证书等。为保持证书内容的统一性,扩展项KeyUsage、ExtKeyUsage必须设置合适的值。

根据秘钥分类

1.根据密钥对产生方式进行分类

根据秘钥对的产生方式,可将证书分为两类:签名证书和加密证书。

证明签名及私钥只用于签名验签,不能用于加密解密。为了保证密钥对的唯一性,该密钥对必须由用户端密码模块产生和保存,在证书签发过程中CA中心并不知道其私钥,只对其公钥进行操作。

仔细查看上面几张证书,我们就可以通过扩展字段密钥使用 ( 2.5.29.15 )来判断该证书的种类及相关用途。

X.509格式本身并不支持这种分类;通常通过存储位置或者应用系统进行区分。为了保持证书内容的同意性,扩展KeyUsage、ExtKeyUsage必须设置合适的值。

KeyUsage中已经定义的类型如下。

  • digitalSignature : 表示数字签名;
  • nonRequdiation : 表示不可抵赖;
  • keyEncipherment : 表示秘钥加密;
  • dataEncipherment : 表示数据加密;
  • keyAgreement : 表示秘钥协商;
  • keyCertSign: 表示证书签名;
  • CRLSign : 表示CRL签名;
  • encipherOnly : 表示只用于加密;
  • decipherOnly : 表示只用于解密。

2.根据证书用途进行分类

根据证书的用途,通常将证书分为SSL服务器证书、SSL客户端证书、代码签名证书、Email证书,时间戳服务器证书、OCSP服务器证书等。

SSL证书只用于SSL/TLS应用,如证书1,是一张服务器证书,用来保证我的网站与用户连接时的数据安全。

Email证书只用于安全电子邮件,如证书4,我们通过这个可以验证证书是谁的,保证邮件通讯过程中的安全,不被篡改。

代码签名证书只用于对代码进行签名验签。如证书5,我写的APP程序在打包时就用该证书的进行签名,用户在安装我的APP时就可以通过该证书知道该APP是谁开发的,用户只有信任了我的证书才可安装。

X.509格式中通过扩展项ExtKeyUsage来区分这几类证书。为了保持证书内容的统一性,扩展项KeyUsage必须设置合适的值。

在图中证书信息中扩展项扩展的密钥使用 ( 2.5.29.37 ) 我们就可以看出该证书的相关用途。

ExtKeyUsage中已经定义的类型如下。

  • id-kp-serverAuth :用于SSL/TLS Web服务器身份认证;
  • id-kp-clientAuth :用于SSL/TLS Web客户端身份认证;
  • id-kp-codeSigning : 用于对可下载的执行代码进行签名;
  • id-kp-emailProtection :用于保护E-mail;
  • id-kp-timeStamping : 用于将对象摘要与时间绑定;
  • id-kp-OCSPSigning :用于对OCSP响应包进行签名。

参考

[1] 《PKI/CA与数字证书技术大全》 张明德 刘伟 编著