У меня есть апплет, который читает сертификат и, как следствие, открытый и закрытый ключи из USB-токена. Я могу получить доступ к PrivateKey всякий раз, когда токен подключен, но у меня есть криптографическая среда, в которой мне нужно опубликовать сертификат и ключи в сервлете, и этот сервлет подпишет выбранные файлы в моем приложении. Он работал нормально, пока я не получил этот токен с неэкспортируемым PrivateKey.
PrivateKey privateKey = (PrivateKey) keyStore.getKey(alias, PIN.toCharArray());
Затем я использую декодер, чтобы преобразовать массив байтов в BASE64 и опубликовать его.
sun.misc.BASE64Encoder encoder = new sun.misc.BASE64Encoder();
String base64encoded = encoder.encode(privateKey.getEncoded());
Однако, используя этот конкретный токен, метод getEncoded(), используемый для privateKey.getEncoded(), всегда возвращает значение null. Поэтому я не нашел способа получить массив байтов из объекта PrivateKey.
Есть ли способ сделать это?