如何使用 PKCS11Interop 管理网络故障并避免错误

2024-04-21

在 Safenet HSM 上使用 PKCS11Interop 时,出现此错误

“方法 C_OpenSession 返回 2147484548”

在我的文档中,错误是 CKR_SMS_ERROR:“安全消息系统的一般错误 - 可能由 HSM 故障或网络故障引起".

这证实了缺乏连接时会发生的问题。

问题是当这种情况发生时当连接恢复时,该服务无法恢复通信,直到我手动重新启动管理 HSM 访问的服务.

当服务启动时,我这样称呼:

private Pkcs11 _pkcs11 = null;
private Slot _slot = null;
private Session _session = null;

public async void InitPkcs11()
{
    try
    {
        _pkcs11 = new Pkcs11(pathCryptoki, Inter_Settings.AppType);
        _slot = Inter_Helpers.GetUsableSlot(_pkcs11, nSlot);
        _session = _slot.OpenSession(SessionType.ReadOnly);
        _session.Login(CKU.CKU_USER, Inter_Settings.NormalUserPin);
    }
    catch (Exception e)
    {
        ...
    }
}

当我必须使用 HSM 时,我会这样调用:

using (var LocalSession = _slot.OpenSession(SessionType.ReadOnly))
{
    ...
}

而且,当我由于缺乏连接而导致通信失败时,我调用一个函数来重置连接并尝试更改插槽:

private bool switching = false;

public async void SwitchSlot()
{
    try
    {
        if (!switching)
        {
            switching = true;
            if (nSlot == 0)
            {
                nSlot = 2;
            }
            else
            {
                nSlot = 0;
            }
            _session.Logout();
            _slot.CloseAllSessions();
            _pkcs11.Dispose();
            InitPkcs11();
            switching = false;
        }
    }
    catch (Exception e)
    {
        ...
    }
}

但是,最后一个片段并没有按预期工作:它尝试更改插槽,但始终无法与 HSM 通信(网络故障后)。如果我手动重新启动服务(当连接恢复时),它会像魅力一样工作。所以,我确信我在做错事开关槽功能,当我尝试关闭_session并打开一个新的。

您在这里看到任何错误/误解吗?


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 PKCS11Interop 管理网络故障并避免错误 的相关文章

随机推荐