-
jks是java keystore的简称,是java的数字证书库,查看证书私钥需要密码,避免私钥一名文的形式出现在代码中
-
情景一:客户端签名,服务器验签,确定是否是自己人
- 使用keytool生成jks,keytool工具在java->jdk->bin目录下,使用命令行,ps:红色部分请自行替换
keytool -genkey -alias 别名 -keyalg RSA -keystore 文件名.jks
经过一番复杂的输入,生成的jks文件在桌面->我的文档根目录下,这个jks里包含了自动生成的私钥
- 导出公钥cer证书,生成的cer文件在桌面->我的文档根目录下
keytool -export -alias 别名 -keystore 文件名.jks -storepass 密码 -file 文件名.cer
- 用私钥对数据签名,这里只贴核心代码,用时自行补全
1 KeyStore ks = KeyStore.getInstance("JKS"); 2 fis = new FileInputStream("路径\\文件名.jks"); 3 String storePassword = "上面生成jks时的密码"; 4 String storeAlias = "上面生成jks时的别名"; 5 ks.load(fis, storePassword.toCharArray()); 6 PrivateKey prikey = (PrivateKey) ks.getKey(storeAlias,storePassword.toCharArray());7 String priKeyStr = Base64.getEncoder().encodeToString(prikey.getEncoded());//查看私钥用8 System.out.println("私钥:"+priKeyStr);//查看私钥9 //用私钥签名
- 服务器用cer文件读取公钥,对客户端传输数据进行验签
-
情景二:客户端加密,服务器解密,对传输数据进行加密
- 读取服务器cer证书为公钥,然后用公钥加密明文,传送密文给服务器
1 is = new FileInputStream("路径\\文件名.cer"); 2 CertificateFactory cf = CertificateFactory.getInstance("X.509"); 3 X509Certificate cert = (X509Certificate) cf.generateCertificate(is);4 PublicKey publicKey=cert.getPublicKey();5 String pubKeyStr= Base64.getEncoder().encodeToString(publicKey.getEncoded());//查看公钥用6 System.out.println("公钥:"+pubKeyStr);//查看公钥7 //用公钥加密
- 服务器用私钥解出明文
注:一般明文较长,非对称加解密较慢,所以一般先用对称加密加密明文,然后用非对称加密加密对称加密密文
时间: 2024-11-02 17:26:23