密码学 - 数字证书
密码学 - X.509 与 PKCS 系列

PKI

公开密钥基础建设(Public Key Infrastructure),是一组由硬件、软件、参与者、管理政策与流程组成的基础架构,其目的在于创造、管理、分配、使用、存储以及撤销数字证书, 从而建立一个安全的网络环境,数字证书最常见的格式有X.509,X.509又称之为PKIX。 在计算机界,有各种密码学标准,它们表示了如何在计算机中计算、存储、传输(等)各种算法,这些标准由 RSA、IEFT、PKIX、ITU-T、ISO 等标准组织机构编写, CA中心普遍采用的规范是X.509系列和PKCS系列

CA

证书颁发机构

CSR

证书签名请求

CRL

证书吊销列表

OCSP

在线证书状态协议

PKCS

公钥私钥加密-密码学标准(Public Key Cryptography Standards, PKCS),此一标准的设计与发布皆由 RSA 资讯安全公司(英语:RSA Security)所制定 包括了证书申请、证书更新、证书作废表发布、扩展证书内容以及数字签名、数字信封的格式等方面的一系列相关协议。它定义了一系列从PKCS#1到PKCS#15的标准

pkcs1

PKCS #1,RSA Cryptography Standard,定义了RSA Public Key和Private Key数学属性和格式,详见RFC8017 定义了RSA的数理基础、公/私钥格式,以及加/解密、签/验章的流程。1.5版本曾经遭到攻击

openssl genrsa -out key.pem

Private Key Format

-----BEGIN RSA PRIVATE KEY-----
BASE64Encoded
-----END RSA PRIVATE KEY-----

Public Key Format

-----BEGIN RSA PUBLIC KEY-----
BASE64Encoded
-----END RSA PUBLIC KEY-----

pkcs7

参见RFC 2315。规范了以公开密钥基础设施(PKI)所产生之签名/密文之格式。其目的一样是为了拓展数字证书的应用。 其中,包含了S/MIME与CMS。 主要用来存储签名或者加密后的数据,如证书或者CRL。 PKCS7可以用二进制的DER格式存储,也可以使用PEM格式存储。Windows中PKCS7通常使用.p7b文件扩展名

Format

‑‑‑‑‑BEGIN PKCS7‑‑‑‑‑

‑‑‑‑‑END PKCS7‑‑‑‑‑

PKCS7的文件从PEM格式转换成为DER格式

openssl pkcs7 -in file.pem -outform DER -out file.der

文件中提取出所有的证书到另外一个文件

openssl pkcs7 -in file.pem -print_certs -out certs.pem

pkcs8

PKCS #8,Private-Key Information Syntax Standard,详细的描述了私钥的存储格式。用于加密、非加密地存储Private Certificate Keypairs(不限于RSA),详见RFC5858 Apache读取证书私钥的标准。主要用来存储私钥。私钥首先会使用PKCS #5的标准进行加密,然后Base64编码,转换成为PEM格式存储

一个非加密 ECC 私钥的 PKCS#8

-----BEGIN PRIVATE KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQglQanBRiYVPX7F2Rd
4CqyjEN0K4qfHw4tM/yMIh21wamhRANCAARsxaI4jT1b8zbDlFziuLngPcExbYzz
ePAHUmgWL/ZCeqlODF/l/XvimkjaWC2huu1OSWB9EKuG+mKFY2Y5k+vF
-----END PRIVATE KEY-----

一个加密 PKCS#8 私钥的 PEM 格式

-----BEGIN ENCRYPTED PRIVATE KEY-----
Base64 xxxxxx
-----END ENCRYPTED PRIVATE KEY-----

RSA 私钥转换为 PKCS#8

openssl pkcs8 -topk8 -inform PEM -in rsa-private-key.pem -outform PEM -nocrypt -out rsa-private-key-pkcs8.pem

ECC 私钥转换为 PKCS#8

openssl pkcs8 -topk8 -inform PEM -in ecc-private-key.pem -outform PEM -nocrypt -out ecc-private-key-pkcs8.pem

pkcs12

定义了包含私钥(Private Keys)与公钥证书(public key certificate)的文件格式。私钥采密码(password)保护。PKCS12文件的扩展名是.p12.pfx.jks。 PKCS12可以看做是PKCS7的扩展,PKCS12可以额外存储私钥、证书、私钥、CRL Private Keys和Public Key Certificates是复数形式,这意味着PKCS #12文件实际上是一个Keystore,PKCS #12文件可以被用做Java Key Store(JKS),详见RFC7292

将PKCS12格式转换成为PEM

openssl pkcs12 -nocerts -nodes -in cert.p12 -out private.pem

从PEM到PKCS12

openssl pkcs12 -export -in Cert.pem -out Cert.p12 -inkey key.pem

X509

X.509是ITU-T标准化部门基于他们之前的ASN.1定义的一套证书标准,在X.500基础上进行了功能增强 X.509是在1988年发布的。X.509证书由用户公共密钥和用户标识符组成。此外还包括版本号、证书序列号、CA标识符、签名算法标识、签发者名称、证书有效期等信息

Certificate Format

-----BEGIN CERTIFICATE-----
BASE64Encoded
-----END CERTIFICATE-----

Certificate Subject Public Key Info

-----BEGIN PUBLIC KEY-----
BASE64Encoded
-----END PUBLIC KEY-----

ASN.1

在电信和计算机网络领域,ASN.1(Abstract Syntax Notation One) 是一套标准,是描述数据的表示、编码、传输、解码的灵活的记法。 它提供了一套正式、无歧义和精确的规则以描述独立于特定计算机硬件的对象结构。 ASN.1是ISO和ITU-T的联合标准,最初是1984年的CCITT X.409:1984的一部分。由于其广泛应用,1988年ASN.1移到独立标准X.208,1995年进行全面修订后变成X.680系列标准

PEM

PEM文件是一个文本文件,其内容是以“ – BEGIN -” 开头,中间内容是DER文件的Base64编码

查看文本证书内容

openssl x509 -in cert.pem -text -noout
openssl x509 -in cert.cer -text -noout
openssl x509 -in cert.crt -text -noout

PEM-To-DER

openssl x509 -in cert.crt -outform der-out cert.der
openssl rsa -in key.pem -outform der -out key.der

DER

DER表示证书的内容是用二进制进行编码的

查看二进制证书内容

openssl x509 -in cert.der -inform der -text -noout

DER-To-PEM

openssl x509 -in cert.crt -inform der -outform pem -out cert.pem

参考文档

密码学标准 - X.509 与 PKCS 系列

PKI-1

PKI-2

PKCS

X.509

X.509-RFC5280

Pem

ASN.1

证书认证原理

X.509、PKCS文件格式介绍

常见的PKI标准(X.509、PKCS)及证书相关介绍


最后修改于 2023-10-14

此篇文章的评论功能已经停用。