Ошибка при попытке установить сертификат в браузере с использованием JS - PullRequest
0 голосов
/ 15 октября 2019

В моем коде у меня есть кнопка, которая вызывает файл JS, который, в свою очередь, вызывает файл PHP с конечными точками API, которые мне нужны для генерации сертификата, и отправляет ответ, который я использую в сертификате * 1002. * переменная ниже.

Я сам генерирую CSR с помощью команды openssl.

Мой код для установки сертификата в браузере выглядит следующим образом ( сертификат - это то, где япередать сертификат в качестве ответа, который я получаю от API-интерфейсов Entrust) -

Я использую код этой страницы - https://blogs.msdn.microsoft.com/alejacma/2009/01/28/how-to-create-a-certificate-request-with-certenroll-javascript/ (2-й серый блок справа внизу - после примера Javascriptпоказывает, как установить ответ от CA )

function installCertificate(certificate) {
    try {
        var objEnroll = objCertEnrollClassFactory.CreateObject("X509Enrollment.CX509Enrollment");
        objEnroll.Initialize(1); // ContextUser

        objEnroll.InstallResponse(0, certificate, 6, "");

    } catch (ex) {
        swal('Error', 'Something went wrong installing Client Certificate', 'error');
        console.log("exception- " + ex.description);
    }
}

У меня ошибка (из блока catch) -

CertEnroll::CX509Enrollment::InstallResponse: Cannot find object or property. 0x80092004 (-2146885628 CRYPT_E_NOT_FOUND)

Я не уверен, чтоЭто означает, что не удается найти объект или свойство, поскольку оно не слишком многословно.

PS: если я сохраню ответ от API в виде файла .crt и открою его (простой двойной щелчок), значения сертификата будут выглядеть правильно вдольс цепочкой сертификатов.

1 Ответ

0 голосов
/ 17 октября 2019

После долгих тралений я наконец заработал. Для всех, кто интересуется, вот мое решение -

Часть кода, которая генерирует CSR, является первым серым блоком на этой странице - https://blogs.msdn.microsoft.com/alejacma/2009/01/28/how-to-create-a-certificate-request-with-certenroll-javascript.

CSR, с которым он возвращается, имеет ----- НАЧАТЬ НОВЫЙ ЗАПРОС СЕРТИФИКАТА ----- вверху и ----- КОНЕЦ НОВОГО ЗАПРОСА СЕРТИФИКАТА ----- внизу, и разрывы строк после каждой строки.

Я удалил верхнюю строку и все разрывы строк, используя preg_replace, как показано ниже, и, поскольку на данный момент CSR не имеет переноса строки и является простой строкойЯ использовал str_replace для удаления последней его части.

$csr = preg_replace('/^.+\n/', '', $csr);  
$csr = str_replace("-----END NEW CERTIFICATE REQUEST-----","", $csr);

TLDR - Удалили верхнюю и нижнюю строки из CSR и все разрывы строк, которые были там. Я думаю, что это было связано с тем, как был отформатирован CSR.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...