keyStore和truststore区别
我们自己的应用中通常所说的keystore或者truststore主要是针对于应用本身的需求来的。
keystore和truststore从其文件格式来看其实是一个东西,只是为了方便管理将其分开
keystore中一般保存的是我们的私钥,用来加解密或者为别人做签名
truststore中保存的是一些可信任的证书,主要是java在代码中访问某个https的时候对被访问者进行认证的,以确保其实可信任的。truststore是必须的,如果我们没有显式的指定,那么java会默认指定为$JAVA_HOME/lib/security/cacerts 这个文件。
如果要指定的话,可以在java的参数中进行指定
1 | -Djavax.net.ssl.keyStore=clientKeys |
keystore可以看成一个放key的库,key就是公钥,私钥,数字签名等组成的一个信息。
truststore是放信任的证书的一个store。
truststore和keystore的性质是一样的,都是存放key的一个仓库,区别在于,truststore里存放的是只包含公钥的数字证书,代表了可以信任的证书,而keystore是包含私钥的。
Keytool常用命令
1 | keytool密钥和证书管理工具 |
生成证书
生成jks格式的keystore
1 | keytool -genkeypair -alias abc -keyalg RSA -keypass abc -keystore abc.jks -storepass abc -validity 3650 |
可以将jks格式的keystore转化成pfx格式
jks->p12
1 | keytool -v -importkeystore -srckeystore abc.jks -srcstoretype jks -srcstorepass abc -destkeystore abc.pfx -deststoretype pkcs12 -deststorepass abc -destkeypass abc |
p12->jks
1 | keytool -importkeystore -srckeystore keystore.p12 -srcstoretype PKCS12 -deststoretype JKS -destkeystore keystore.jks |
将现有p12证书导入至jks格式的keystore中
1 | keytool -importkeystore -destkeystore keystore.jks -srckeystore server.p12 -srcstoretype PKCS12 -alias 1 -storepass daniel |
提取公钥
用keytool只能提取cert格式的公钥
从jks导出cert
1 | keytool -list -rfc -keystore abc.jks -storepass abc |
通过openssl可以提取PUBLIC KEY格式
1 | 通过通道符号把cert格式转成public key格式 |
导入公钥
将cert导入jks,生成truststore
1 | keytool -import -v -alias cert001 -file cert001.cer -keystore trust.jks -storepass 123456 -noprompt |
提取私钥
需要把证书先转成pfx格式
jks->p12
1 | keytool -v -importkeystore -srckeystore abc.jks -srcstoretype jks -srcstorepass abc -destkeystore abc.pfx -deststoretype pkcs12 -deststorepass abc -destkeypass abc |
利用p12提取私钥
1 | openssl pkcs12 -in abc.pfx -nocerts -nodes -out abc.key |
用keytool创建Keystore和Truststore文件
介绍
1.目的:JSSE使用Truststore和Keystore文件来提供客户端和服务器之间的安全数据传输。
2.描述:Keytool 是一个Java数据证书的管理工具 ,Keytool将密钥(key)和证书(certificates)存在一个称为keystore的文件中. 在keystore里,包含两种数据:密钥实体(Key entity)-密钥(secret key)或者是私钥和配对公钥(采用非对称加密);可信任的证书实体(trusted certificate entries)-只包含公钥.
即:keytool是一个工具可以用来创建包含公钥和密钥的的keystore文件,并且利用keystore文件来创建只包含公钥的truststore文件。
步骤
生成一个含有一个私钥的keystore文件
1 | keytool -genkey -alias certificatekey -keyalg RSA -validity 700 -keystore keystore.jks |
说明:
- genkey:在用户主目录中创建一个默认文件”.keystore”,还会产生一个mykey的别名,mykey中包含用户的公钥、私钥和证书
- alias:别名
- keyalg:指定密钥的算法(如:RSA ,DSA 默认值为:DSA)
- validity: 指定创建的证书有效期多少天(默认 90)
- keystore: 指定密钥库的名称( 产生的各类信息将不在.keystore文件中,而是在keystore.jks中)
1 | $ keytool -genkey -alias certificatekey -keyalg RSA -validity 700 -keystore keystore.jks |
验证生成的keystore文件和证书信息
1 | $ keytool -list -v -keystore keystore.jks -alias certificatekey |
1 | $ keytool -list -v -keystore keystore.jks |
从keystore.jks导出公钥证书
用keytool只能提取cert格式的公钥
1 | $ keytool -export -alias certificatekey -keystore keystore.jks -rfc -file gongyaoCert.cer |
Truststore的生成以及公钥证书的导入
1 | $ keytool -import -alias certificatekey -file gongyaoCert.cer -keystore truststore.jks |
验证公钥truststore.jks文件
1 | $ keytool -list -v -keystore truststore.jks |