ocehb: (Default)
ocehb ([personal profile] ocehb) wrote2014-07-29 01:22 pm
Entry tags:

Проблема в CryptoPro CSP


КриптоПро CSP библиотека имеет особенность работы с контейнерами и
криптоконтекстами: если криптоконтейнер существует, и
CryptAcquireContext вызывается с флагом CRYPT_NEWKEYSET, то код
возврата false и GetLastError() возвращает 0x8009000f (NTE_EXISTS),
и, дополнительно, пишет в syslog


Jul 29 10:24:19 vbox cprdr[22554]: cpcsp:!carrier_shortcut!rdr_shortcut_get fail!
Jul 29 10:24:19 vbox cprdr[22554]: cpcsp:!CreateContainer!CreateContainer: key_carrier_open faild!!


что нервирует клиентов. Если же контейнер не существует, а
CryptAcquireContext вызывается без флага CRYPT_NEWKEYSET, то код
возврата тоже false, и GetLastError() 0x80090019 (NTE_KEYSET_NOT_DEF)
и текст в syslog


Jul 29 10:30:36 vbox cprdr[22626]: cpcsp:!read_keyset!code==RDR_ERR_FILE_NOT_FOUND fail!
Jul 29 10:30:36 vbox cprdr[22626]: cpcsp:!OpenContainer!OpenContainer key_carrier_open fail (0x80090019)!


Да, можно искать существующие контейнеры через CryptGetProvParam с
флагами CRYPT_FIRST/CRYPT_NEXT, и это работает с контейнерами, которые
сохранены на диске. Но не работает с контейнерами, которые только
созданы, но ещё не сохранены на диск. А сохраняются они на диск
только если на них созданы ключи.

Одно из решений -- перехватывать вызовы CryptAcquireContext и
CryptReleaseContext и использовать кеш криптоконтекстов и имён
криптоконтейнеров для разрешения конфликтов существования/отсутствия.

Post a comment in response:

This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

If you are unable to use this captcha for any reason, please contact us by email at support@dreamwidth.org