Как управлять сетью и избежать ошибок с 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 и открыть новую.

Вы видите какие-либо ошибки / недоразумения здесь?

0 ответов

Другие вопросы по тегам