2

我有一段时间没有做证书的事情了,我正在寻找一些帮助。

理想情况下,我想实现这一目标。

  • 创建罐子。
  • 用证书签名。
  • 让该 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 将对其进行验证。我不需要在内部做任何检查。

我会对此进行测试,然后写下我的发现。

4

0 回答 0