一、利用java自带的keytool生成私钥公钥

1 我的keytool路径记得换成自己的

C:\Program Files\Java\jdk1.8.0_131\bin

java license开发 java生成license_license


2 以管理员方式打开cmd窗口,右键电脑的开始,具体路径加单双引号都行,普通cmd不加引号也行

java license开发 java生成license_java license开发_02


java license开发 java生成license_license_03


java license开发 java生成license_java license开发_04

3 生成私钥
执行以下命令,keypass密钥口令(私钥)、storepass密钥库口令(公钥)

【以下命令复制粘贴时可能换行,请自行修改为一行,没有换行请忽略】

keytool -genkeypair -keysize 1024 -validity 3650 -alias "privateKey" -keystore "privateKeys.keystore" -keypass "你的私钥" -storepass "你的公钥" -dname "CN=localhost, OU=localhost, O=localhost, L=SH, ST=SH, C=CN"

java license开发 java生成license_java license开发_05

参数具体意思

管理员cmd端执行keytool -h获取如下

 -certreq            生成证书请求
 -changealias        更改条目的别名
 -delete             删除条目
 -exportcert         导出证书
 -genkeypair         生成密钥对
 -genseckey          生成密钥
 -gencert            根据证书请求生成证书
 -importcert         导入证书或证书链
 -importpass         导入口令
 -importkeystore     从其他密钥库导入一个或所有条目
 -keypasswd          更改条目的密钥口令
 -list               列出密钥库中的条目
 -printcert          打印证书内容
 -printcertreq       打印证书请求的内容
 -printcrl           打印 CRL 文件的内容
 -storepasswd        更改密钥库的存储口令
 
普通cmd端执行keytool -h获取如下

 -alias <alias>                  要处理的条目的别名
 -keyalg <keyalg>                密钥算法名称
 -keysize <keysize>              密钥位大小
 -sigalg <sigalg>                签名算法名称
 -destalias <destalias>          目标别名
 -dname <dname>                  唯一判别名
 -startdate <startdate>          证书有效期开始日期/时间
 -ext <value>                    X.509 扩展
 -validity <valDays>             有效天数
 -keypass <arg>                  密钥口令
 -keystore <keystore>            密钥库名称
 -storepass <arg>                密钥库口令
 -storetype <storetype>          密钥库类型
 -providername <providername>    提供方名称
 -providerclass <providerclass>  提供方类名
 -providerarg <arg>              提供方参数
 -providerpath <pathlist>        提供方类路径
 -v                              详细输出
 -protected                      通过受保护的机制的口令

发现多了一个文件

java license开发 java生成license_java license开发_06


4 查看秘钥

然后你不管你用什么工具(txt、Notepad、EditPlus)、什么编码格式(GBK、UTF-8、ANSI)发现文件都是乱码的

好接下来教你如何查看秘钥

keytool -list -v -keystore "privateKeys.keystore"

java license开发 java生成license_java_07


5 接下来把私匙库内的公匙导出到一个certfile.cer文件当中

keytool -export -alias "privatekey" -file "certfile.cer" -keystore "privateKeys.keystore"

秘钥输入依旧是隐藏的

java license开发 java生成license_提供方_08


然后多了个certfile.cer文件

java license开发 java生成license_license_09


6 通过certfile.cer文件把这个证书文件导入到公匙库storepass密钥库口令(公钥)

keytool -import -alias "publicCert" -file "certfile.cer" -keystore "publicCerts.keystore" -storepass "你的公钥"

storepass是客户要知道的密码,必须和后面生成证书的配置密码、验证证书的配置密码一样

java license开发 java生成license_提供方_10


然后发现又多了个文件

java license开发 java生成license_ide_11

二、代码配置

1 查看要部署服务器的ip和Mac

查ip:ifconfig
查mac:cat /sys/class/net/eth0/address

java license开发 java生成license_ide_12


如果不行请参考

https://www.jianshu.com/p/b4102e3e3e96 2 代码配置

将生成的两个文件粘到resource文件中

改licenseCreate文件

3生成证书

三、证书校验

1 将证书放到linux上

java license开发 java生成license_提供方_13


2 启动程序

大佬文档,有兴趣的同学可以详细研究
https://www.zifangsky.cn/1277.html

四、总结

1 通过keytool生成私钥文件
2 通过私钥文件生成公钥文件
3 通过私钥文件生成证书
4 通过公钥文件和证书(license.lic)验证证书