1с установить сертификат в личное хранилище и связать с закрытым ключом
Вот как-то так я делал это:
//---------------------------------------------------------------------------
// получим дескриптор провайдера (и секретного ключа) для подписи
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);
if( !err)
//Получаем UNICODE-уникальное имя контейнера
provInfo.pwszContainerName = WideString( asContainerName ).c_bstr();
//Получаем UNICODE-имя провайдера
provInfo.pwszProvName = WideString( crtmgr_win->tCrypto.asProviderName ).c_bstr();
//Получаем тип провайдера:
provInfo.dwProvType = 2;
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
Data = Что то что подписываем
Signer.Certificate = SertForSign
DataForSign.Content = Data
Я создавал свою программу в отрыве от хранилищ сертификатов и т.п. Я использую свою внутреннюю базу сертификатов, запросы на которые и сами сертификаты получаются по другим каналам, нежели Web. Поэтому у меня возникла необходимость привязывать сертификат к закр. ключу. Для этого необходимо всего лишь знать точное имя крипто-контейнера и выполнить часть кода, описанную выше.
Cenroll я использовал только для выдачи запроса на сертификат. Всё остальное - CryptoAPI
.
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.
Вы проверяли это?
Вы можете удалить Крипто Ком и посмотреть, как без него?
Неудачных запросов с таким названием организации нет.
Почему возникает ошибка при создании запроса конкретно на Вашем компьютере - неясно. Для уточнения недостаточно данных (если вообще возможно это сделать в рамках форума).
Для Вас есть два пути решения проблемы:
1) более лёгкий - потребует от 1 до 2 часов. Ставите на свободный раздел (с форматированием) WinXP с SP2 с оригинального дистрибутива. Ставите, если есть желание, критические обновления от MS. Потом "КриптоПро CSP 3.0 с SP2".
При возникновении ошибки "Сертификат не имеет связи с закрытым ключом" необходимо выполнить проверку сертификата электронной подписи.
Алгоритм проверки электронной подписи:
В программном продукте 1С необходимо
1. перейти в раздел "Администрирование"
2. "Обмен электронными документами"
3. "Настройка электронной подписи и шифрования"
4. На вкладке "Сертификаты" открыть используемый сертификат
5. Нажать на кнопку "Проверить"
6. Ввести пароль закрытой части ключа и нажать "Проверить"
! Обращаем Ваше внимание, что программа сама увеличит количество * в поле "Пароль:" до 16 при проверке. Данное поведение является штатным и выступает дополнительной защитой конфиденциальных данных в виде количества символов в пароле. Проверка будет осуществлена на основании введенных Вами данных .
Если в ходе проверки напротив пункта "Подписание данных" возникнет сигнализирующий об ошибке красный символ, на него необходимо нажать для открытия технической информации об ошибке.
Если в технической информации об ошибке указано " Сертификат не имеет связи с закрытым ключом " это обозначает, что открытая часть ключа не может сослаться на контейнер сертификата. Основной причиной возникновения данной ошибки является некорректный перенос сертификата с одного рабочего места на другое.
Решение: связать сертификат с закрытом ключом.
Д ля этого необходимо:
1. Сохранить сертификат, указав директорию компьютера, где его можно будет найти. Сделать это можно из программы 1С открыв сертификат в настройках электронной подписи и шифрования и нажать кнопку "Сохранить в файл" и указать директорию операционной системы для сохранения файла.
2. Запустить криптопровайдер и выполнить установку сертификата.
Для VIPNet CSP
В окне VIPNet CSP нажать "Установить сертификат"
В открывшемся окне необходимо выбрать директорию, куда был сохранен сертификат, выбрать сохраненный ранее сертификат и нажать "Открыть".
В открывшемся мастере установки сертификатов, нажать "Далее"
При выборе хранилища необходимо выбрать "Текущий пользователь" и нажать "Далее"
В следующем окне необходимо выбрать "Найти контейнер с закрытым ключом" и нажать "Далее".
Контейнер с закрытым ключом оперделиться автоматический. В том случае, когда контейнер не определился необходимо нажать "Обзор" и выбрать контейнер вручную, а затем нажать "Ок" и завершить установку.
Для КриптоПро CSP
Запустить КриптоПро CSP. Для этого необходимо перейти в Пуск - Панель управления - КриптоПро CSP
В открывшемся окне криптопровайдера перейти на вкладку "Сервис" и нажать "Установить личный сертификат".
В следующем окне необходимо выбрать директорию расположения файла сертификата нажав кнопку "Обзор"
Указать директорию, в которую ранее был сохранён сертификат и нажать "Открыть".
В следующем окне мастера установки сертификатов поставить галочку "Найти контейнер автоматический". Контейнер должен определиться в окне ниже. Если автоматический не удалось найти контейнер необходимо нажать "Обзор" и самостоятельно указать контейнер. Затем нажать Далее.
Затем необходимо поставить галочку "Установить сертификат (цепочку сертификатов) в контейнер", нажать "Далее" и завершить установку.
После установки связи между сертификатом и закрытой частью ключа ошибка не воспроизводится.
Хранение контейнера ключа для криптопровайдера «КриптоПРО CSP» возможно как в реестре компьютера, так и на внешних носителях информации (flesh-носитель, E-токен). Тестовая ЭП предоставляется в файловом режиме, в виде папки с файлами. Ее нужно скопировать на внешний носитель информации (flesh-носитель, E-токен), а затем добавить в интерфейс криптопровайдера.
2.2. Установка сертификата из контейнера
Вы получили контейнер закрытого ключа электронной подписи с тестовыми реквизитами. После открытия полученного архива скопируйте содержимое на внешний носитель информации (Flash-носитель), добавьте контейнер(-ы) закрытого ключа электронной подписи в программу криптографии «КриптоПРО CSP» и произведите из него установку сертификата.
Контейнер закрытого ключа электронной подписи будет представлять собой папку с названием: «*****.000», где «звездочки» - наименование, а «.000» - расширение контейнера закрытого ключа
Для установки сертификата из закрытого ключа (контейнера) электронной подписи запустите программу «КриптоПРО CSP»
Далее, в открытом криптопровайдере перейдите на вкладку «Сервис» и нажмите кнопку Просмотреть сертификаты в контейнере
Выберите контейнер закрытого ключа электронной подписи, расположенный на внешнем носителе, из которого необходимо установить сертификат организации и нажмите кнопку ОК
Перед Вами откроется окно с информацией о сертификате организации. Для установки сертификата нажмите кнопку Установить
2.3. Загрузка и установка корневого сертификата Удостоверяющего Центра и списка отзыва сертификатов
На вкладке «Состав» открытого сертификата организации Вы можете получить информацию и ссылку на скачивание корневого сертификата Удостоверяющего Центра и Списка отзывов сертификатов.
Для получения ссылки на скачивание корневого сертификата Удостоверяющего Центра перейдите в поле «Доступ к информации о центрах сертификации» и выделите его курсором мыши.
В открывшейся информации ниже ссылка на скачивание корневого сертификата Удостоверяющего Центра будет отображена в разделе «Доступ к сведениям центра сертификации Метод доступа=Поставщик центра сертификации» в пункте «Дополнительное имя»
Для скачивания файла корневого сертификата скопируйте после «URL=» ссылку в адресную строку браузера и нажмите на клавиатуре кнопку ENTER, а затем сохраните файл в любой каталог
Для получения ссылки на скачивание списка отозванных сертификатов необходимо перейти на вкладку «Состав» и выбрать из списка поле «Точки распространения списков отзыва»
В открывшейся информации в разделе «Имя точки распространения» скопируйте ссылку на загрузку списков отзыва
Для скачивания файла списка отзыва сертификатов скопируйте после «URL=» ссылку в адресную строку браузера и нажмите на клавиатуре кнопку ENTER, а затем сохраните файл в любой каталог
3.4. Установка корневого сертификата Удостоверяющего Центра
После скачивания файла корневого сертификата откройте скачанный файл двойным кликом мыши. В открывшемся окне сертификата нажмите кнопку Установить сертификат
Перед Вами откроется «Мастер импорта сертификатов». Следуйте указаниям «Мастера импорта сертификатов». На этапе импорта необходимо указать хранилище сертификатов «Доверенные корневые центры сертификации» и нажать Далее
При появлении окна «Предупреждение системы безопасности», необходимо нажать кнопку ОК для установки сертификата в системное хранилище Windows
После успешного импорта сертификата нажмите Готово.
Во время тестирования и работы сервиса «1С-ЭДО» следует учесть, что данный сервис работает с несколькими операторами ЭДО СФ и соответственно, несколькими Удостоверяющими Центрами.
В этом случае необходимо сохранить к себе на компьютер сертификат организации через пункт меню «Сохранить в файл» из формы поступившего документа, выгрузить из него корневой сертификат Удостоверяющего центра и установить последний в «Доверенные корневые центры сертификации», как показано выше.
3.5. Установка списка отзывов сертификатов
После скачивания файла списка отзывов сертификата и сохранения его в нужный каталог откройте его правой кнопкой мыши через меню «Установить список отзыва (CRL)»
Перед Вами откроется «Мастер импорта сертификатов». Следуйте указаниям «Мастера импорта сертификатов». На этапе импорта необходимо убедиться, что пункт «Автоматически выбрать хранилище на основе типа сертификата» выбран и нажать Далее
После успешного импорта сертификата нажмите Готово.
Проверить корректность выстроенной цепочки сертификатов в системном хранилище Windows Вы можете на вкладке «Путь сертификации». Сертификаты не должны иметь иконок с красными крестами, а в разделе «Состояние сертификата» должен быть статус «Этот сертификат действителен»
3.6. Копирование контейнера в реестр компьютера
Если Вы хотите использовать подпись файлов при работе с сервисом «1С-ЭДО», не используя flash-носитель информации, то скопируйте контейнер закрытого ключа электронной подписи в реестр компьютера, затем произвести установку сертификата.
Для этого необходимо вставить flash-носитель информации с контейнером закрытого ключа электронной подписи в компьютер и открыть программу «КриптоПРО CSP»
В интерфейсе «КриптоПРО CSP» перейти на вкладку «Сервис» и нажать кнопку Скопировать
В открытом окне нажмите кнопку Обзор
В следующем окне выберите контейнер закрытого ключа с flash-накопителя информации, который необходимо скопировать и нажмите ОК
В следующем окне задайте имя для контейнера с названием организации, Ф.И.О. ответственного лица и датой создания или копирования, нажмите кнопку Готово
Выберите место хранения копии контейнера закрытого ключа электронной подписи – «Реестр» и нажмите ОК
Задайте новый пароль к контейнеру или введите пароль по умолчанию и нажмите ОК
Контейнер закрытого ключа электронной подписи будет скопирован в выбранное Вами место
Извлеките flash-накопитель из компьютера и произведите установку сертификата из копии контейнера закрытого ключа электронной подписи, расположенной в Реестре компьютера.
Аналогичным способом производится копирование между любыми видами носителя ключа, поддерживаемого криптопровайдером.
Далее пользователю можно приступать к регистрации сертификата в учетной записи.
При возникновении ошибки "Сертификат не имеет связи с закрытым ключом" необходимо выполнить проверку сертификата электронной подписи.
Алгоритм проверки электронной подписи:
В программном продукте 1С необходимо
1. перейти в раздел "Администрирование"
2. "Обмен электронными документами"
3. "Настройка электронной подписи и шифрования"
4. На вкладке "Сертификаты" открыть используемый сертификат
5. Нажать на кнопку "Проверить"
6. Ввести пароль закрытой части ключа и нажать "Проверить"
! Обращаем Ваше внимание, что программа сама увеличит количество * в поле "Пароль:" до 16 при проверке. Данное поведение является штатным и выступает дополнительной защитой конфиденциальных данных в виде количества символов в пароле. Проверка будет осуществлена на основании введенных Вами данных .
Если в ходе проверки напротив пункта "Наличие сертификата в личном списке" возникнет сигнализирующий желтый символ, на него необходимо нажать для открытия технической информации.
Если в технической информации об ошибке указано " Сертификат не найден на компьютере.Проверка подписания, созданной подписи и расшифровки не могут быть выполнены." это обозначает, что сертификат не установлен на данном рабочем месте в личном списке. Проверить это можно перейдя в Панель управления - Свойства браузера
В открывшемся окне перейти на вкладку "Содержание" и нажать "Сертификаты"
В сертификатах перейти на вкладку "Личные".
Как видно на примере в личных действительно отсутствует сертификат электронной подписи.
Решение: Установить сертификат в личный список.
Корректная установка сертификата в личный список происходит из программы криптографии.
1. Для пользователей, использующих VIPNet CSP
Запустить VIPNet CSP - выбрать необходимый контейнер и нажать "Свойства"
В открывшемся окне свойств контейнера необходимо нажать "Открыть" для открытия сертификата электронной подписи.
В сертификате необходимо нажать "Установить сертификат"
В открывшемся мастере импорта сертификатов необходимо выбрать в расположении хранилища "Текущий пользователь" и нажать "Далее"
Затем выбрать "Поместить все сертификаты в следующее хранилище" и нажать "Обзор". В открывшемся окне выбрать хранилище "Личное" и нажать "ОК". Завершить установку сертификата.
2. Для пользователей, использующих КриптоПро CSP
Запустить КриптоПро CSP. Для этого необходимо перейти в Пуск - Панель управления - КриптоПро CSP
В открывшемся окне криптопровайдера перейти на вкладку "Сервис" и нажать "Просмотреть сертификат в контейнере. ".
Затем нажать "Обзор" и выбрать необходимый контейнер закрытого ключа.
В открывшемся окне необходимо выбрать необходимый контейнер закрытого ключа и нажать "ОК"
В следующем окне можно сверить данные о выбранного сертификата и нажать "Установить".
После чего появиться окно, свидетельствующее о том, что сертификат установлен в хранилище "Личные" текущего пользователя.
После установки сертификат появится в хранилище "Личные" в свойствах браузера.
После установки сертификата в хранилище "Личные" ошибка не воспроизводится.
Также вам может быть интересно:
Нет доступного сертификата для подписания документов.
Перед установкой личного сертификата с носителя ruToken или eToken необходимо проверить наличие сертификата в контейнере, для этого:
Запустите программу КриптоПро CSP: (Пуск - Настройка - Панель управления - КриптоПро CSP или Пуск - Панель управления - КриптоПро CSP )
Откройте вкладку "Сервис" и нажмите кнопку «Просмотреть сертификаты в контейнере»
В открывшемся окне нажмите кнопку "Обзор"
Выберите контейнер, который необходимо проверить на наличие в нем сертификата, и нажмите кнопку «Ок»
После того, как в поле «Имя ключевого контейнера» установится название контейнера, нажмите кнопку «Далее»
Если откроется окно «Введите pin-код для контейнера», необходимо ввести Pin-код для носителя.
Pin-код по умолчанию: 12345678
Если открылось окно «Сертификат для просмотра», значит в контейнере есть личный сертификат и вы можете его установить.
Экспорт личного сертификата
Для установки сертификата нажмите кнопку «Свойства»
Во вкладке «Состав» нажмите кнопку «Копировать в файл. »
Для подтверждения копирования нажмите кнопку «Далее»
Для подтверждения копирования нажмите кнопку «Далее»
Для подтверждения копирования нажмите кнопку «Далее»
В следующем окне нажмите кнопку «Обзор. »
1. Выбирете рабочий стол
2. Напишите имя файла Например :«Сертификат»
Для подтверждения копирования нажмите кнопку «Далее»
Для подтверждения копирования нажмите кнопку «Готово»
После того как Экспорт будет выполнен успешно нажмите кнопку «ОК»
Установка личного сертификата
Откройте вкладку "Сервис" и нажмите кнопку «Установить личный сертификт. »
Читайте также: