keytool を使用して生成したキーで jar に署名しました。実行時に、jar が変更されていないことを確認するにはどうすればよいですか?
目標は、証明書情報を使用して、jar がビルドされてから jar 内の各クラスが変更されていないことを確認することです。これはランタイム チェックであるため、コードを含む jar はユーザーのファイル システムのどこにでも存在する可能性があります。
このJarFile
クラスには jar ベリファイアが組み込まれています。このコード スニペットは、アーカイブ内のすべてのエントリの署名を検証します。
JarFile jar = new JarFile("/path/to/myarchive.jar");
Enumeration<JarEntry> entries = jar.entries();
while (entries.hasMoreElements()) {
JarEntry entry = entries.nextElement();
try {
jar.getInputStream(entry);
} catch (SecurityException se) {
/* Incorrect signature */
throw new Error("Signature verification failed", se);
}
}
このコードは jar の整合性を検証しますが、特定のキーまたは証明書に対して署名を検証しないことに注意してください。