Я экспериментирую с механизмом условных разрешений OSGi. В частности, я пытаюсь использовать org.osgi.service.condpermadmin.BundleSignerCondition, чтобы ограничить, какие пулы можно запустить. Документация У меня указано, что для использования этого разрешения я должен указать путь к хранилищу ключей JKS, используя свойство конфигурации org.osgi.framework.trust.repositories. Однако в той же документации упоминается, что JKS, упомянутый в этом свойстве, не должен иметь пароль. Поэтому возникает вопрос: как создать JKS без пароля? Утилита Keytool отказывается создавать JKS с пустым паролем.
Можно ли создать файл хранилища JKS без пароля?
Ответ 1
Вы не можете создать хранилище ключей с пустым паролем с помощью keytool, но вы все равно можете сделать это программно.
Прочитайте сертификат, как это:
private static Certificate readCert(String path) throws IOException, CertificateException {
try (FileInputStream fin = new FileInputStream(path)) {
return CertificateFactory.getInstance("X.509").generateCertificate(fin);
}
}
Затем создайте хранилище ключей с пустым паролем следующим образом:
try {
// Reading the cert
Certificate cert = readCert("/tmp/cert.cert");
// Creating an empty JKS keystore
KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
keystore.load(null, null);
// Adding the cert to the keystore
keystore.setCertificateEntry("somecert", cert);
// Saving the keystore with a zero length password
FileOutputStream fout = new FileOutputStream("/tmp/keystore");
keystore.store(fout, new char[0]);
} catch (GeneralSecurityException | IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Запустите команду:
keytool -list -keystore keystore
Он запросит пароль, но вы можете просто нажать Enter. Вы получите следующее предупреждение, но содержимое хранилища ключей будет указано:
***************** WARNING WARNING WARNING *****************
* The integrity of the information stored in your keystore *
* has NOT been verified! In order to verify its integrity, *
* you must provide your keystore password. *
***************** WARNING WARNING WARNING *****************
Это может работать для вас.