Сертификат не имеет связи с закрытым ключом ошибка при подписании файла
Обновлено: 06.07.2024
PCCERT_CONTEXT __fastcall Tcrtmgr_win::GetSignKey( AnsiString asGUID, HCRYPTPROV* phCryptProv )
AnsiString asContainerName;
int NumRows, err, i, rez = -1;
PCCERT_CONTEXT pCertContext = NULL;
CRYPT_SIGN_MESSAGE_PARA SigParams;
//HCRYPTPROV hProv;
DWORD dwKeySpec;
BOOL fCallerFreeProv;
// -------------
for( i=0; i < pCertList->Count; i++ )
if( AnsiString( ((ptCards_Store)(pCertList->Items[i]))->guid ) == asGUID )
rez = i;
if( rez != -1 )
asContainerName = AnsiString( ((ptCards_Store)(pCertList->Items[rez]))->conteiner );
>
else
return NULL;
>
pCertContext = GetCertContext( asGUID );
err = CryptFindCertificateKeyProvInfo( pCertContext, 0, NULL);
provInfo.dwFlags = 0;
provInfo.cProvParam = 0;
provInfo.rgProvParam = 0;
provInfo.dwKeySpec = AT_SIGNATURE;
CertSetCertificateContextProperty( pCertContext,
CERT_KEY_PROV_INFO_PROP_ID,
0,
&provInfo );
>
if( !CryptAcquireCertificatePrivateKey(
pCertContext,
CRYPT_ACQUIRE_COMPARE_KEY_FLAG | CRYPT_ACQUIRE_SILENT_FLAG,
NULL,
phCryptProv/*&hProv*/,
&dwKeySpec,
&fCallerFreeProv
))
err =GetLastError();
>
CertStore = New Capicom.Store
CertStore.Open
SertForSign = CertStore.Certificates(1)
DataForSign = New Capicom.SignedData
Signer = New Capicom.Signer
.
const BYTE* MessageArray[] = ;
DWORD MessageSizeArray[1];
MessageSizeArray[0] = iBufferSize;
SigParams.cbSize = sizeof(CRYPT_SIGN_MESSAGE_PARA);
SigParams.dwMsgEncodingType = PKCS_7_ASN_ENCODING | X509_ASN_ENCODING;
SigParams.pSigningCert = pCertContext;
// szOID_OIWSEC_sha1RSASign
// szOID_OIWSEC_sha1
// szOID_OIWSEC_sha
//
if( iSignMode == 0 )
SigParams.HashAlgorithm.pszObjId = szOID_CP_GOST_R3411_R3410;
if( iSignMode == 1 )
SigParams.HashAlgorithm.pszObjId = szOID_OIWSEC_sha1RSASign;
SigParams.HashAlgorithm.Parameters.cbData = NULL;
SigParams.cMsgCert = 0;
SigParams.rgpMsgCert = NULL;
SigParams.cAuthAttr = 0;
SigParams.dwInnerContentType = 0;
SigParams.cMsgCrl = 0;
SigParams.cUnauthAttr = 0;
SigParams.dwFlags = 0;
SigParams.pvHashAuxInfo = NULL;
SigParams.rgAuthAttr = NULL;
//--------------------------------------------------------------------
// With two calls to CryptSignMessage, sign the message.
// First, get the size of the output signed BLOB.
if(CryptSignMessage(
&SigParams, // Signature parameters
TRUE, // detached
1, // Number of messages
MessageArray, // Messages to be signed
MessageSizeArray, // Size of messages
chSignedData, // Buffer for signed message
pdwSigLen)) // Size of buffer
err= 1;
>
else
err = GetLastError();
>
При возникновении ошибки "Сертификат не имеет связи с закрытым ключом" необходимо выполнить проверку сертификата электронной подписи.
Алгоритм проверки электронной подписи:
В программном продукте 1С необходимо
1. перейти в раздел "Администрирование"
2. "Обмен электронными документами"
3. "Настройка электронной подписи и шифрования"
4. На вкладке "Сертификаты" открыть используемый сертификат
5. Нажать на кнопку "Проверить"
6. Ввести пароль закрытой части ключа и нажать "Проверить"
! Обращаем Ваше внимание, что программа сама увеличит количество * в поле "Пароль:" до 16 при проверке. Данное поведение является штатным и выступает дополнительной защитой конфиденциальных данных в виде количества символов в пароле. Проверка будет осуществлена на основании введенных Вами данных .
Если в ходе проверки напротив пункта "Подписание данных" возникнет сигнализирующий об ошибке красный символ, на него необходимо нажать для открытия технической информации об ошибке.
Если в технической информации об ошибке указано " Сертификат не имеет связи с закрытым ключом " это обозначает, что открытая часть ключа не может сослаться на контейнер сертификата. Основной причиной возникновения данной ошибки является некорректный перенос сертификата с одного рабочего места на другое.
Решение: связать сертификат с закрытом ключом.
Д ля этого необходимо:
1. Сохранить сертификат, указав директорию компьютера, где его можно будет найти. Сделать это можно из программы 1С открыв сертификат в настройках электронной подписи и шифрования и нажать кнопку "Сохранить в файл" и указать директорию операционной системы для сохранения файла.
2. Запустить криптопровайдер и выполнить установку сертификата.
Для VIPNet CSP
В окне VIPNet CSP нажать "Установить сертификат"
В открывшемся окне необходимо выбрать директорию, куда был сохранен сертификат, выбрать сохраненный ранее сертификат и нажать "Открыть".
В открывшемся мастере установки сертификатов, нажать "Далее"
При выборе хранилища необходимо выбрать "Текущий пользователь" и нажать "Далее"
В следующем окне необходимо выбрать "Найти контейнер с закрытым ключом" и нажать "Далее".
Контейнер с закрытым ключом оперделиться автоматический. В том случае, когда контейнер не определился необходимо нажать "Обзор" и выбрать контейнер вручную, а затем нажать "Ок" и завершить установку.
Для КриптоПро CSP
Запустить КриптоПро CSP. Для этого необходимо перейти в Пуск - Панель управления - КриптоПро CSP
В открывшемся окне криптопровайдера перейти на вкладку "Сервис" и нажать "Установить личный сертификат".
В следующем окне необходимо выбрать директорию расположения файла сертификата нажав кнопку "Обзор"
Указать директорию, в которую ранее был сохранён сертификат и нажать "Открыть".
В следующем окне мастера установки сертификатов поставить галочку "Найти контейнер автоматический". Контейнер должен определиться в окне ниже. Если автоматический не удалось найти контейнер необходимо нажать "Обзор" и самостоятельно указать контейнер. Затем нажать Далее.
Затем необходимо поставить галочку "Установить сертификат (цепочку сертификатов) в контейнер", нажать "Далее" и завершить установку.
После установки связи между сертификатом и закрытой частью ключа ошибка не воспроизводится.
Иногда во время установки сертификатов электронной цифровой подписи через КриптоПро после выбора ключевого контейнера возникает ошибка: «В контейнере закрытого ключа отсутствует открытый ключ шифрования». Ее устранение в большинстве случаев не требует обращения в службу поддержки пользователей: достаточно лишь следовать пошаговой инструкции установки в контейнер закрытого ключа подписи.
Причины возникновения ошибки
Ошибка «В контейнере закрытого ключа отсутствует сертификат открытого ключа» может возникать во время установки нового личного сертификата, а также при попытке просмотра закрытых ключей через контейнеры или при экспорте данных с компьютера на флешку или с электронного носителя на ПК.
Пошаговая инструкция установки личного сертификата
Чтобы установить личный сертификат, не записанный на ключевой носитель, нужно:
- Запустить программу КриптоПро: «Пуск»/«Настройка»/«Панель управления»/«КриптоПро CSP».
- Перейти через раздел «Сервис» во вкладку «Установить личный сертификат».
- Нажать «Далее».
- Указать путь к закрытому ключу электронной цифровой подписи через кнопку «Обзор». Пользователь в открывшейся папке выбирает файл, заканчивающийся расширением .cer.
- После этого пользователю предстоит нажать «Открыть».
Следующий шаг — это выбор ключевого контейнера. Пользователь должен:
- В рабочем окне «Контейнер закрытого ключа» нажать «Обзор» и выбрать контейнер, соответствующий названию ЭЦП.
- Нажать «Далее» после того, как в графе «Имя ключевого контейнера» появится название контейнера.
- При необходимости ввести пин-код ключевого носителя.
Затем нужно выбрать хранилище. Делает это так:
- Пользователь нажимает «Обзор» и выбирает «Личное хранилище».
- После того как название хранилища отразится в соответствующей графе пользователь нажимает «Далее».
- После выбора контейнера для подтверждения установки нужно нажать «Готово».
Остается лишь перезагрузить компьютер и попробовать подписать документ. Если ошибка будет повторяться, то необходимо обратиться в сервисный центр для незапланированной замены носителя электронной подписи и закрытого ключа ЭЦП. Проблема может крыться в неисправности токена.
Установка в КриптоПРО версии 3.62 R2
Установка личного сертификата в КриптоПро версии 3.62 R2 и выше происходит иначе. В окне программы следует выбрать пункт «Установить» и подтвердить замену (если требуется). Если запроса на замену не вышло, нужно открыть вкладку «Сертификат для просмотра» и выбрать «Свойства».
В новом окне выбрать пункт «Установить».
После этого запустится «Мастер установки», в котором нужно нажать кнопку «Далее». После этого следует выбрать пункт «Поместить все сертификаты в хранилище». Для выбора хранилища нужно нажать «Обзор».
Для дальнейшей установки нужно выбрать «Личное хранилище».
Ошибка отсутствия ключа электронной цифровой подписи в контейнера возникает обычно из-за отсутствия соответствующего сертификата. Решить проблему просто: установить личный сертификат и перезагрузить ПК. Способ установки зависит от версии используемого программного обеспечения КриптоПро и занимает всего несколько минут. Если после замены или установки открытого ключа проблема не исчезла, лучше обратиться в сервисный центр для перевыпуска электронной подписи.
Использование ЭЦП открывает для владельца подписи дополнительные возможности. Но вместе с этим, иногда сопровождается небольшими техническими проблемами, связанными с необходимостью чёткого выполнения действий, связанных с загрузкой сертификатов, авторизацией, установкой необходимого программного обеспечения, а также системных требований к компьютеру.
Важно отметить, что большинство ошибок при работе с ЭЦП можно устранить в домашних условиях, без необходимости привлечения специалистов со стороны.
Какие виды ошибок ЭЦП бывают
Среди наиболее часто встречающихся ошибок в процессе подписания электронных документов электронной подписью выделяют три ключевых блока:
Проблема с подписанием ЭПЦ. Возникает в момент, когда владелец подписи желает использовать ее при подписании электронного документа. Проблемы при авторизации. Появляется при проверке пользователя, когда владелец электронной подписи впервые пытается зайти на электронную площадку с подтверждением личности через ЭЦП.Проблема с подписанием ЭПЦ
Причины, вызывающие подобную ошибку весьма разнообразны. Тут можно выделить такие основные направления:
- Закрытый ключ со съемного носителя (диска, флешки, Токена), не соответствует имеющемуся ключу открытого сертификата. Банальный человеческий фактор выбора не того носителя информации с ЭЦП. Если же «правильный» ключ утерян, придется обращаться в Удостоверяющий центр для перевыпуска.
- Недействительный сертификат. Чтобы устранить подобную ошибку потребуется переустановить открытый сертификат. Важно учитывать требования криптопровайдера (инструкции по необходимым действиям) для установки открытых сертификатов.
- Сертификат подписи определяется как не проверенный. Потребуется выполнить переустановку корневого сертификата, сформировавшего ЭП Удостоверяющего центра.
- Закончился срок действия криптопровайдера. Необходимо получить новый лицензионный ключ, позволяющий работать с программным обеспечением криптопровайдера. Информация запрашивается через УЦ, либо владельца ПО.
- Не виден сертификат на носителе. Помогает простая перезагрузка компьютера для устранения ошибка генерации.
- Алгоритм сертификата ЭЦП не поддерживается. Подобная ошибка может возникать при подписании электронной отчетности в налоговую. Потребуется переустановить КриптоПро CSP и проверить его на совместительство с имеющейся у вас на компьютере операционной системой.
Ошибка исполнения функции с информированием о невозможности подписать документ ЭЦП обычно появляется в момент подписания документа.
Система сразу выводит на экран уведомление о непредвиденной ошибке с кратким указанием причины ее возникновения.
Обычно для ее исправления требуются такие действия:
- проверка наличия, срока действия, подлинности сертификатов и выполнение их замены;
- выполнение проверки корректной работы операционной системы компьютера, ее обновление до минимальных допустимых параметров;
- проверка состояния съемного носителя закрытого ключа;
- выявление и устранение ошибок работы криптопровайдера.
Важно. Причина, из-за которой владелец ЭЦП не может нею воспользоваться, может быть комплексной. Поэтому, если не сработал один из предложенных вариантов, проверьте по другим направлениям.
Проблема с сертификатом
Распространенным явлением во время подписания электронных документов ЭЦП является получение уведомления, что системе не удалось получить доступ к сертификатам, пригодным для формирования подписи.
Здесь причины возникновения неисправности могут быть такими:
Внимательно читайте природу ошибки, что выдает система. Обычно это ключ к дальнейшему направлению поиска источника проблемы и ее устранению.Что делать если не найден сертификат или не верен
Когда сертификат отсутствует в списке «Ваши Сертификаты», проблема может оказаться в отсутствии коренного сертификата УЦ.
Для устранения этой проблемы необходимо:
- потребуется открыть не отображенный во вкладке сертификат и просмотреть его «Путь сертификации»;
- тут отображаются все цепочки сертификатов в порядке ранжирования. Важно чтобы напротив какого-то из них не стоял желтый, либо красный значок предупреждения. Если подобное присутствует – нажмите на сам сертификат и ознакомьтесь с ошибкой, что выдаст система;
- в зависимости от причины (обычно это окончание действия сертификата, либо не верифицирован) выполните ее устранение.
Чтобы устранить ошибку и перезагрузить отозванный сертификат потребуется выполнить несколько не сложных действий:
- в окне «Свойства браузера» откройте личный сертификат. Попасть туда можно через «Поиск» меню «Пуск». В открытом окошке ищите вкладку «Содержание», дальше вкладку «Сертификаты»;
- после этого во вкладке «Состав» потребуется выбрать позицию «Точки распространения списков отзывов»;
- в следующем блоке под названием «Имя точки распространения» необходимо выполнить копирование ссылки загрузки файла списка отзывов;
- переходя по указанной ссылке необходимо скачать и установить файл списка отзывов (CRL);
- дальше переходим по подсказкам «Мастера импорта сертификатов».
Следующей распространенной проблемой, когда компьютер не видит сертификат на носителе, является сбой в работе программных продуктов компьютера либо Токена (флешки). Обычно помогает простая перезагрузка ПК. Среди прочих популярных проблем этого направления можно выделить такие:
- На носителе отсутствует драйвер, либо он установлен не корректно. Необходимо скачать последнюю версию драйвера с официального источника и установите его. Можно проверить работоспособность съемного носителя на другом ПК. В этом случае, если другой ПК нормально работает с носителем ЭЦП, переустановите драйверы на первом компьютере.
- Система долго распознает носитель ЭЦП. Тут проблема в операционной системе. Ее потребуется обновить до минимального уровня, требуемого для работы с ЭЦП.
- USB-порт работает не корректно. Попробуйте подсоединить Токен (флешку) через другой порт, либо на другом ПК, чтобы убедиться, что проблема не в носителе. Выполните перезагрузку компьютера.
- Если Токин (флешка) не открывается ни на одном компьютере, значит проблема в носителе. Когда ключ был записан в единственном экземпляре на этот носитель – потребуется обращаться в УЦ для перевыпуска ЭЦП.
Важно. Перед вынесением «окончательного вердикта» касательно работоспособности носителя и сертификата, не поленитесь выполнить их проверку через несколько различных источников.
Проблемы при авторизации
Часто с подобными неприятностями сталкиваются владельцы ЭЦП, пытающиеся пройти регистрацию, либо авторизацию на различных электронных торговых площадках. Пользователю появляется уведомление, что его подпись не авторизирована.
Обычно проблема кроется:
На различных ресурсах процесс регистрации (авторизации) может существенно отличаться, иметь определенные ограничения, а также блокироваться защитным ПО. Поэтому перед началом процедуры не поленитесь ознакомиться с соответствующей инструкцией и правилами.В дальнейшем, при работе на самой электронной площадке и попытке подписать электронные документы, могут возникать дополнительные трудности, связанные с такими моментами:
- Необходимости присоединиться к регламенту. Система не даст возможность полноценно работать, если вы не согласитесь с ее условиями.
- Невозможность загрузить файл (файлы). Обычно это ошибка превышения размера информации, что допустима для загрузки. Просто смените формат разрешения файла, чтобы уменьшить его размер.
- Требование использовать определенный браузер (определенную версию браузера). Это системные требования владельца площадки, которые необходимо соблюдать.
- Проблемы со считыванием сертификатов. Потребуется проверить не просрочены ли ваши сертификаты, а также все ли они установлены на ПК.
Возможно не прошла расшифровка файла ключа. Перезагрузите компьютер. Проверьте, отображается ли съемный носитель ключа ЭЦП, наличие и корректность отображения сертификатов, а также соответствие их (должен быть одинаковый владелец).
Связана с повреждением, либо отсутствием необходимых драйверов на носителе, либо ПК. Потребуется скачать с официального источника недостающий драйвер и переустановить его.
Несоответствие программного продукта операционной системы и съемного носителя (флешки), либо повреждение флешки. Устраняется путем обновления операционной системы до минимально необходимой версии. В случае обнаружения повреждения флешки – может потребоваться перевыпуск ЭЦП удостоверяющим центром.
Потребуется выполнить определенные настройки вашего браузера и добавить программу в меню веб-обозревателя, а также загрузить недостающие сертификаты ЭЦП.
Хранение сертификатов в Windows (от 7 версии) осуществляется по адресу: C:UsersПОЛЬЗОВАТЕЛЬAppDataRoamingMicrosoftSystemCertificates
Читайте также: