keytool
秘钥算法:产生键的加密算法。支持DSA和RSA。
-genkeypair:生成一对非对称密钥;
keystore
Keytool将密钥(key)和证书(certificates)存在一个称为keystore的文件中在keystore里,包含两种数据:
密钥实体(Key entity)——密钥(secret key)又或者是私钥和配对公钥(采用非对称加密)
可信任的证书实体(trusted certificate entries)——只包含公钥
加密算法
常用的对称性加密算法有:DES算法、AES算法、3DES算法、TDEA算法、Blowfish算法、RC5算法、IDEA算法。
常用的非对称性加密算法有:DSA算法、RSA算法、Elgamal算法、背包算法、Rabin算法、D-H算法、ECC算法(椭圆曲线加密算法)。
密钥对
密钥对包含公钥和私钥,用于非对称加密和数字签名。
密钥对的用途:
1. 加密和解密数据
- 公钥加密: 任何人都可以使用公钥加密信息,但只有拥有对应私钥的人才能解密。这保证了信息的机密性,即使信息在传输过程中被拦截,也无法被他人解读。
- 私钥解密: 只有拥有私钥的人才能解密用公钥加密的信息。这保证了信息的安全性,只有授权人才能获取信息内容。
2. 数字签名
- 私钥签名: 私钥用来生成数字签名,可以用来验证信息的来源和完整性。
- 公钥验证: 任何人都可以使用公钥验证签名是否有效,从而确认信息是否来自拥有私钥的人,并且在传输过程中没有被篡改。
3. 密钥交换
- 公钥加密: 使用公钥加密一个随机密钥,并将加密后的密钥发送给对方。
- 私钥解密: 对方使用自己的私钥解密密钥,之后双方就可以使用这个密钥进行对称加密通信,提高通信效率。
密钥对在证书方面的举例
以下是一个关于公钥和私钥在证书方面的具体使用流程的例子:
场景: 你想在网站上购买商品,需要提供信用卡信息。
流程:
-
生成证书: 网站拥有者会生成一对公钥和私钥。
- 私钥: 保存在网站服务器的机密区域,不能被泄露。
- 公钥: 会被发布到证书颁发机构 (CA)。
-
申请证书: 网站拥有者会向 CA 提交申请,证明网站的合法性。
-
签发证书: CA 会验证网站的合法性,并用自己的私钥对网站的公钥进行数字签名,生成一个包含网站公钥的数字证书。
-
安装证书: 网站拥有者会将证书安装到网站服务器上。
-
用户访问网站: 当用户访问网站时,浏览器会从网站服务器获取证书。
-
验证证书: 浏览器会使用 CA 的公钥验证证书的有效性,并信任网站的公钥。
-
加密通信: 浏览器会使用网站的公钥加密信用卡信息,并发送给网站服务器。
-
解密信息: 网站服务器使用自己的私钥解密信用卡信息,进行交易处理。
安全保障:
- 证书验证: 浏览器验证证书的有效性,可以确保网站的真实性,防止钓鱼网站的攻击。
- 公钥加密: 使用网站公钥加密信用卡信息,只有网站服务器可以解密,保证了信息传输的安全。
jks
tomcat配置
举例:
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
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
导入证书
将我们刚才的证书导入:
keytool -import -alias tms -file tms.cert -keystore tms.jks -storepass sunniwell
再次查看文件信息:
您的密钥库包含 1 个条目