在 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并打开一个新的。
您在这里看到任何错误/误解吗?