PKI体系及常见证书

PKI体系及常见证书http://blog.chinaunix.net/space.php?uid=23637692&do=blog&id=30579881.PKI体系1.1PKI(PublicKeyInfrastructure,公钥基础架构)PKI是一套以公钥技术为基础、提供安全服务的架构,由认证机构(CA),数字证书库,密钥备份和恢复,证书作废系统,应用接口等组成。CA是PK

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

http://blog.chinaunix.net/space.php?uid=23637692&do=blog&id=3057988

1.PKI体系 1.1 PKI(Public Key Infrastructure,公钥基础架构)

PKI是一套以公钥技术为基础、提供安全服务的架构, 由认证机构(CA), 数字证书库, 密钥备份和恢复, 证书作废系统, 应用接口等组成。CA是PKI的核心,CA的主要功能有:证书发放、证书管理(更新、撤消、验证)。

几个基本概念:

  • 证书(Certificate):数字证书证明证书主题所描述的主体对公钥的拥有关系。
    • 根证书:位于证书层次的最高层,所有证书链均终结于根证书。 >从属证书:由上一级认证机构颁发的证书。
    • 自签名证书:证书中的公钥和用于验证证书的密钥是相同的。自签名证书都是根证书。
  • 认证中心(Certificate Authority/Certification Authority):颁发数字证书的机构。
    • 根CA:一种特殊的CA,受到无条件地信任,位于证书层次结构的最高层。根CA必须对自己的证书签名,因为在证书层次结构中不存在更高的认证机构。常见根CA有:VeriSign, GlobalSign, Thawte, GeoTrust等。
    • 从属CA:拥有上一级CA的CA。从属CA的证书中公钥和用于验证证书的密钥是不相同的。
  • CA/证书的层级结构:PKI架构中,从根CA开始,CA体系表现为自上而下的层次结构。下级CA信任上一级CA;下级CA由上一级CA颁发证书并认证。
  • 公钥(Public Key):不对称密钥加密体系中,可以提供给他人使用的密钥。一般包含在证书中。
  • 私钥(Private Key):不对称密钥加密体系中,仅供自己使用的密钥。
  • 证书撤消列表(Certificate Revocation List, CRL):CRL给出了证书颁发者认定为无效的证书的序列号列表。

1.2 X.509标准

X.509标准是ITU-T为PKI所设计的一套标准。X.509标准定义了公钥证书(public key certificate), 证书撤消列表(certificate revocation list), 属性证书(attributes certificat), 和证书路径验证算法的标准。

通常,X.509证书包含以下信息:

Certificate

  1. Version(版本号)
  2. Serial Number(序列号)
  3. Algorithm ID(算法ID)
  4. Issuer(颁发者)
    1. Validity(有效期)
    2.      Not Before(起始时间)
    3.      Not After(终止时间)
    1. Subject(主题) 包括以下类容 
    2.      Common Name(CN, 公共名称) 
    3.      Organization Name(O, 单位名称) Locality(L, 城市) 
    4.      State(S, 省份) 
    5.      Country(C, 国家, 字母缩写)
    1. Subject Public Key Info(公钥信息)
    2.      Public Key Algorithm(公钥算法)
    3.      Subject Public Key(公钥)
  5. Issuer Unique Identifier (Optional)(颁发者唯一ID, 可选)
  6. Subject Unique Identifier (Optional)(主题唯一ID, 可选)
  7. Extensions (Optional)(扩展,可选)
  1. Certificate Signature Algorithm(证书签名算法)
  2. Certificate Signature(证书签名)









1.3 PKCS(Public-key cryptography standards)

RSA数据安全公司发布的一组公钥加密系统标准, 主要涉及证书申请,更新,撤消列表发布,数字签名,数字封装等方面。

到目前为止,PKCS标准共有15个

PKCS已发布的标准有:

  • PKCS#1 : RSA Cryptography Stand. RSA密码编译标准.RSA公钥和私钥数学特性和格式,以及执行RSA加密/解密,签名生成和验证的基本算法.
  • PKCS#2 : RSA消息摘要加密. 已撤消, 合并入PKCS#1
  • PKCS#3 : Diffie-Hellman Key Agreenment Standard. D-H密钥交换协议, 通信双方在不安全通信信道中协商公用安全密钥的协议.
  • PKCS#4 : RSA密钥语法. 已撤消,合并入PKCS#1
  • PKCS#5 : Password-based Encryption Standard. 使用基于密码的密钥加密字符串的方法.
  • PKCS#6 : Extended-Certificate Syntax Standard. 扩展证书语法标准. 旧的X.509 v1版本证书扩展规范. X.509 v3废弃.
  • PKCS#7 : Cryptographic Message Syntax Standard. 加密消息语法标准. 用于公钥交换(PKI)方式下如何对消息进行加密或签名;也可用于证书分发.
  • PKCS#8 : Private-Key Information Syntax Standard. 私钥信息语法标准. 如何描述私钥信息.
  • PKCS#9 : Selected Attribute Types. 一些被选作用于PKCS#6证书扩展, PKCS#7数字签名消息, PKCS#8私钥信息,PKCS#10证书签名请求的属性.
  • PKCS#10: Certification Request Standard. 证书请求标准. 发送至CA的证书请求的消息格式.
  • PKCS#11: 加密系统通用应用程序接口,Cryptoki
  • PKCS#12: 个人信息交换语法标准. 用于存储使用了密码保护的私钥及相应公钥证书的文件格式. PFX为PKCS#12的前身.
  • PKCS#13: Elliptic Curve Cryptography Standard. 椭圆曲线加密体系标准. 基于有限域椭圆曲线代数结构的公钥加密体系. 开发中.
  • PKCS#14: Pseudo-random Number Generation. 伪随机数生成标准. 开发中
  • PKCS#15: Cryptographic Token Information Format Standard. 加密令牌信息格式标准. 允许加密令牌用户可以以与应用Cryptoki无关方式向应用标识自己身份.

1.4 PEM(Privacy-enhanced Electronic Mail),增加隐私电子邮件标准

PEM是早期IETF建议的一套使用公钥加密体系的安全电子邮件标准. 由于各种原因未能大规模应用。不过,PEM标准中基于Base64编码的X.509证书成为了CA证书的通用格式之一。

PEM文件以”—–BEGIN CERTIFICATE—–“标识开始,以”—–END CERTIFICATE—–“标识终结。支持在同一文件中描述多个证书。

PKCS & X.509 & PEM

简单地说,PKCS和X.509是不同组织/公司所发布的针对PKI内不同领域的两个/套标准。PKCS系列标准中所涉及到的证书部分均遵守X.509标准。

X.509标准所考虑的核心问题是(公钥)证书的格式/内容,如何检验证书的有效性,以及证书撤消列表等。

PKCS系列标准所关注的则是整个公钥加密体系。在PKCS发布的一系列标准中,有些与证书无关(因此也就与X.509无直接关系),如下面列出的 PKCS#1 RSA密码编译标准;有些则与X.509有直接关系,如PKCS#6是在X.509证书最初v1版本基础上的扩展,随着X.509证书版本升级到 v3,PKCS#6则被废弃;再如PKCS#12个人信息交换语义标准,定义了包含公钥证书和个人私钥的个人信息文件的格式,其中的公钥证书部分则完全遵守X.509证书格式。

PEM格式证书指采用了采用Base64编码的X.509证书(除X.509标准证书内容外,PEM中还可以将个人私钥等对象存储进来)。

1.5 两种编码规范

同样内容的证书,可以采用不同的编码方式。

DER(Distinguished Encoding Rules):ITU-T X.690中规定的一套将任意类型数据编码为二进制格式的规范,可认为是BER(Basic Encoding Rules)子集之一。

Base64编码:将二进制数据每6比特一组转换为64个可打印ASCII字符之一的一种3B4B编码方式。最初用来对电子邮件进行编码,后也被应用于其他领域。

2 常见证书格式

常见证书相关文件名后缀

  • .csr :X.509证书请求文件(Certificate Signing Request)。CA签名后生成.crt证书文件
  • .cer, .crt, .der : DER二进制编码的X.509证书,不包含私钥
  • .pem : PEM Based64编码的DER证书(或证书链,可包含私钥)
  • .p7b, .p7c : PKCS#7标准证书(或证书链,不包含私钥). Win平台下常被用来存储证书链. 证书存放在”—–BEGIN PKCS7—–“和”—–END PKCS7—–“之间.
  • .p7r : PKCS#7证书请求
  • .p10:PKCS#10证书签名请求文件。CA签名后以p7r文件回复。
  • .p12 : PKCS#12标准证书. 通常包含证书, 公钥, 以及使用了密码保护的私钥
  • .pfx : PKCS#12格式的前身. 通常包含有PKCS#12格式的数据. Win平台下常用作导入/导出证书及私钥.
  • .pvk : 微软用于存放私钥的文件格式
  • .spc(Software Publishing Certificate) : 微软软件发布证书,用于给软件进行签名。
  • .key : Base64编码私钥文件,可以使用或不使用密码保。

3. 证书申请/发放/自签名

普通用户如需要申请证书,则以一定的格式(如csr/p7r等)向某一级CA提供证书所需信息(用户名/联系方式/证书用途等等)提出证书申请请求,CA审核通过后将用户信息/证书用途/颁发时间/有效期/证书序号/用户公钥/签名算法等等信息填入证书,并使用自己的私钥对以上信息进行签名,最终将证书和用户私钥颁发给用户。对于证书被颁发者或者第三人,可以使用CA的公钥来验证证书的有效性。

PKI体系中,CA是分层的,下一级CA的证书由上一级CA颁发;用户/系统/应用如果信任某一个CA,则信任此CA颁发的下一级证书。换句话说,某一个证书,如果用户信任证书库中存在着一条从某个根CA到此证书的完整证书链,则此证书受信;否则不被信任。

对于根CA,由于不存在级别比自己还高的CA,所以根CA的证书是由自己签发的,也即,根CA使用了自己的私钥对自己的证书进行的签名(而普通用户的证书是由证书颁发CA的私钥进行签名的),这就是自签名证书。一般操作系统都已经预置了一些可信根CA证书(如VeriSign等),用户也可以选择自行安装其他根CA证书将其加入系统证书库中。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/172035.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • OSI七层模型具体解释

    OSI七层模型具体解释

  • python中dtype什么意思_NumPy Python中的数据类型对象(dtype)

    python中dtype什么意思_NumPy Python中的数据类型对象(dtype)每个ndarray都有一个关联的数据类型(dtype)对象。此数据类型对象(dtype)告知我们有关数组布局的信息。这意味着它为我们提供了有关以下信息:数据类型(整数,浮点数,Python对象等)数据大小(字节数)数据的字节顺序(小端或大端)ndarray的值存储在缓冲区中,可以将其视为内存字节的连续块。因此,如何解释这些字节由dtype对象给出。1,构造数据类型(dtype)对象:数据类型对象…

  • 【C++】volatile关键字的作用「建议收藏」

    【C++】volatile关键字的作用「建议收藏」volatile的作用volatile关键字是防止在共享的空间发生读取的错误。只保证其可见性,不保证原子性;使用volatile指每次从内存中读取数据,而不是从编译器优化后的缓存中读取数据,简单来讲就是防止编译器优化。在单任务环境中,如果在两次读取变量之间不改变变量的值,编译器就会发生优化,会将RAM中的值赋值到寄存器中;由于访问寄存器的效率要高于RAM,所以在需要读取变量时,直接寄存器中…

  • Android 使用substring截取字符串

    Android 使用substring截取字符串请看如下代码://截取第一个字符StringNumOne=”A01013″.substring(0,1);//截取第一个字符之后的所有字符StringLastData=”A01013″.substring(1);StringNumOne1=”你好!”.substring(0,2);StringLastDataNew=LastData.replaceAll(“(.{1})”,”$1-“);//加入’-‘符.

  • QThread与QWidget使用[通俗易懂]

    QThread与QWidget使用[通俗易懂] 原文链接:http://hi.baidu.com/cyclone/blog/item/65f3f603294f2e783812bb51.html注意:请优先考虑Qt线程基础(QThread、QtConcurrent等)dbzhang8002011.06.18 本文主要内容: 在任务一中,用四种方式实现:点击界面按钮,开线程运行一段程序,结果显示在一个La…

  • java服务器后端框架_现在主流的java后端框架

    java服务器后端框架_现在主流的java后端框架Mars-javaMars是一个声明式API编程框架,可以帮助你很快的建立后端服务接口你可以专注在业务逻辑上,而不需要花太多的时间去写Controller和DAO同时我们依然支持传统ControllerPlayFrameworkplayframework是一个full-stack(全栈的)JavaWeb的应用框架,包括一个简单的无状态MVC模型,具有Hibernate的对象持续,一个基于Gro…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号