Добрый день!
Используем KC_LoadKeyStore() для загрузки нескольких хранилищ с разными alias’ами.
Корневой сертификат установлен системно, промежуточный загружаем вручную через X509LoadCertificateFromFile().
Вручную загружаем потому, что рассматриваем use case работы с коммерческими УЦ.
У каждого УЦ свой промежуточный сертификат. Конечно, в production целесообразней будет устанавливать их все в систему, но хочу воспроизвести и понять проблему.
Поправьте, если я ошибаюсь.
Столкнулись с тем, что при загрузке нового хранилища ранее загруженный промежуточный сертификат сбрасывается.
Воспроизведение:
// Корневой CA установлен системно через update-ca-certificates
// 1. Загружаем хранилище
KC_LoadKeyStore(..., "signer1");
// 2. Загружаем промежуточный сертификат
X509LoadCertificateFromFile(ca_intermediate, KC_CERT_INTERMEDIATE);
// 3. Подписываем — всё работает
SignData("signer1", flags, ...); // OK
// 4. Загружаем второе хранилище
KC_LoadKeyStore(..., "signer2");
// 5. Пытаемся подписать первым — ошибка, промежуточный сброшен
SignData("signer1", flags, ...); // KCR_CERTTIMEINVALID (0x08F00042)
Вопросы:
- Это ожидаемое поведение?
- Есть ли способ сохранить вручную загруженные сертификаты при добавлении новых хранилищ?
Текущее решение: просто перезагружаем промежуточные сертификаты после каждого KC_LoadKeyStore().
Это работает, но хотелось бы понять, есть ли более элегантный способ.