在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 并打开一个新的时,我确定我在 SwitchSlot功能中做错了。
你在这里看到任何错误/错误吗?