公钥证书相关概念

公钥基础设施(Public Key Infrastructure, PKI)

PKI是一组由硬件、软件、参与者、管理政策与流程组成的基础架构,其目的在于创造、管理、分配、使用、存储以及撤销数字证书。

公钥密码学标准(Public Key Cryptography Standards, PKCS)

公钥密码学标准 最初是为推进公钥密码系统的互操作性,由RSA实验室与工业界、学术界和政府代表合作开发的。在RSA带领下,PKCS的研究随着时间不断发展,它涉及了不断发展的PKI格式标准、算法和应用程序接口。PKCS标准提供了基本的数据格式定义和算法定义,它们实际是今天所有PKI实现的基础。

PKCS标准清单:

  • PKCS#1,RSA密码标准(RSA Cryptography Standard)
  • PKCS#2,撤销,现已被纳入PKCS#1
  • PKCS#3,DH密钥协商标准(Diffie-Hellman key agreement Standard)
  • PKCS#4,撤销,现已被纳入PKCS#1
  • PKCS#5,基于口令的加密标准(Password-based Encryption Standard)
  • PKCS#6,证书扩展语法标准(Extended-Certificate Syntax Standard)
  • PKCS#7,密码消息语法标准(Cryptographic Message Syntax Standard)
  • PCSK#8,私钥信息语法标准(Private-Key Information Syntax Standard)
  • PCSK#9,选择属性类型标准(Selected Attribute Types)
  • PKCS#10,证书申请标准(Certification Request Standard)
  • PKCS#11,密码令牌接口标准(Cryptographic Token Interface Standard)
  • PKCS#12,个人信息交换标准(Personal Information Exchange Syntax Standard)
  • PKCS#13,椭圆曲线密码学标准(Elliptic curve cryptography Standard)
  • PKCS#14,伪随机数产生标准(Pseudo-random Number Generation)
  • PKCS#15,密码设备消息格式标准(Cryptographic Token Information Format Standard)

证书标准(X.509)

X.509是为公钥基础设施(PKI)与授权管理基础设施(PMI)提出的产业标准,规范了公钥认证、证书吊销列表、授权证书、证书路径验证算法等。

证书认证机构(Certificate Authority, CA)

CA 是PKI的核心,是负责签发证书、认证证书、管理已颁发证书的机关。它要制定政策和具体步骤来验证、识别用户身份,并对用户证书进行签名,以确保证书持有者的身份和公钥的拥有权。

CA 也拥有一个证书(内含公钥)和私钥。网上的公众用户通过验证 CA 的签字从而信任 CA ,任何人都可以得到 CA 的证书(含公钥),用以验证它所签发的证书。

证书(Certificate)

证书是由CA签发的对用户的公钥的认证。

证书的内容包括:电子签证机关的信息、公钥用户信息、公钥、权威机构的签字和有效期等等。目前,证书的格式和验证方法普遍遵循 X.509 国际标准。

证书签名请求(Certificate Signing Request, CSR)

CSR是向证书认证机构(CA)请求签署一份证书的正式请求,它包含了请求证书的实体的公钥和信息。这些数据都将会成为证书的一部分。一个CSR总是用它所携带的公钥所对应私钥进行加密。

证书废除列表 (Certificate Revocation List, CRL)

由于实体名称的改变、私钥泄漏或业务中止等原因,需要存在一种方法将现行的证书撤消,即撤消公开密钥及相关的实体身份信息的绑定关系。在PKI中,所使用的这种方法为证书废除列表。

证书格式(PEM/DER)

X.509标准中定义了PEM/DER两种格式,用于密钥和证书等信息。

  • DER(Distinguished Encoding Rules)
    二进制格式,使用ASN.1编码。

  • PEM(Privacy Enhanced Mail)
    文本格式,内容是DER再进行Base64编码后得到,并在开头和结尾加入标识

    1
    2
    3
    -----BEGIN type-----
    BASE64 ENCODED DATA
    -----END type-----

证书文件扩展名

  • CER/CRT X.509证书,CRT常见于*nix系统,CER常见于windows系统。
  • KEY PCSK#8,通常用来存放私钥。
  • CSR/P10 PKCS#10,证书签名请求,包含公钥和用户信息。
  • P7R PKCS#7,CA对证书请求的回复,只用于导入。
  • SPC/P7B/P7C PKCS#7,通常包含一个或多个证书,证书废除列表(极少),不含私钥。
  • PFX/P12 PKCS#12,包含公钥证书和私钥(可使用密码保护),也可以包含整个证书链。
  • JKS(Java Key Store) Java的密钥仓库,包括公钥证书和私钥等。通过Java工具keytool可以将JKS与P12互相转化。

获得证书

向权威证书颁发机构申请证书

生成一个csr

1
openssl req -newkey rsa:2048 -new -nodes -keyout my.key -out my.csr

把csr交给CA,CA对此进行签名。当证书过期时,你还可以用同样的csr来申请新的证书。

生成自签名的证书

1
openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout key.pem -out cert.pem

生成证书时会需要填各种信息(CommonName为必填,通常填写你服务器的域名,其它可以留空)。

参考

证书文件格式在线转换工具
https://www.sslshopper.com/ssl-converter.html

公钥密码标准(PKCS)
http://blog.sina.com.cn/s/blog_5420e00001015lrz.html

证书,密钥,加密,rsa到底是啥?
https://blog.phpgao.com/encryption_decryption.html

“BEGIN RSA PRIVATE KEY”与”BEGIN PRIVATE KEY”的区别
http://stackoverflow.com/questions/20065304/what-is-the-differences-between-begin-rsa-private-key-and-begin-private-key

Converting OpenSSH public keys
http://blog.oddbit.com/2011/05/08/converting-openssh-public-keys/

https://security.stackexchange.com/questions/73156/whats-the-difference-between-x-509-and-pkcs7-certificate
http://en.wikipedia.org/wiki/X.509#Certificate_filename_extensions
http://forum.rebex.net/5832/how-to-load-certificates-pem-spc-pvk-net

欢迎打赏,谢谢支持~