ASN.1规范

ASN.1(Abstract Syntax Notation dot one)抽象记法1,是描述数据结构的标准记法。

常用编码规则

  • BER - 基本编码规则
  • DER - 识别名编码规则(最常用)
  • CER - 规范编码规则

文件格式关系

  • DER - 二进制格式,X.509证书通常采用此编码
  • PEM - BASE64编码的DER,带特定头尾标记
  • CRT/CER - 微软体系的证书后缀,与PEM实质相同

PKCS标准

PKCS(Public Key Cryptography Standards)是一套公钥密码学标准:

标准内容描述
PKCS#1RSA加密标准,定义算法和填充模式
PKCS#3Diffie-Hellman密钥交换协议
PKCS#5基于密码的加密标准(PBKDF2)
PKCS#7证书消息语法标准
PKCS#8私钥信息语法标准(通用格式)
PKCS#12个人信息交换格式(PFX)

OpenSSL密钥操作

生成RSA密钥

1
2
openssl genrsa -out private.pem 2048
openssl rsa -in private.pem -pubout -out public.pem

格式转换

PKCS#1转PKCS#8:

1
openssl pkcs8 -topk8 -nocrypt -in private.pem -out private_pkcs8.pem

PEM转DER:

1
openssl rsa -in private.pem -outform DER -out private.der

密钥结构查看

1
openssl rsa -in private.pem -text -noout

X.509证书

生成证书

1
2
3
4
5
# 生成证书签名请求
openssl req -new -key private.pem -out cert.csr

# 自签名证书
openssl x509 -req -days 365 -in cert.csr -signkey private.pem -out certificate.pem

证书查看

1
openssl x509 -in certificate.pem -text -noout

关键知识点

PEM格式结构

1
2
3
-----BEGIN [LABEL]-----
BASE64编码的数据
-----END [LABEL]-----

PKCS#1 vs PKCS#8

  • PKCS#1 - 专用于RSA算法
  • PKCS#8 - 通用私钥格式,支持多种算法

证书字段

  • 版本号
  • 序列号
  • 签名算法
  • 颁发者信息
  • 有效期
  • 主体信息
  • 公钥信息
  • 扩展信息
  • 签名值

总结

证书和密钥的标准化格式确保了不同系统间的互操作性。理解这些格式对于进行安全的密钥管理、证书颁发和验证至关重要。在实际应用中,推荐使用PKCS#8格式存储私钥,使用X.509标准格式管理证书。