ssl cert introduce


X.509

X509是一种证书标准。主要定义了证书中应该包含哪些内容。详情可以查看 RFC5280.

证书文件格式

X.509只是规定了标准,但证书文件可以有许多的不同编码方式:

  • DER, CER: 文件是二进制格式,只保存证书,不保存密钥。
  • PEM: 一般是文本格式,可保存证书,可保存密钥
  • CRT: 可以是二进制,也可以是文本格式,与DER格式一样不保存私钥
  • PFX, P12: 二进制格式,同时包含证书和私钥,一般有密码保护
  • JKS: 二进制格式,同时包含证书和私钥,一般有密码保护

常见的公钥后缀: pem, crt, key 常见的私钥后缀: pfx, p12, pem, key

PKCS: Public-Key Cryptography Standards。由RSA实验室与其它安全系统厂商为促进公钥密码的发展而制订的一系列标准。PKCS目前共发布过15个标准。常见的有:

  • PKCS#7: Cryptographic Message Syntax Standard。常用的后缀: .P7B, .P7C, .SPC
  • PKCS#10: Certification Request Standard
  • PKCS#12: Personal Information Exchange Syntax Standard。常见的后缀: .P12, .PFX

  • PEM: Privacy Enhanced Mail。如果打开证书文件,那么其内容是以-----BEGIN...开始,以-----END...结束。其间的内容是用BASE64编码。Apache和类Unix系统偏向于使用这种编码方式。

openssl常用命令

查看PEM证书信息的方法:

1
openssl x509 -in certificate.pem -text -noout
  • DER: Distinguished Encoding Rules。二进制。Java和Windows系统偏向于使用这种编码方式。

查看DER证书信息方法:

1
openssl x509 -in certificate.der -inform der -text -noout

创建CA证书的RSA密钥(PEM格式)

1
openssl genrsa -des3 -out ca.key 2048

创建CA证书(PEM格式,有效期一年)

1
openssl req -new -x509 -days 365 -key ca.key -out ca.crt -config openssl.cnf

X509转换为PFX

1
openssl pkcs12 -export -out server.pfx -inkey server.key -in server.crt

PEM格式的ca.key转为Microsoft可以识别的pvk格式

1
pvk -in ca.key -out ca.pvk -nocrypt -topvk

PKCS#12转换为PEM

1
openssl pkcs12 -nocerts -nodes -in cert.p12 -out private.pem 验证 openssl pkcs12 -clcerts -nokeys -in cert.p12 -out cert.pem

从PFX格式文件中提取私钥文件(.key)

1
openssl pkcs12 -in mycert.pfx -nocerts -nodes -out mycert.key

PEM转换为SPC

1
openssl crl2pkcs7 -nocrl -certfile venus.pem -outform DER -out venus.spc

PEM转换为PKS#12

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

DER文件(.crt .cer .der)与PEM之间转换

1
2
3
openssl x509 -inform der -in certificate.cer -out certificate.pem

openssl x509 -outform der -in certificate.pem -out certificate.der

P12文件导出公钥私钥

1
2
3
4
5
6
7
8
生成key文件
openssl pkcs12 -in demo.p12 -nocerts -nodes -out demo.key

导出私钥
openssl rsa -in demo.key -out demo_pri.pem

导出公钥
openssl rsa -in demo.key -pubout -out demo_pub.pem