Можно ли создать файл хранилища ключей JKS без пароля?

я экспериментирую с механизмом условных разрешений OSGi. Более конкретно, я пытаюсь использовать org.OSGi для.услуга.кондпермадмин.BundleSignerCondition, чтобы ограничить, какие пакеты могут быть запущены. Документация у меня есть состояния, что для использования этого разрешения я должен указать путь к хранилищам ключей JKS с помощью org.OSGi для.рамки.доверие.свойство конфигурации инфраструктуры репозиториев. Однако в той же документации упоминается, что JKS, упомянутый в этом свойстве, не должен иметь пароль. Так вопрос в том, как создать JKS без пароля? Утилита Keytool отказывается создавать 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  *****************

это может сработать для вас.