我有一段时间没有完成证书,我正在寻求一些帮助。
理想情况下,我想实现这一目标。
我已经创建了一个自签名证书。
keytool -genkey -keyalg RSA -alias selfsigned -keystore keystore.jks -storepass password -validity 360 -keysize 2048
导出其公共证书
keytool -storepass password -alias selfsigned -export -rfc -file outfile.txt.cer -keystore keystore.jks
签署了jar
jarsigner -keystore keystore.jks -signedjar signedX.jar x.jar selfsigned
Enter Passphrase for keystore: password
然后我在Jar中有一个类来加载outfile.cer并验证这个jar是否已经签名。
这听起来合理吗?
我正在使用我的私人证书签署jar,然后在jar中包含公共证书,并确保使用相同的证书签名。
对我来说,大洞似乎是我可以解开jar,更改代码,使用新的私人证书签名,在jar中包含NEW-Public-Cert,它将是有效的。
我认为这个问题的解决方案是要有一些外部密钥存储来验证,而不是我的jar中的证书。这听起来合理吗?
我理解这是一个悬而未决的问题,更多的是设计问题,而不是单一的正确答案问题。
任何建议都会很棒。
编辑...
一夜之间想到这一点,我意识到了我的过程中的错误。
我需要将PUBLIC证书导入客户端的密钥库。 然后当我用私钥签署我的jar时,客户端jvm将验证它。 我不需要在内部进行任何检查。
我会测试一下,然后写下我的发现。