证书

证书包含

  • 申请者的基本信息:网站使用的加密算法、网站使用的hash算法;
  • 申请者的公钥;
  • 认证机构的信息:认证机构的名称,证书到期时间。
  • 认证机构的证书签名。

总之:证书的核心功能就是安全的传递公钥

证书编码

标识证书编码类型,表明证书是以什么编码存在

Der (Distinguished Encoding Rules)

  • 二进制编码的证书公私钥
  • 正确的理解是:”我有二进制编码的证书”,而不是”我有一个DER证书”
  • der格式的证书文件内容是经过加密的二进制数据,也就是说文件内容打开后是乱码

Pem (Privacy Enhanced Mail)

pem格式的证书内容是经过加密的文本文件,一般是base64编码格式的Der证书,增加头尾了

可直接用记事本打开查看

PEM私钥增加:

1
2
-----BEGIN RSA PRIVATE KEY----- 
-----END RSA PRIVATE KEY-----

PEM公钥增加:

1
2
-----BEGIN PUBLIC KEY----- 
-----END PUBLIC KEY-----

PEM证书增加:

1
2
-----BEGIN CERTIFICATE----- 
-----END CERTIFICATE-----

pem格式和der格式的证书文件可以相互转换

证书相关后缀

.key(pem格式的私钥,也有人认为这是公钥)

通常标识这个是证书文件,公钥和私钥可以被编码为二进制DERASCII PEM

.pub(pem格式的公钥)

通常是公钥文件

.pem

证书编码-Pem, 我有一个以”-BEGIN…”为前缀的ASCII(Base64)数据格式的证书。

.der(der格式的证书)

证书编码-Der, 我有一个”DER编码的证书”,而不是”我有一个DER证书”。

.csr(通过该文件去向CA机构签发证书)

证书请求,网站生成请求供CA签发证书使用

.req(申请证书时发送给CA认证机构的请求文件)

含义和.csr等同

.crt(per格式的证书)

常用于linux系统,表示我是一个”可以被pem或der编码的证书”,crtcer含义基本相同

.cer

常用于windows系统,表示我是一个”可以被pem或der编码的证书”, crtcer含义基本相同,windows下可以将crt导出成cer

.p12(Pkcs#12)

  • Pkcs#1 RSA格式的公私或私钥
  • Pkcs#8 相比pkcs#1而言不仅仅是RSA格式的更通用的公私或私钥
  • Pkcs#12 记录对称的公钥和私钥

.jks(Java Key Store,证书钱包)

.keystore(jks的常用名)

证书工具

Jdk keytool

Jdk提供的证书工具,常用于java或tomcat程序

OpenSSL

通用证书工具,见OpenSSL

常用命令

查看证书文件内容(只针对证书文件,不包含公私钥)

  • der:openssl x509 -in es190.crt -inform der -text –noout
  • pem:openssl x509 -in es190.crt -text –noout

生成p12证书

openssl pkcs12 -export -in 公钥.pem -inkey 私钥.pem -out admin.p12
(只能是pem编码,不能是der的)

转换证书格式(只针对证书文件,不包含公私钥)

  • pem->der:openssl x509 -in cert.crt -outform der-out cert.der
  • der->pem:openssl x509 -in cert.crt -inform der -outform pem -out cert.pem
  • jks->p12:keytool -importkeystore -srckeystore eastcom -srcstoretype jks -destkeystore eastcom.p12 -deststoretype pkcs12
  • p12->jks:keytool -importkeystore -srckeystore eastcom.p12 -srcstoretype PKCS12 -deststoretype JKS -destkeystore es.jks
  • p12->crt:openssl pkcs12 -in client.p12 -clcerts -nokeys -out client.crt