Изменить сертификат для закрытого ключа в хранилище ключей - PullRequest
0 голосов
/ 17 ноября 2018

Можно ли изменить сертификат и цепочку сертификатов для существующей записи (секретного ключа) в хранилище ключей.Как я понимаю, сначала мне нужно удалить существующую запись, а затем сохранить тот же закрытый ключ с новым сертификатом и цепочкой.Это решение не подходит, так как я не знаю пароль для этой записи в хранилище ключей.

Решение до сих пор :

Генерация ключа и начальное хранилище:

KeyPair kp = generateRSAKeyPair();
X509Certificate selfSignedCert = makeSelfSignedCert(kp);
ks.load(...);
ks.setKeyEntry("entry1", kp.getPrivate(), PASSWORD, new X509Certificate[]{selfSignedCert});
ks.store(...);

После того, как CA отправит сертификат, я хочу:

ks.load(...);
ks.setCertificateEntry("entry1", caSignedCert);
ks.store(...);

Основная проблема заключается в том, что у меня нет нужного сертификата в то время, когда ключ хранится в хранилище ключей.Существует задержка между генерацией ключей и отправкой CA подписанных сертификатов.

Другой вариант - вообще не устанавливать сертификат, а после того, как CA подписывает CSR, добавить окончательный подписанный сертификат в хранилище ключей.Что-то вроде:

KeyPair kp = generateRSAKeyPair();
ks.load(...);
ks.setKeyEntry("entry1", kp.getPrivate(), PASSWORD);
ks.store(...);
// after some time
ks.load(...);
ks.setCertificateEntry("entry1", caSignedCert);
ks.store(...);

Но я не смог найти способ хранить закрытый ключ без связанного сертификата в хранилище ключей.Хранение закрытого ключа в другом месте также невозможно.

Потенциальным решением является хранение подписанного сертификата от CA до тех пор, пока пользователь не предоставит пароль для записи в хранилище ключей, а затем удаление существующей записи и создание новой записи с соответствующими сертификатами.Это решение не является идеальным, и я хотел бы не идти по этому пути.

Любые предложения приветствуются.

1 Ответ

0 голосов
/ 04 декабря 2018

Решение состоит в том, чтобы сначала сохранить ключ в хранилище ключей с самозаверяющим сертификатом. В настоящее время этот ключ нельзя использовать, поскольку CA еще не отправил соответствующий сертификат для этого ключа. Если в это время для подписи будет использоваться ключ, будет использоваться связанный самоподписанный сертификат (что нежелательно).

Через некоторое время CA отправляет соответствующий сертификат, который должен где-то храниться (база данных в моем случае).

При первой возможности, когда указан пароль для ввода ключа, ключ извлекается из хранилища ключей и сразу же сохраняется снова с тем же паролем, но с другим псевдонимом и соответствующим сертификатом от CA. Тогда можно безопасно удалить оригинальную запись с самозаверяющим сертификатом.

Надеюсь, это кому-нибудь поможет. Любые лучшие решения приветствуются.

...