编码标准

ASN.1(Abstrcat Syntax Notation One)

是描述数据的表示、编码、传输、解码的灵活的记法。它提供了一套正式、无歧义和精确的规则以描述独立于特定计算机硬件的对象结构。

标准的ASN.1编码规则有基本编码规则(BER,Basic Encoding Rules)、规范编码规则(CER,Canonical Encoding Rules)、唯一编码规则(DER,Distinguished Encoding Rules)、压缩编码规则(PER,Packed Encoding Rules)和XML编码规则(XER,XML Encoding Rules)。

维基百科:ASN.1

编码格式

1.DER

DER为二机制格式,是BER的一个子集。

查看DER格式证书信息:

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

2.PEM

PEM对DER编码的证书再进行Base64编码的数据存放在”—–BEGIN CERTIFICATE—–“和”—–END CERTIFICATE—–“之中

查看PEM格式证书信息:

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

格式转换

  • PEM转为DER

    1
    
    openssl x509 -in cert.crt -outform der -out cert.der
  • DER转为PEM

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

证书标准

X.509证书

X.509是密码学里公钥证书的格式标准。X.509证书已应用在包括TLS/SSL在内的众多网络协议里,同时它也用在很多非在线应用场景里,比如电子签名服务。X.509证书里含有公钥、身份信息(比如网络主机名,组织的名称或个体名称等)和签名信息(可以是证书签发机构CA的签名,也可以是自签名)。

维基百科 X.509证书

证书容器

PKCS#12

由PFX进化而来的用于交换公共的和私有的对象的标准格式

PKCS#7

是签名或加密数据的格式标准,官方称之为容器。由于证书是可验真的签名数据,所以可以用SignedData结构表述。 .P7C文件是退化的SignedData结构,没有包括签名的数据。

证书文件扩展名

  • .pem

DER编码的证书再进行Base64编码的数据存放在”—–BEGIN CERTIFICATE—–“和”—–END CERTIFICATE—–“之中

  • .cer .crt .der

通常是DER二进制格式的,但Base64编码后也很常见。

  • .p12

PKCS#12格式,包含证书的同时可能还有带密码保护的私钥

  • .pfx

PFX,PKCS#12之前的格式(通常用PKCS#12格式,比如那些由IIS产生的PFX文件)

  • 生成pfx

-certfile CA(权威证书颁发机构)的根证书

1
openssl pkcs12 -export -in certificate.crt -inkey privateKey.key -out certificate.pfx -certfile CACert.crt
  • PFX转换为PEM编码(需要输入密码)

    1
    
    openssl pkcs12 -in for-iis.pfx -out for-iis.pem -nodes
  • .key

存放一个公钥或者私钥的文件,非X.509证书。编码可能是PEM,也可能是DER。

查看方法

1
2
3
4
# pem
openssl rsa -in mykey.key -text -noout
#der
openssl rsa -in mykey.key -text -noout -inform der
  • .csr(Certificate Signing Request)

即证书签名请求,并不是证书,是向权威证书颁发机构获得签名证书的申请,核心内容是一个公钥(附带了一些别的信息),在生成这个申请的时候,同时也会生成一个私钥,私钥要自己保管。

查看方法

1
openssl req -noout -text -in my.csr

如果是DER格式的话照旧加上-inform der