Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline sibuty  
#1 Оставлено : 17 апреля 2018 г. 15:57:23(UTC)
sibuty

Статус: Новичок

Группы: Участники
Зарегистрирован: 12.04.2018(UTC)
Сообщений: 5

Добрый день.

На android девайсе установлена ACSP, через панель управления скопировал контейнер с тестовым сертификатом.
Так же создал ключевой контейнер и прописал данные сертификата через ACSP.
В списке личных, отображаются оба контейнера с сертификатами, вообщем все вроде бы хорошо.

Теперь пытаюсь получить данные контейнера в своем приложении.
Делаю как и многие вот так:

Код:

class SignController(private val clientAlias: String? = null,
                     private val clientPassword: String? = null) {

  fun requestSign(signable: ByteArray): ByteArray {
    val keyStore = KeyStore.getInstance(JCSP.HD_STORE_NAME, JCSP.PROVIDER_NAME).apply { load(null, null) }
    val privateKey = keyStore.getKey(clientAlias, clientPassword?.toCharArray()) as PrivateKey?
    val certificate = keyStore.getCertificate(clientAlias) as X509Certificate?
    if (privateKey == null || certificate == null) throw Error("Private key or/and certificate is null.")
    return Signature.getInstance(privateKey.algorithm, JCSP.PROVIDER_NAME).run {
      initSign(privateKey)
      update(signable)
      sign()
    }
  }
}


Как бы я не изощрялся keyStore.aliases() возвращается с пустым вектором.
Соответственно нет приватного ключа нет сертификата и обе переменные null.

В activity есть вызов

Код:
val initCode = CSPConfig.init(activity)


и вызов

Код:
fun initJavaProviders() {

    // Загрузка Java CSP (хеш, подпись, шифрование,
    // генерация контейнеров).

    if (Security.getProvider(JCSP.PROVIDER_NAME) == null) {
      Security.addProvider(JCSP())
    }

    // Инициализация XML DSig (хеш, подпись).
    XmlInit.init()

  }


В документации не смог найти причину, так же обнаружил в how_to_build.doc, информацию о intnet 'ах.

Подскажите пожалуйста следующее:
1) Как можно и нужно обращаться к KeyStore за контейнером из ACSP
2) Можно ли это сделать без intent 'ов из моего приложения в ACSP? Если да, как?

Отредактировано пользователем 17 апреля 2018 г. 16:00:47(UTC)  | Причина: Не указана

Offline Евгений Афанасьев  
#2 Оставлено : 17 апреля 2018 г. 16:56:15(UTC)
Евгений Афанасьев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 06.12.2008(UTC)
Сообщений: 3,910
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
Здравствуйте.
Автор: sibuty Перейти к цитате
1) Как можно и нужно обращаться к KeyStore за контейнером из ACSP
2) Можно ли это сделать без intent 'ов из моего приложения в ACSP? Если да, как?

1) Только с помощью интентов (доступ к файлам другого приложения ограничен).
2) Пока нет.

Offline sibuty  
#3 Оставлено : 17 апреля 2018 г. 16:58:55(UTC)
sibuty

Статус: Новичок

Группы: Участники
Зарегистрирован: 12.04.2018(UTC)
Сообщений: 5

Тогда такой вопрос, если у меня будет носитель, например RuToken, к нему я смогу обратиться заменив согласно доке

тут, вот этот параметр JCSP.HD_STORE_NAME
val keyStore = KeyStore.getInstance(JCSP.HD_STORE_NAME, JCSP.PROVIDER_NAME).apply { load(null, null) }?
Offline Евгений Афанасьев  
#4 Оставлено : 17 апреля 2018 г. 18:18:11(UTC)
Евгений Афанасьев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 06.12.2008(UTC)
Сообщений: 3,910
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
Да, сможете.
Offline sibuty  
#5 Оставлено : 17 апреля 2018 г. 19:00:08(UTC)
sibuty

Статус: Новичок

Группы: Участники
Зарегистрирован: 12.04.2018(UTC)
Сообщений: 5

Ага, спасибо, понял принял. :)

То есть выходит хранилище HD_STORE_NAME в рамках каждого app будет свое, а в случае носителя, RuToken к примеру, мне даже не нужно будет ставить ACSP?
Т.к. я смогу через SDK свободно получить данные?

И еще такой вопрос, копирование контейнера всегда происходит в HD_STORE_NAME ACSP, в случае общения по intent 'ам?
А если я хочу использовать SDK, мне нужно руками подключать сертификат к HD_STORE_NAME хранилищу в моем app?
Offline Евгений Афанасьев  
#6 Оставлено : 17 апреля 2018 г. 19:27:45(UTC)
Евгений Афанасьев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 06.12.2008(UTC)
Сообщений: 3,910
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
HDIMAGE - да, внутри каждого приложения. ACSP нужен, т.к. он содержит csp.
При вызове интентов используются контейнеры внутри acsp (скопированные туда или созданные там).
На счет Sdk не понял. Сертификат извлекается из контейнера.
Offline sibuty  
#7 Оставлено : 18 апреля 2018 г. 13:16:00(UTC)
sibuty

Статус: Новичок

Группы: Участники
Зарегистрирован: 12.04.2018(UTC)
Сообщений: 5

Добрый день.

Имел ввиду следующее, если я хочу работать с носителем RuToken, и если я буду использовать JCSP то мне будет необходимо приложение ACSP, но если я буду использовать JCP, я смогу получить доступ к контейнеру и к сертификату на носителе не имея на девайсе ACSP?

Отредактировано пользователем 18 апреля 2018 г. 13:41:28(UTC)  | Причина: Не указана

Offline Евгений Афанасьев  
#8 Оставлено : 18 апреля 2018 г. 14:40:22(UTC)
Евгений Афанасьев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 06.12.2008(UTC)
Сообщений: 3,910
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
Добрый день.
В любом случае необходим ACSP, т.к. это и есть провайдер. JCSP, условно, переадресует запросы (CSP). JCP - криптопровайдер на java, доступа к носителям не имеет.
Offline sibuty  
#9 Оставлено : 18 апреля 2018 г. 15:22:48(UTC)
sibuty

Статус: Новичок

Группы: Участники
Зарегистрирован: 12.04.2018(UTC)
Сообщений: 5

Ок, понял. Спасибо еще раз за пояснения. :)
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.