我有一段时间没有做证书的事情了,我正在寻找一些帮助。
理想情况下,我想实现这一目标。
- 创建罐子。
- 用证书签名。
- 让该 jar 中的代码验证它是否使用该证书进行了签名。
我创建了一个自签名证书。
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
在罐子上签名
jarsigner -keystore keystore.jks -signedjar signedX.jar x.jar selfsigned
Enter Passphrase for keystore: password
然后我在 Jar 中有一个类,它加载 outfile.cer 并验证这个 jar 是针对它签名的。
这听起来合理吗?
我正在使用我的私有证书对 jar 进行签名,然后在 jar 中包含公共证书并确保其使用相同的证书进行签名。
对我来说,最大的漏洞似乎是我可以解开罐子,更改代码,使用 NEW-Private-Cert 签名,将 NEW-Public-Cert 包含在 jar 中,这将是有效的。
我认为这个问题的解决方案是有一些外部密钥存储来验证,而不是我的 jar 中的证书。这听起来合理吗?
我很欣赏这是一个开放的问题,更像是一个设计问题,而不是一个正确答案的问题。
任何建议都会很棒。
编辑...
想了一夜之间,我意识到我的过程中的错误。
我需要将 PUBLIC 证书导入客户端上的 Keystore。然后,当我用私钥签署我的 jar 时,客户端 jvm 将对其进行验证。我不需要在内部做任何检查。
我会对此进行测试,然后写下我的发现。