为什么Cryptoki.C_OpenSession有时会与HSM断开连接

时间:2018-10-12 17:04:38

标签: java cryptography hsm softhsm cryptoki

我创建了一个Web服务isAlive,以检查是否可以使用Cryptoki与HSM软件创建会话,我使用SoapUI自动执行Web服务,因此我每隔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 个答案:

答案 0 :(得分:2)

通常,HSM的会话数是有限的。当前,您正在打开会话,但从未使用C_CloseSession关闭会话。您应该像对待资源一样处理会话,并且资源可能很少。

请注意,还有一个名为C_TokenInfo的函数可用于检查令牌状态。确保您正在使用正确的功能。您不需要时不需要使用密码。