Форум КриптоПро
»
Средства криптографической защиты информации
»
КриптоПро JCP, JavaTLS
»
Загруженный KeyStore оказывается пустым если InputStream.available возвращает 0
Статус: Участник
Группы: Участники
Зарегистрирован: 11.07.2017(UTC) Сообщений: 28  Сказал(а) «Спасибо»: 3 раз
|
Пример на Scala (загружаю созданное через панель управления хранилище с одним сертификатом): Код:import java.io._
import java.security._
import java.nio.file._
import scala.collection.JavaConverters._
Security.addProvider(new ru.CryptoPro.JCP.JCP)
val path = Paths.get("/home/dmitry/work/tmp/test.store")
def mkInputStream(path: Path) = Files.newInputStream(path)
def overrideAvailable(is: InputStream) =
new FilterInputStream(is) {
override def available = 0
}
def dumpAliases(is: InputStream) = {
val ks = KeyStore.getInstance("CertStore", "JCP")
ks.load(is, null)
println(ks.aliases.asScala.toList)
}
// Вывод (правильный): List(test-cert)
dumpAliases(mkInputStream(path))
// Вывод (неправильный): List()
dumpAliases(overrideAvailable(mkInputStream(path)))
Ubuntu 18.10, OpenJDK 11.0.3, JCP 2.0.40132-A Могу предположить, что в реализации KeyStoreSpi InputStream.available используется для проверки того что ввод закончился. Это некорректно - см. javadoc: Цитата:Returns an estimate of the number of bytes that can be read (or skipped over) from this input stream without blocking, which may be 0, or 0 when end of stream is detected.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,006  Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 715 раз в 675 постах
|
Здравствуйте. Спасибо за информацию. А с какой целью Автор: dmitryp  def overrideAvailable(is: InputStream) = new FilterInputStream(is) { override def available = 0 } ? |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 11.07.2017(UTC) Сообщений: 28  Сказал(а) «Спасибо»: 3 раз
|
Евгений, одна из используемых библиотек (fs2) создаёт нестандартные InputStream'ы, которые приводят к данной проблеме. Минимизацией выяснил, что дело в InputStream.available, поэтому в примере использовать саму библиотеку не потребовалось.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,006  Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 715 раз в 675 постах
|
Понятно. Постараемся это поправить. |
|
|
|
|
Форум КриптоПро
»
Средства криптографической защиты информации
»
КриптоПро JCP, JavaTLS
»
Загруженный KeyStore оказывается пустым если InputStream.available возвращает 0
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close