Ошибка создания контекста сертификата получателя 0x8009310b


Offline

e217onr

 


#1
Оставлено
:

17 августа 2018 г. 10:17:16(UTC)

e217onr

Статус: Участник

Группы: Участники

Зарегистрирован: 17.08.2018(UTC)
Сообщений: 12

Пытаюсь реализовать функционал проверки подписи. В консоли постоянно возникает ошибка:
Uncaught (in promise)
message: «Встречено неверное значение тега ASN1. (0x8009310B)»
requestid: 33
type: «error»
Просмотрел уже множество тем на эту тему в интернете но так и не нашёл внятного ответа в чём может быть проблема. Что это вообще за ошибка и что она означает? В какую сторону копать?


Вверх

Offline

Андрей Писарев

 


#2
Оставлено
:

17 августа 2018 г. 10:59:03(UTC)

Андрей *

Статус: Сотрудник

Группы: Участники

Зарегистрирован: 26.07.2011(UTC)
Сообщений: 11,740
Мужчина
Российская Федерация

Сказал «Спасибо»: 451 раз
Поблагодарили: 1838 раз в 1421 постах

Здравствуйте.

Можете приложить или прислать в ЛС файл подписи и документ, который подписывали?

Ошибка возникает только с этим файлом?
Пробовали подписывать через тестовую страницу и проверять результат через свой код (а также код, который доступен в примерах к руководству)?

Техническую поддержку оказываем тут
Наша база знаний


Вверх

WWW


Offline

e217onr

 


#3
Оставлено
:

17 августа 2018 г. 13:22:59(UTC)

e217onr

Статус: Участник

Группы: Участники

Зарегистрирован: 17.08.2018(UTC)
Сообщений: 12

Автор: Андрей Писарев Перейти к цитате

Здравствуйте.

Можете приложить или прислать в ЛС файл подписи и документ, который подписывали?

Ошибка возникает только с этим файлом?
Пробовали подписывать через тестовую страницу и проверять результат через свой код (а также код, который доступен в примерах к руководству)?

Ошибка возникает со всеми файлами, поэтому не думаю что прикрепление файлов даст результат.
Через тестовую страницу всё работает прекрасно. Думаю проблема в моём JS-коде. Пробовал использовать код с тестовой страницы и всячески его изменять, но итог всегда один — Ошибка 0x8009310B. Так же время от времени при изменении кода JS меняется число в параметре requestid ошибки.


Вверх

Offline

Андрей Писарев

 


#4
Оставлено
:

17 августа 2018 г. 14:12:15(UTC)

Андрей *

Статус: Сотрудник

Группы: Участники

Зарегистрирован: 26.07.2011(UTC)
Сообщений: 11,740
Мужчина
Российская Федерация

Сказал «Спасибо»: 451 раз
Поблагодарили: 1838 раз в 1421 постах

По примерам из документации делаете примеры?

Техническую поддержку оказываем тут
Наша база знаний


Вверх

WWW


Offline

Андрей Писарев

 


#5
Оставлено
:

17 августа 2018 г. 14:13:43(UTC)

Андрей *

Статус: Сотрудник

Группы: Участники

Зарегистрирован: 26.07.2011(UTC)
Сообщений: 11,740
Мужчина
Российская Федерация

Сказал «Спасибо»: 451 раз
Поблагодарили: 1838 раз в 1421 постах

Пробовали подписать и проверить результат сразу?
Что передаете при проверке — проверяли (какие данные указанызакодированы в base64, опции)?

Техническую поддержку оказываем тут
Наша база знаний


Вверх

WWW


Offline

e217onr

 


#6
Оставлено
:

20 августа 2018 г. 9:16:42(UTC)

e217onr

Статус: Участник

Группы: Участники

Зарегистрирован: 17.08.2018(UTC)
Сообщений: 12

Автор: Андрей Писарев Перейти к цитате

По примерам из документации делаете примеры?

Примеры из документации не работают, т.к. там представлен код для синхронных запросов, а у меня используются асинхронные. При попытке использовать код из документации, получаю разные ошибки типа «CreateObject is not a function» и тд.

Автор: Андрей Писарев Перейти к цитате

Пробовали подписать и проверить результат сразу?
Что передаете при проверке — проверяли (какие данные указанызакодированы в base64, опции)?

Только что попробовал проверить подпись сразу после создания, получаю ту же ошибку, но с requestId = 44.
Вот мой код функции для проверки подписи:

Код:

function Verify(sSignedMessage, dataToVerify) {
    var oSignedData = cadesplugin.CreateObjectAsync("CAdESCOM.CadesSignedData");
    try {
        oSignedData.ContentEncoding = CADESCOM_BASE64_TO_BINARY;
        oSignedData.Content = dataToVerify;
        oSignedData.then(function(data) {
            data.VerifyCades(sSignedMessage, CADESCOM_CADES_BES, true);
        });
    } catch (err) {
        alert("Не удалось проверить подпись. Ошибка: " + cadesplugin.getLastError(err));
        return false;
    }

    return true;
}

где sSignedMessage — контент кодируемого документа в формате base64, а dataToVerify — готовая подпись этого контента.
Что я делаю не так?


Вверх

Offline

Андрей Писарев

 


#7
Оставлено
:

20 августа 2018 г. 13:55:11(UTC)

Андрей *

Статус: Сотрудник

Группы: Участники

Зарегистрирован: 26.07.2011(UTC)
Сообщений: 11,740
Мужчина
Российская Федерация

Сказал «Спасибо»: 451 раз
Поблагодарили: 1838 раз в 1421 постах

Цитата из примера:

Цитата:

Приведенный пример использует синхронную версию плагина. Также см. пример работы с асинхронными обьектами.

Создание подписи CADES_BES с использованием асинхронной версии

Техническую поддержку оказываем тут
Наша база знаний


Вверх

WWW


Offline

Андрей Писарев

 


#8
Оставлено
:

20 августа 2018 г. 13:59:06(UTC)

Андрей *

Статус: Сотрудник

Группы: Участники

Зарегистрирован: 26.07.2011(UTC)
Сообщений: 11,740
Мужчина
Российская Федерация

Сказал «Спасибо»: 451 раз
Поблагодарили: 1838 раз в 1421 постах

Также можно посмотреть работу на демо-странице и посмотреть функции из js-файлов.

Code.js

cadesplugin_api.js

Техническую поддержку оказываем тут
Наша база знаний


Вверх

WWW


Offline

e217onr

 


#9
Оставлено
:

20 августа 2018 г. 14:08:34(UTC)

e217onr

Статус: Участник

Группы: Участники

Зарегистрирован: 17.08.2018(UTC)
Сообщений: 12

Автор: Андрей Писарев Перейти к цитате

Цитата из примера:

Цитата:

Приведенный пример использует синхронную версию плагина. Также см. пример работы с асинхронными обьектами.

Создание подписи CADES_BES с использованием асинхронной версии

Здесь пример создания подписи. Создание у меня работает. Нужна проверка.


Вверх

Offline

e217onr

 


#10
Оставлено
:

20 августа 2018 г. 14:14:03(UTC)

e217onr

Статус: Участник

Группы: Участники

Зарегистрирован: 17.08.2018(UTC)
Сообщений: 12

Автор: Андрей Писарев Перейти к цитате

Также можно посмотреть работу на демо-странице и посмотреть функции из js-файлов.

Code.js

cadesplugin_api.js

Собственно так и работает моя подпись файлов. Я взял эти 2 файла js-скриптов, закинул их в свой проект и настроил работу подписи исходя из этих файлов. Подпись работает великолепно, не работает именно ПРОВЕРКА подписи. Насчёт проверки очень мало написано в документации. Насчёт проверки асинхронными методами — вообще ни слова. Как мне в итоге проверить мою подпись?


Вверх
Пользователи, просматривающие эту тему

Guest

Быстрый переход
 

Вы не можете создавать новые темы в этом форуме.

Вы не можете отвечать в этом форуме.

Вы не можете удалять Ваши сообщения в этом форуме.

Вы не можете редактировать Ваши сообщения в этом форуме.

Вы не можете создавать опросы в этом форуме.

Вы не можете голосовать в этом форуме.

Обновлено 2023 января: перестаньте получать сообщения об ошибках и замедлите работу вашей системы с помощью нашего инструмента оптимизации. Получить сейчас в эту ссылку

  1. Скачайте и установите инструмент для ремонта здесь.
  2. Пусть он просканирует ваш компьютер.
  3. Затем инструмент почини свой компьютер.

Ошибка Windows 0x8009310B вызвана неподходящим закрытым ключом. Если закрытый ключ все еще находится на сервере, возможно установить сертификат и восстановить закрытый ключ. Следующее решение может исправить ошибку; если это не работает, сертификат должен быть заменен.

Восстановление поврежденного сертификата

Откройте командную строку DOS (cmd.exe).

Введите: certutil -repairstore мое «ЗНАЧЕНИЕ ПЕЧАТИ ИЛИ СЕРИЙНЫЙ НОМЕР».

Примечание. Если вы не уверены, что можете найти THUMBPRINT или СЕРИЮ, следуйте этим инструкциям. Кроме того, сертификат иногда недоступен и должен быть импортирован, чтобы эта команда работала. Если вы получили сообщение об ошибке, убедитесь, что используемая вами СЕРИЯ и / или ТЕМАТИЧЕСКАЯ ПЕЧАТЬ являются ТОЧНЫМИ, указанными в вашем сертификате, поскольку Windows иногда вставляет один или несколько вопросительных знаков, что приводит к ошибке.

Вернитесь в диспетчер IIS и снова измените ярлыки для этого сайта. (Где вы можете выбрать сертификат)

Примечание. Иногда вы получаете сообщение об ошибке, поэтому просто проигнорируйте ошибку и попробуйте снова. При повторной попытке может оказаться, что сертификат уже выбран, и больше ничего не нужно делать. Если вы не видите сертификат в списке, вам может потребоваться дать ему понятное имя в MMC, изменив его свойства.

Обновление за январь 2023 года:

Теперь вы можете предотвратить проблемы с ПК с помощью этого инструмента, например, защитить вас от потери файлов и вредоносных программ. Кроме того, это отличный способ оптимизировать ваш компьютер для достижения максимальной производительности. Программа с легкостью исправляет типичные ошибки, которые могут возникнуть в системах Windows — нет необходимости часами искать и устранять неполадки, если у вас под рукой есть идеальное решение:

  • Шаг 1: Скачать PC Repair & Optimizer Tool (Windows 10, 8, 7, XP, Vista — Microsoft Gold Certified).
  • Шаг 2: Нажмите «Начать сканирование”, Чтобы найти проблемы реестра Windows, которые могут вызывать проблемы с ПК.
  • Шаг 3: Нажмите «Починить все», Чтобы исправить все проблемы.

скачать

Сканирование папки

1. нажмите на Пуск. выберите Run.
2. введите SIGVERIF в открытое поле.
3. нажмите на ОК
4. Нажмите кнопку «Дополнительно» и выберите «Искать другие файлы без цифровой подписи».
5. Нажмите кнопку «Обзор» в поле «Искать в этой папке» и укажите папку C: WINDOWS SYSTEM32 CATROOT.
6. Установите флажок «Включить подпапки».
7. нажмите ОК, затем на Пуск.
8. После завершения сканирования появится окно со списком неподписанных файлов.

Импорт сертификата в хранилище сертификатов компьютера

  • Создание оснастки сертификата в консоли MMC от KB Solution SO1849
  • На левой панели разверните папку «Сертификаты», разверните ее и выберите личную папку.
  • Щелкните правой кнопкой мыши папку «Сертификаты» в личной папке, выберите «Все задачи», выберите «Импорт».
  • Откроется Мастер импорта сертификатов. Нажмите на Далее
  • Щелкните Обзор, затем перейдите к файлу, содержащему сертификат SSL. Нажмите «Открыть»> «Далее».
  • Убедитесь, что выбрано «Поместить все сертификаты в следующий список», убедитесь, что в списке сертификатов указано «Личные», нажмите «Далее»> «Готово».

https://stackoverflow.com/questions/26011760/cryptdecodeobjectex-bad-tag-error-0x8009310b

Совет экспертов: Этот инструмент восстановления сканирует репозитории и заменяет поврежденные или отсутствующие файлы, если ни один из этих методов не сработал. Это хорошо работает в большинстве случаев, когда проблема связана с повреждением системы. Этот инструмент также оптимизирует вашу систему, чтобы максимизировать производительность. Его можно скачать по Щелчок Здесь

ed_moyes

CCNA, веб-разработчик, ПК для устранения неполадок

Я компьютерный энтузиаст и практикующий ИТ-специалист. У меня за плечами многолетний опыт работы в области компьютерного программирования, устранения неисправностей и ремонта оборудования. Я специализируюсь на веб-разработке и дизайне баз данных. У меня также есть сертификат CCNA для проектирования сетей и устранения неполадок.

Сообщение Просмотров: 108

  • Remove From My Forums
  • Question

  • Hi All,

    I have recieved CSR request from App team but i am getting below error While creating Certificate in root CA.

    Certificate Request Denied

    Your certificate request was denied.

    Your Request Id is 0. The disposition message is

    «Error Parsing Request ASN1 bad tag value met. 0x8009310b (ASN: 267)».

    Contact your administrator for further information.

Answers

  • Thanks Elke . Issue fixed . Application team send one more updated CSR and now i am able to create certificate .

    • Marked as answer by

      Tuesday, July 29, 2014 3:01 AM

  • Remove From My Forums
  • Question

  • Hi All,

    I have recieved CSR request from App team but i am getting below error While creating Certificate in root CA.

    Certificate Request Denied

    Your certificate request was denied.

    Your Request Id is 0. The disposition message is

    «Error Parsing Request ASN1 bad tag value met. 0x8009310b (ASN: 267)».

    Contact your administrator for further information.

Answers

  • Thanks Elke . Issue fixed . Application team send one more updated CSR and now i am able to create certificate .

    • Marked as answer by

      Tuesday, July 29, 2014 3:01 AM

  • Remove From My Forums
  • Question

  • Hi All,

    I have recieved CSR request from App team but i am getting below error While creating Certificate in root CA.

    Certificate Request Denied

    Your certificate request was denied.

    Your Request Id is 0. The disposition message is

    «Error Parsing Request ASN1 bad tag value met. 0x8009310b (ASN: 267)».

    Contact your administrator for further information.

Answers

  • Thanks Elke . Issue fixed . Application team send one more updated CSR and now i am able to create certificate .

    • Marked as answer by

      Tuesday, July 29, 2014 3:01 AM


Offline

e217onr

 


#1
Оставлено
:

17 августа 2018 г. 10:17:16(UTC)

e217onr

Статус: Участник

Группы: Участники

Зарегистрирован: 17.08.2018(UTC)
Сообщений: 12

Пытаюсь реализовать функционал проверки подписи. В консоли постоянно возникает ошибка:
Uncaught (in promise)
message: «Встречено неверное значение тега ASN1. (0x8009310B)»
requestid: 33
type: «error»
Просмотрел уже множество тем на эту тему в интернете но так и не нашёл внятного ответа в чём может быть проблема. Что это вообще за ошибка и что она означает? В какую сторону копать?


Вверх


Online

Андрей Писарев

 


#2
Оставлено
:

17 августа 2018 г. 10:59:03(UTC)

Андрей *

Статус: Сотрудник

Группы: Участники

Зарегистрирован: 26.07.2011(UTC)
Сообщений: 11,987
Мужчина
Российская Федерация

Сказал «Спасибо»: 457 раз
Поблагодарили: 1905 раз в 1474 постах

Здравствуйте.

Можете приложить или прислать в ЛС файл подписи и документ, который подписывали?

Ошибка возникает только с этим файлом?
Пробовали подписывать через тестовую страницу и проверять результат через свой код (а также код, который доступен в примерах к руководству)?

Техническую поддержку оказываем тут
Наша база знаний


Вверх

WWW


Offline

e217onr

 


#3
Оставлено
:

17 августа 2018 г. 13:22:59(UTC)

e217onr

Статус: Участник

Группы: Участники

Зарегистрирован: 17.08.2018(UTC)
Сообщений: 12

Автор: Андрей Писарев Перейти к цитате

Здравствуйте.

Можете приложить или прислать в ЛС файл подписи и документ, который подписывали?

Ошибка возникает только с этим файлом?
Пробовали подписывать через тестовую страницу и проверять результат через свой код (а также код, который доступен в примерах к руководству)?

Ошибка возникает со всеми файлами, поэтому не думаю что прикрепление файлов даст результат.
Через тестовую страницу всё работает прекрасно. Думаю проблема в моём JS-коде. Пробовал использовать код с тестовой страницы и всячески его изменять, но итог всегда один — Ошибка 0x8009310B. Так же время от времени при изменении кода JS меняется число в параметре requestid ошибки.


Вверх


Online

Андрей Писарев

 


#4
Оставлено
:

17 августа 2018 г. 14:12:15(UTC)

Андрей *

Статус: Сотрудник

Группы: Участники

Зарегистрирован: 26.07.2011(UTC)
Сообщений: 11,987
Мужчина
Российская Федерация

Сказал «Спасибо»: 457 раз
Поблагодарили: 1905 раз в 1474 постах

По примерам из документации делаете примеры?

Техническую поддержку оказываем тут
Наша база знаний


Вверх

WWW


Online

Андрей Писарев

 


#5
Оставлено
:

17 августа 2018 г. 14:13:43(UTC)

Андрей *

Статус: Сотрудник

Группы: Участники

Зарегистрирован: 26.07.2011(UTC)
Сообщений: 11,987
Мужчина
Российская Федерация

Сказал «Спасибо»: 457 раз
Поблагодарили: 1905 раз в 1474 постах

Пробовали подписать и проверить результат сразу?
Что передаете при проверке — проверяли (какие данные указанызакодированы в base64, опции)?

Техническую поддержку оказываем тут
Наша база знаний


Вверх

WWW


Offline

e217onr

 


#6
Оставлено
:

20 августа 2018 г. 9:16:42(UTC)

e217onr

Статус: Участник

Группы: Участники

Зарегистрирован: 17.08.2018(UTC)
Сообщений: 12

Автор: Андрей Писарев Перейти к цитате

По примерам из документации делаете примеры?

Примеры из документации не работают, т.к. там представлен код для синхронных запросов, а у меня используются асинхронные. При попытке использовать код из документации, получаю разные ошибки типа «CreateObject is not a function» и тд.

Автор: Андрей Писарев Перейти к цитате

Пробовали подписать и проверить результат сразу?
Что передаете при проверке — проверяли (какие данные указанызакодированы в base64, опции)?

Только что попробовал проверить подпись сразу после создания, получаю ту же ошибку, но с requestId = 44.
Вот мой код функции для проверки подписи:

Код:

function Verify(sSignedMessage, dataToVerify) {
    var oSignedData = cadesplugin.CreateObjectAsync("CAdESCOM.CadesSignedData");
    try {
        oSignedData.ContentEncoding = CADESCOM_BASE64_TO_BINARY;
        oSignedData.Content = dataToVerify;
        oSignedData.then(function(data) {
            data.VerifyCades(sSignedMessage, CADESCOM_CADES_BES, true);
        });
    } catch (err) {
        alert("Не удалось проверить подпись. Ошибка: " + cadesplugin.getLastError(err));
        return false;
    }

    return true;
}

где sSignedMessage — контент кодируемого документа в формате base64, а dataToVerify — готовая подпись этого контента.
Что я делаю не так?


Вверх


Online

Андрей Писарев

 


#7
Оставлено
:

20 августа 2018 г. 13:55:11(UTC)

Андрей *

Статус: Сотрудник

Группы: Участники

Зарегистрирован: 26.07.2011(UTC)
Сообщений: 11,987
Мужчина
Российская Федерация

Сказал «Спасибо»: 457 раз
Поблагодарили: 1905 раз в 1474 постах

Цитата из примера:

Цитата:

Приведенный пример использует синхронную версию плагина. Также см. пример работы с асинхронными обьектами.

Создание подписи CADES_BES с использованием асинхронной версии

Техническую поддержку оказываем тут
Наша база знаний


Вверх

WWW


Online

Андрей Писарев

 


#8
Оставлено
:

20 августа 2018 г. 13:59:06(UTC)

Андрей *

Статус: Сотрудник

Группы: Участники

Зарегистрирован: 26.07.2011(UTC)
Сообщений: 11,987
Мужчина
Российская Федерация

Сказал «Спасибо»: 457 раз
Поблагодарили: 1905 раз в 1474 постах

Также можно посмотреть работу на демо-странице и посмотреть функции из js-файлов.

Code.js

cadesplugin_api.js

Техническую поддержку оказываем тут
Наша база знаний


Вверх

WWW


Offline

e217onr

 


#9
Оставлено
:

20 августа 2018 г. 14:08:34(UTC)

e217onr

Статус: Участник

Группы: Участники

Зарегистрирован: 17.08.2018(UTC)
Сообщений: 12

Автор: Андрей Писарев Перейти к цитате

Цитата из примера:

Цитата:

Приведенный пример использует синхронную версию плагина. Также см. пример работы с асинхронными обьектами.

Создание подписи CADES_BES с использованием асинхронной версии

Здесь пример создания подписи. Создание у меня работает. Нужна проверка.


Вверх


Offline

e217onr

 


#10
Оставлено
:

20 августа 2018 г. 14:14:03(UTC)

e217onr

Статус: Участник

Группы: Участники

Зарегистрирован: 17.08.2018(UTC)
Сообщений: 12

Автор: Андрей Писарев Перейти к цитате

Также можно посмотреть работу на демо-странице и посмотреть функции из js-файлов.

Code.js

cadesplugin_api.js

Собственно так и работает моя подпись файлов. Я взял эти 2 файла js-скриптов, закинул их в свой проект и настроил работу подписи исходя из этих файлов. Подпись работает великолепно, не работает именно ПРОВЕРКА подписи. Насчёт проверки очень мало написано в документации. Насчёт проверки асинхронными методами — вообще ни слова. Как мне в итоге проверить мою подпись?


Вверх

Пользователи, просматривающие эту тему

Guest

Быстрый переход
 

Вы не можете создавать новые темы в этом форуме.

Вы не можете отвечать в этом форуме.

Вы не можете удалять Ваши сообщения в этом форуме.

Вы не можете редактировать Ваши сообщения в этом форуме.

Вы не можете создавать опросы в этом форуме.

Вы не можете голосовать в этом форуме.

What am I doing wrong here? I keep getting error 0x8009310b (ASN1 bad tag value met) when creating a certificate context. I know the certificate I’m testing with is good. I exported it from the intermediate store using DER, Base-64 and P7B formats. All three scenarios fail.

int _tmain(int argc, _TCHAR* argv[])
{
    const int       MAX_CERT_FILE_SIZE=81920;
    HANDLE          certFileHandle;
    DWORD           certEncodedRead = 0L;
    BYTE            certData[MAX_CERT_FILE_SIZE] = {0};
    PCCERT_CONTEXT  pCertContext = NULL;
    HCERTSTORE      hSystemStore = NULL;
    int             exitCode = 0;

    fprintf(stdout, "Importing X509 certificate file to root store: %s nn", argv[0]);

    try {

        // Create a handle to the certificate given in the command line argument
        BeginTask("Creating certificate handle...");
        certFileHandle = CreateFile(argv[0],
            GENERIC_READ,
            0,
            NULL,
            OPEN_EXISTING,
            FILE_ATTRIBUTE_NORMAL,
            NULL);

        if (INVALID_HANDLE_VALUE == certFileHandle){
            throw "Could not create a handle to the specified certificate file.";
        } 

        // Read the certificate file
        NextTask("Reading certificate file into buffer...");
        memset(certData, 0, MAX_CERT_FILE_SIZE);
        BOOL result = ReadFile(certFileHandle,
                certData,
                MAX_CERT_FILE_SIZE,
                &certEncodedRead,
                NULL);
        fprintf(stdout, "Read %d bytes from certificate file...", certEncodedRead);

        if (!result) {
            throw "Could not read the certificate file.";
        } 

        // Create a certificate context from the buffer
        NextTask("Creating certificate context...");
        pCertContext = CertCreateCertificateContext(X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, certData, certEncodedRead);

        if (!pCertContext){
            throw "Could not create a certificate context.";    
        }

        // Open the system certificate store
        NextTask("Opening local machine certificate store...");
        hSystemStore = CertOpenSystemStore(NULL, L"CA"); 
        if (!hSystemStore){
            throw "Could not open the local machine certificate store.";        
        }

        // Add certificate context to store
        NextTask("Adding certificate context to store...");     
        //CertAddCertificateContextToStore(hSystemStore, 
        //  pCertContext, 
        //  CERT_STORE_ADD_REPLACE_EXISTING, 
        //  NULL);

    } catch (ERRMSG msg) {
        Result(false);
        HandleError(msg);
        exitCode = 1;
    } 

    // Clean-up all resources
    if (hSystemStore) {
        NextTask("Closing certificate store...");
        Result(CertCloseStore(hSystemStore, 0));
    }
    if (pCertContext) {
        NextTask("Freeing certificate store...");
        Result(CertFreeCertificateContext(pCertContext));
    }
    if (certFileHandle) {
        NextTask("Closing certificate file...");
        Result(CloseHandle(certFileHandle));
    }

    fprintf(stdout, "nnProgram complete-exiting with code %x", exitCode);
    return exitCode;
}

[Edited to add console output]

Importing X509 certificate file to root store: DOD-CA-12.cer

Creating certificate handle...Success.
Reading certificate file into buffer...Read 41472 bytes from certificate file...Success.
Creating certificate context...Failed.
An error occurred while importing the X509 certificate.
Narrative: Could not create a certificate context.
GetLastError reported: 8009310b.
Success.
Closing certificate file...Success.


Program complete-exiting with code 1

I realize this is a very similar post to others (e.g. this one), but there are details missing from the posts which might be significant for my case.

To start with, here’s my simplified program:

#include "stdafx.h"
#include <windows.h>
#include <wincrypt.h>

int _tmain(int argc, _TCHAR* argv[])
{
    // usage: CertExtract certpath

    char keyFile[] = "C:\Certificates\public.crt";
    BYTE lp[65536];

    SECURITY_ATTRIBUTES sa;
    HANDLE hKeyFile;
    DWORD bytes;

    PCCERT_CONTEXT  certContext;

    sa.nLength = sizeof(sa);
    sa.lpSecurityDescriptor = NULL;
    sa.bInheritHandle = FALSE;

    hKeyFile = CreateFile(keyFile, GENERIC_READ, FILE_SHARE_READ, &sa, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

    if (hKeyFile) {

        if (ReadFile(hKeyFile, lp, GetFileSize(hKeyFile, NULL), &bytes, NULL) && bytes > 0) {

            certContext = CertCreateCertificateContext(X509_ASN_ENCODING, lp, bytes);

            if (certContext) {

                printf("yay!");

                CertFreeCertificateContext(certContext);
            }
            else {
                printf("Could not convert certificate to internal formn");
            }
        }
        else {
            printf("Failed to read key file: %sn", keyFile);
        }
    }
    else {
        printf("Failed to open key file: %sn", keyFile);
    }

    CloseHandle(hKeyFile);


    return 0;
}

In order to create the certificate, I used the following steps with OpenSSL:

C:Certificates>openssl genrsa -out private.key 1024
Loading 'screen' into random state - done
Generating RSA private key, 1024 bit long modulus
......................................++++++
................++++++
e is 65537 (0x10001)

C:Certificates>openssl req -new -key private.key -out public.csr
Loading 'screen' into random state - done

C:Certificates>copy private.key private.key.org
        1 file(s) copied.

C:Certificates>openssl rsa -in private.key.org -out private.key
writing RSA key

C:Certificates>openssl x509 -req -days 365 -in public.csr -signkey private.key -ou
t public.crt
Loading 'screen' into random state - done
Signature ok
subject=/CN=My Signing Cert
Getting Private key

with the following conf file:

RANDFILE        = .rnd

[ req ]
distinguished_name     = req_distinguished_name
prompt                 = no

[ req_distinguished_name ]
commonName             = My Signing Cert

The certificate file looks like:

-----BEGIN CERTIFICATE-----
MIIBqzCCARQCCQDUJyWk0OxlRTANBgkqhkiG9w0BAQUFADAaMRgwFgYDVQQDDA9N
eSBTaWduaW5nIENlcnQwHhcNMTYwMTA1MjIzODU5WhcNMTcwMTA0MjIzODU5WjAa
MRgwFgYDVQQDDA9NeSBTaWduaW5nIENlcnQwgZ8wDQYJKoZIhvcNAQEBBQADgY0A
MIGJAoGBAJobIhfSSMLEPeG9SOBelWHo4hjKXe8dT6cllPr6QXdXe2VNLh9fxVlx
spVGFQwjlF3OHYnmSQnY3m2b5wlFNYVuHvy8rUsZWOF4drSbiqWKh0TuJ+4MBeGq
EormTJ+kiGqNm5IVRrTu9OV8f0XQTGV1pxHircQxsGhxY5w0QTjjAgMBAAEwDQYJ
KoZIhvcNAQEFBQADgYEAedqjKfMyIFC8nUbJ6t/Y8D+fJFwCcdwojUFizr78FEwA
IZSas1b1bXSkA+QEooW7pYdBAfzNuD3WfZAIZpqFlr4rPNIqHzYa0OIdDPwzQQLa
3zPKqjj6QeTWEi5/ArzO+sTVv4m3Og3GQjMChb8H/GxsWdbComPVP82DTUet+ZU=
-----END CERTIFICATE-----

Converting the PEM-encoding to hex allows me to identify the parts of the certificate:

30 SEQUENCE             //Certificate
(82 01 AB) 

   30 SEQUENCE          //tbsCertificate
   (82   01   14) 
   
      02 INTEGER        //serialNumber  
      (09)  
         00   D4   27   25   A4   D0   EC   65   45 
   
      30 SEQUENCE       //signature
      (0D) 
      
         06 OBJECT IDENTIFIER
         (09)  
         2A   86   48   86   F7   0D   01   01   05
      
         05 NULL 
         (00)
      
      30 SEQUENCE       //issuer
      (1A) 
      
         31 SET
         (18) 

            30 SEQUENCE
            (16) 

               06 OBJECT IDENTIFIER
               (03)  
               55   04   03

               0C UTF8String
               (0F)  
                  4D  79   20   53   69   67   6E   69   6E   67   20   43   65   72   74

      30 SEQUENCE       //validity
      (1E) 
         17 UTCTime
         (0D)  
            31   36   30   31   30   35   32   32   33   38   35   39   5A

         17 UTCTime
         (0D)  
            31   37   30   31   30   34   32   32   33   38   35   39   5A
            
      30 SEQUENCE       //subjectName
      (1A) 

         31 SET
         (18) 
         
            30 SEQUENCE
            (16) 
               06 OBJECT IDENTIFIER
               (03)  
                  55   04   03
               
               0C UTF8String
               (0F)  
                  4D   79   20   53   69  67   6E   69   6E   67   20   43   65   72   74
      
      30 SEQUENCE       //subjectPublicKeyInfo
      (81   9F) 
         30 SEQUENCE    //algorithmId
         (0D) 
            06 OBJECT IDENTIFIER    //algorithm
            (09)  
               2A   86   48   86   F7   0D   01   01   01
            
            05 NULL
            (00)
            
         03 BIT STRING   //subjectPublicKey
         (81   8D)  
            [00] //padding bits
            30 SEQUENCE  //RSAPublicKey
            (81   89)   
               
               02 INTEGER  //modulus
               (81   81)   
                  00   9A   1B   22   17   D2   48   C2   C4   3D  E1   BD   48   E0   5E   95   61   E8   E2   18   CA   5D   EF   1D   4F   A7  25   94   FA   FA   41   77   57   7B   65   4D   2E   1F   5F   C5   59   71  B2   95   46   15   0C   23   94   5D   CE   1D   89   E6   49   09   D8   DE  6D   9B   E7   09   45   35   85   6E   1E   FC   BC   AD   4B   19   58   E1  78   76   B4   9B   8A   A5   8A   87   44   EE   27   EE   0C   05   E1   AA  12   8A   E6   4C   9F   A4   88   6A   8D   9B   92   15   46   B4   EE   F4  E5   7C   7F   45   D0   4C   65   75   A7   11   E2   AD   C4   31   B0   68  71   63   9C   34   41   38   E3   02   03   01   00   01
 
   30 SEQUENCE             //signatureAlgorithm
   (0D) 
      06 OBJECT IDENTIFIER
      (09) 
         2A   86   48   86   F7   0D   01   01   05

      05 NULL
      (00)
   
   03 BIT STRING           //signatureValue
   (81   81)  
      [00] //padding bits
      79  DA   A3   29   F3   32   20   50   BC   9D   46   C9   EA   DF   D8   F0   3F   9F   24   5C   02   71   DC   28   8D   41   62   CE   BE   FC   14   4C   00   21   94   9A   B3   56   F5   6D   74   A4   03   E4   04   A2   85   BB   A5   87   41   01   FC   CD   B8   3D   D6   7D   90   08   66   9A   85   96   BE   2B   3C   D2   2A   1F   36   1A   D0   E2   1D   0C   FC   33   41   02   DA   DF   33   CA   AA   38   FA   41   E4   D6   12   2E   7F   02   BC   CE   FA   C4   D5   BF   89   B7   3A   0D   C6   42   33   02   85   BF   07   FC   6C   6C   59   D6   C2   A2   63   D5   3F   CD   83   4D   47   AD   F9   95

which appears to conform to the X.509 specs (as I would expect it to):

Certificate ::= {
   tbsCertificate TBSCertificate,
   signatureAlgorithm AlgorithmIdentifier,
   signatureValue BIT STRING
}
   
TBSCertificate ::= SEQUENCE {   
   version [0] Version DEFAULT v1,  <-- what does this mean?
   serialNumber INTEGER,
   signature AlgorithmIdentifier,
   issuer Name,
   validity Validity,
   subjectName Name,
   subjectPublicKeyInfo SubjectPublicKeyInfo
   ...
}

with the lone exception of the version part, which isn’t clear to me whether it is optional or not (though it never seems to be added with certificates I create with OpenSSL).

I can open the certificate to import into a certificate store (and can successfully import to a store), so I don’t think anything is specifically wrong with the file/encoding.

When I reach the call to CertCreateCertificateContext, my lp buffer looks like:

-----BEGIN CERTIFICATE-----nMIIBqzCCARQCCQDUJyWk0OxlRTANBgkqhkiG9w0BAQUFADAaMRgwFgYDVQQDDA9NneSBTaWduaW5nIENlcnQwHhcNMTYwMTA1MjIzODU5WhcNMTcwMTA0MjIzODU5WjAanMRgwFgYDVQQDDA9NeSBTaWduaW5nIENlcnQwgZ8wDQ...

and bytes = 639 — which is the file size.

I’ve tried adding logic to strip out the certificate comments, but examples of importing a certificate in this manner don’t indicate that should be necessary.

I’ve tried setting the dwCertEncodingType to X509_ASN_ENCODING | PKCS_7_ASN_ENCODING and PKCS_7_ASN_ENCODING out of desperation (though I don’t believe I am using PKCS#7 encoding here…a little fuzzy on that).

Does anyone have any suggestions on what I might be doing incorrectly here? I appreciate it.

  • Remove From My Forums
  • Question

  • Hi All,

    I have recieved CSR request from App team but i am getting below error While creating Certificate in root CA.

    Certificate Request Denied

    Your certificate request was denied.

    Your Request Id is 0. The disposition message is

    «Error Parsing Request ASN1 bad tag value met. 0x8009310b (ASN: 267)».

    Contact your administrator for further information.

Answers

  • Thanks Elke . Issue fixed . Application team send one more updated CSR and now i am able to create certificate .

    • Marked as answer by

      Tuesday, July 29, 2014 3:01 AM

Понравилась статья? Поделить с друзьями:
  • Ошибка создания контекста opengl transport fever
  • Ошибка создания компоненты браузера
  • Ошибка создания oat файла для пропатченного classes dex
  • Ошибка создания jvm 1 minecraft
  • Ошибка создания d3d устройства dota 2