证书生成#
keytool 简介#
Keytool是一个Java数据证书的管理工具, Keytool将密钥(key)和证书(certificates)存在一个称为keystore的文件中。
在keystore里,包含两种数据:
- 密钥实体(Key entity)——密钥(secret key)又或者是私钥和配对公钥(采用非对称加密)
- 可信任的证书实体(trusted certificate entries)——只包含公钥
我们常说的证书就是就是上面的公钥,公钥是公开给其它人使用的
- 证书后缀解释jks 是Java的keytool证书工具支持的证书私钥格式;pfx 是微软支持的私钥格式(p12是pfx的新格式);cer / crt 是证书的公钥格式(cer是crt证书的微软形式)csr 数字证书签名请求文件(Cerificate Signing Request)
Tips:
- .der .cer : 此证书文件是二进制格式,只含有证书信息,不包含私钥。
- .crt : 此证书文件是二进制格式或文本格式,一般为文本格式,功能与 .der 及 .cer 证书文件相同。
- .pem : 此证书文件一般是文本格式,可以存放证书或私钥,或者两者都包含。 .pem 文件如果只包含私钥,一般用 .key 文件代替。
- .pfx .p12 : 此证书文件是二进制格式,同时包含证书和私钥,且一般有密码保护。
- .keystore .truststore : 两者本质都是keystore,都是储存密钥的容器:不过两者存放的密钥所有者不同,keystore是存储自己的公钥和私钥而,truststore是存储自己信任对象的公钥。约定通过文件名称区分类型以及用途truststore 是必须的,如果我们没有显式的指定,那么java会默认指定为 $JAVA_HOME/lib/security/cacerts 这个文件java 在jdk 中已经默认在 $JAVA_HOME/lib/security/cacerts 这个文件中预置了常用的证书
- 不同语言需要的证书格式并不一致,比如说Java采用jks,.Net采用pfx和cer,Php则采用pem和cer;
- 区别证书的不是后缀名,而是文件的格式和内容。
keytool 命令详解#
- 密钥和证书管理工具
- -certreq 生成证书请求 -changealias 更改条目的别名 -delete 删除条目 -exportcert 导出证书(简写 export) -genkeypair 生成密钥对(简写 genkey) -genseckey 生成密钥 -gencert 根据证书请求生成证书 -importcert 导入证书或证书链(简写 import) -importpass 导入口令 -importkeystore 从其他密钥库导入一个或所有条目 -keypasswd 更改条目的密钥口令 -list 列出密钥库中的条目 -printcert 打印证书内容 -printcertreq 打印证书请求的内容 -printcrl 打印 CRL 文件的内容 -storepasswd 更改密钥库的存储口令