Почему Cryptoki.C_OpenSession иногда отключается от HSM

Я создал веб-сервис isAlive, чтобы проверить, могу ли я создать сеанс с программным обеспечением HSM с помощью Cryptoki, я автоматизировал выполнение моего веб-сервиса с помощью SoapUI, поэтому я выполняю свой сервис в цикле каждые 40 с, он работает хорошо, но после некоторого числа вызова я не могу подключиться к своему HSM, пока я не перезапущу свое приложение: это часть кода, которую я использовал для подключения к HSM

// create session handle 
        CK_SESSION_HANDLE session= new CK_SESSION_HANDLE();

        // return code
        CK_RV retcode;

        // get session
        retcode=Cryptoki.C_OpenSession(safeNetSlot, CKF.RW_SESSION, null, null, session);
        checkRetCode(retcode, "Could not open session on HSM");

        log.debug("Session [{}]",session.longValue());

        // do login 
        final String recovHsmPassword = PasswordManagement.recoverPassword(hsmPassword);
        retcode=Cryptoki.C_Login(session, CKU.USER, recovHsmPassword.getBytes(), recovHsmPassword.length());
        checkRetCode(retcode, "Could not login as user");

Во время выполнения моего сервиса я смотрю логи и смотрю, что session.longValue() увеличивается с каждым вызовом:

Это логи:

    INFO 5056 --- [nio-8191-exec-5] ccom.test.app.V1Controler  : Request for isAlive API
    DEBUG 5056 --- [nio-8191-exec-5] com.test.app.hsm.HsmService  : Session [1]
    INFO 5056 --- [nio-8191-exec-5] com.test.app.V1Controler  : Request for isAlive API
    DEBUG 5056 --- [nio-8191-exec-5] com.test.app.hsm.HsmService  : Session [2]
    INFO 5056 --- [nio-8191-exec-5] com.test.app.V1Controler  : Request for isAlive API
    DEBUG 5056 --- [nio-8191-exec-5] com.test.app.hsm.HsmService  : Session [3]
    INFO 5056 --- [nio-8191-exec-5] com.test.app.V1Controler  : Request for isAlive API
                                                     ......
    INFO 5056 --- [nio-8191-exec-5] com.test.app.V1Controler  : Request for isAlive API     
    DEBUG 5056 --- [nio-8191-exec-5] com.test.app.hsm.HsmService  : Session [1176]
INFO 5056 --- [nio-8191-exec-5] com.test.app.V1Controler  : Request for isAlive API
2018-08-14 10:39:06.550 ERROR 1 --- [nio-8443-exec-3] com.test.app.hsm.HsmService  : HSM return error [MSG_ERROR general error] 

Я спрашиваю, есть ли у кого-то идея, как работает Cryptoki.C_OpenSession и почему я отключаюсь от моего HSM

1 ответ

Обычно HSM имеют ограниченное количество доступных сеансов. В настоящее время вы открываете сессии, но никогда не закрываете их C_CloseSession, Вы должны обрабатывать сеансы, как если бы они были ресурсами, а ресурсы могут быть редкими.

Обратите внимание, что есть также функция под названием C_TokenInfo это можно использовать для проверки статуса токена. Убедитесь, что вы используете правильную функцию для работы. Вы не хотите использовать пароль, когда не требуется.

Другие вопросы по тегам