Java keytool的使用

717 阅读5分钟

keytool

image.png image.png

秘钥算法:产生键的加密算法。支持DSA和RSA。
-genkeypair:生成一对非对称密钥;

keystore
Keytool将密钥(key)和证书(certificates)存在一个称为keystore的文件中在keystore里,包含两种数据:
密钥实体(Key entity)——密钥(secret key)又或者是私钥和配对公钥(采用非对称加密)
可信任的证书实体(trusted certificate entries)——只包含公钥

image.png

加密算法

常用的对称性加密算法有:DES算法、AES算法、3DES算法、TDEA算法、Blowfish算法、RC5算法、IDEA算法。
常用的非对称性加密算法有:DSA算法、RSA算法、Elgamal算法、背包算法、Rabin算法、D-H算法、ECC算法(椭圆曲线加密算法)。

密钥对

密钥对包含公钥和私钥,用于非对称加密和数字签名。

密钥对的用途:

1. 加密和解密数据

  • 公钥加密: 任何人都可以使用公钥加密信息,但只有拥有对应私钥的人才能解密。这保证了信息的机密性,即使信息在传输过程中被拦截,也无法被他人解读。
  • 私钥解密: 只有拥有私钥的人才能解密用公钥加密的信息。这保证了信息的安全性,只有授权人才能获取信息内容。

2. 数字签名

  • 私钥签名: 私钥用来生成数字签名,可以用来验证信息的来源和完整性。
  • 公钥验证: 任何人都可以使用公钥验证签名是否有效,从而确认信息是否来自拥有私钥的人,并且在传输过程中没有被篡改。

3. 密钥交换

  • 公钥加密: 使用公钥加密一个随机密钥,并将加密后的密钥发送给对方。
  • 私钥解密: 对方使用自己的私钥解密密钥,之后双方就可以使用这个密钥进行对称加密通信,提高通信效率。

密钥对在证书方面的举例

以下是一个关于公钥和私钥在证书方面的具体使用流程的例子:

场景:  你想在网站上购买商品,需要提供信用卡信息。

流程:

  1. 生成证书:  网站拥有者会生成一对公钥和私钥。

    • 私钥: 保存在网站服务器的机密区域,不能被泄露。
    • 公钥: 会被发布到证书颁发机构 (CA)。
  2. 申请证书:  网站拥有者会向 CA 提交申请,证明网站的合法性。

  3. 签发证书:  CA 会验证网站的合法性,并用自己的私钥对网站的公钥进行数字签名,生成一个包含网站公钥的数字证书。

  4. 安装证书:  网站拥有者会将证书安装到网站服务器上。

  5. 用户访问网站:  当用户访问网站时,浏览器会从网站服务器获取证书。

  6. 验证证书:  浏览器会使用 CA 的公钥验证证书的有效性,并信任网站的公钥。

  7. 加密通信:  浏览器会使用网站的公钥加密信用卡信息,并发送给网站服务器。

  8. 解密信息:  网站服务器使用自己的私钥解密信用卡信息,进行交易处理。

安全保障:

  • 证书验证:  浏览器验证证书的有效性,可以确保网站的真实性,防止钓鱼网站的攻击。
  • 公钥加密:  使用网站公钥加密信用卡信息,只有网站服务器可以解密,保证了信息传输的安全。

jks

image.png

tomcat配置

image.png

举例:

keytool -genkey 
-alias javadebugkey(别名) 
-keypass java123(别名密) 
-keyalg RSA(生成签名算法) 
-keysize 1024(密钥长度) 
-validity 365(有效期,天单位) 
-keystore javadebugkey.keystore(生成的keystore文件)
keytool -genkey 
-alias server 
-keyalg RSA 
-sigalg MD5withRSA 
-keysize 2048 
-keystore www_mydomain_com.jks 
-dname "CN=www.mydomain.com,OU=it, O=mycompany, L=thecity, ST=thestate, C=US" 
&& 
keytool -certreq 
-alias server 
-file www_mydomain_com.csr 
-keystore www_mydomain_com.jks

image.png

1690445999296.png

java keypass 与 storepass的区别

在 Java 中,keypass 和 storepass 是用于保护密钥库(keystore)的两个密码:

  • keypass (密钥密码) :用于保护密钥库中存储的 单个密钥 的密码。它用来加密和解密每个密钥。
  • storepass (存储库密码) :用于保护整个 密钥库文件 的密码。它用来加密和解密整个密钥库文件,并保护其内容不被未授权访问。

简单来说:

  • storepass 是用来保护密钥库文件本身的密码。
  • keypass 是用来保护密钥库文件中每个密钥的密码。

举个例子:

想象一下你有一个保险箱。

  • storepass 是保险箱的密码,用来打开保险箱。
  • keypass 是每个盒子里的锁的密码,用来打开盒子并获取里面的贵重物品。

使用场景:

  • 通常情况下,storepass 应该更安全,因为它保护整个密钥库。
  • 如果需要使用多个密钥,但不想使用同一个 keypass,可以使用不同的 keypass 来保护不同的密钥。

总结:

  • keypass 用于保护单个密钥,storepass 用于保护整个密钥库。
  • storepass 通常比 keypass 更重要,因为它保护整个密钥库的安全。

注意:

  • 在某些情况下,keypass 和 storepass 可以相同,但建议使用不同的密码,以提高安全性。
  • 为了更好的安全性,建议使用强密码,并且不要将密码记录在容易被找到的地方。

添加一个Key

每一条key由一个别名alias引用
如果没有-keystore参数,则默认在HOME目录下创建一个.keystore文件

keytool -genkeypair -alias tms -keypass java123 -keyalg RSA -keysize 1024 -keystore tms.jks(或.keystore) -validity 365 -storepass sunniwell

查看keystore中所有的key的详情 -v

keytool -list -v -keystore E:\NM-related\Bulid\tms.jks -storepass sunniwell

查看keystore中指定的一条记录

keytool -list -v -alias tms -keystore E:\NM-related\Bulid\tms.jks -storepass sunniwell

导出证书文件

将keystore中的key导出成证书文件

keytool -export -alias tms -keystore E:\NM-related\Bulid\tms.jks  -file tms.cert -storepass sunniwell

查看证书

keytool -printcert -file  tms.cert

删除信息

删除一个key条目

keytool -delete -alias tms -keystore C:\Users\Administrator\tms.jks -storepass sunniwell

image.png

导入证书

将我们刚才的证书导入:

keytool -import -alias tms -file tms.cert -keystore tms.jks -storepass sunniwell

再次查看文件信息:
您的密钥库包含 1 个条目