Как управлять сетью и избежать ошибок с PKCS11Interop
Используя PKCS11Interop на HSM Safenet, я получил эту ошибку
"Метод 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 (после отключения сети). Если я перезагружаю службу вручную (когда связь возвращается), она работает как чудо-кнопки. Итак, я уверен, что я делаю что-то не так в функции SwitchSlot, когда я пытаюсь закрыть _session и открыть новую.
Вы видите какие-либо ошибки / недоразумения здесь?