Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

4 Страницы123>»
Опции
К последнему сообщению К первому непрочитанному
Offline ikozlov  
#1 Оставлено : 18 мая 2012 г. 16:39:22(UTC)
ikozlov

Статус: Активный участник

Группы: Участники
Зарегистрирован: 10.05.2012(UTC)
Сообщений: 50

Кусок кода взят из примера

Код:
HCERTSTORE hStore = NULL; // Дескритор хранилища сертификатов
	//------------------------------------------------------------------------------
    // Открытие хранилища сертификатов "MY" текущего пользователя.
    hStore = CertOpenStore(CERT_STORE_PROV_SYSTEM, 0, 0,
        CERT_STORE_OPEN_EXISTING_FLAG |CERT_STORE_READONLY_FLAG |
        CERT_SYSTEM_STORE_CURRENT_USER, L"MY");
    if(!hStore)
    {
        HandleError("The store could not be opened!\n");
    }
    else
    {
        printf("The store is open!\n");
    }


При компиляции получаю ошибку


Цитата:
Ошибка 11 error LNK2028: ссылка на неразрешенную лексему (0A0003B4) "extern "C" void * __stdcall CertOpenStore(char const *,unsigned long,unsigned long,unsigned long,void const *)" (?CertOpenStore@@$$J220YGPAXPBDKKKPBX@Z) в функции "extern "C" wchar_t * __stdcall GetSignatureValue(char *,int,char *,int)" (?GetSignatureValue@@$$J216YGQA_WPADH0H@Z)

Ошибка 12 error LNK2019: ссылка на неразрешенный внешний символ "extern "C" void * __stdcall CertOpenStore(char const *,unsigned long,unsigned long,unsigned long,void const *)" (?CertOpenStore@@$$J220YGPAXPBDKKKPBX@Z) в функции
"extern "C" wchar_t * __stdcall GetSignatureValue(char *,int,char *,int)" (?GetSignatureValue@@$$J216YGQA_WPADH0H@Z)


Подключенные заголовки
Код:
#include <stdio.h>
#include <string.h>
#include <windows.h>
#include <wincrypt.h>
#include <wincryptex.h>
#include <stdlib.h>

Сигнатура функции думаю не должна быть принципиальна, но все же
Код:
extern "C" __declspec(dllexport) const BSTR __stdcall GetSignatureValue(char* certName, int certNameLength, char* str, int arrayLength)
Offline dedov  
#2 Оставлено : 18 мая 2012 г. 17:05:00(UTC)
dedov

Статус: Эксперт

Группы: Участники
Зарегистрирован: 03.04.2008(UTC)
Сообщений: 380
Мужчина
Откуда: Россия, г. Белгород

Сказал «Спасибо»: 11 раз
Поблагодарили: 9 раз в 9 постах
попробуйте добавить

#pragma comment(lib, "crypt32.lib")
Offline ikozlov  
#3 Оставлено : 18 мая 2012 г. 17:15:06(UTC)
ikozlov

Статус: Активный участник

Группы: Участники
Зарегистрирован: 10.05.2012(UTC)
Сообщений: 50

Спасибо! Скомпиировалось.
Offline ikozlov  
#4 Оставлено : 18 мая 2012 г. 17:17:38(UTC)
ikozlov

Статус: Активный участник

Группы: Участники
Зарегистрирован: 10.05.2012(UTC)
Сообщений: 50

Попутно вопрос касаемо этой же темы

Код:
    // Получение сертификата с заданным именем из хранилища сертификатов. 
    PCCERT_CONTEXT pContext = NULL ; // Контекст сертификата
    pContext = CertFindCertificateInStore(hStore,
        X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, 0, CERT_FIND_SUBJECT_STR_W,
        certName, NULL);
    if(pContext == NULL)
    {
        HandleError("There is no such a certificate in the store\n");
    }


5ый аргумент в функции CertFindCertificateInStore - имя сертификата. Какое поле подразумевается из объекта X509Certificate2 (C#)?

Offline dedov  
#5 Оставлено : 18 мая 2012 г. 17:26:28(UTC)
dedov

Статус: Эксперт

Группы: Участники
Зарегистрирован: 03.04.2008(UTC)
Сообщений: 380
Мужчина
Откуда: Россия, г. Белгород

Сказал «Спасибо»: 11 раз
Поблагодарили: 9 раз в 9 постах
ikozlov написал:
Попутно вопрос касаемо этой же темы

Код:
    // Получение сертификата с заданным именем из хранилища сертификатов. 
    PCCERT_CONTEXT pContext = NULL ; // Контекст сертификата
    pContext = CertFindCertificateInStore(hStore,
        X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, 0, CERT_FIND_SUBJECT_STR_W,
        certName, NULL);
    if(pContext == NULL)
    {
        HandleError("There is no such a certificate in the store\n");
    }


5ый аргумент в функции CertFindCertificateInStore - имя сертификата. Какое поле подразумевается из объекта X509Certificate2 (C#)?



Subject
Offline ikozlov  
#6 Оставлено : 18 мая 2012 г. 17:57:37(UTC)
ikozlov

Статус: Активный участник

Группы: Участники
Зарегистрирован: 10.05.2012(UTC)
Сообщений: 50

Большое спасибо!
Offline ikozlov  
#7 Оставлено : 18 мая 2012 г. 18:22:07(UTC)
ikozlov

Статус: Активный участник

Группы: Участники
Зарегистрирован: 10.05.2012(UTC)
Сообщений: 50

Столкнулся с проблемой, с которой видимо не я один сталкивался

Пытаюсь получить сертификат по Subject из хранилища (код опять же из примера упомянутого выше)
Код:
// Получение сертификата с заданным именем из хранилища сертификатов. 
PCCERT_CONTEXT pContext = NULL ; // Контекст сертификата
pContext = CertFindCertificateInStore(hStore,
	X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, 0, CERT_FIND_SUBJECT_STR_W,
	certName, NULL);
if(pContext == NULL)
{
	HandleError("There is no such a certificate in the store\n");
}


Subject содержит кириллические символы
Цитата:
C=RU, S=Тест, L=Тест, O=ООО Тест, OU=Тест, CN=Иванов Иван Иванович, E=ivanov@mail.ru


Пробовал то, что описано по ссылке, но продолжаю вылетать на том же. Подскажите, пожалуйста, как решить проблему.

Вылитаю с
Цитата:
There is no such a certificate in the store
Offline Андрей Писарев  
#8 Оставлено : 18 мая 2012 г. 18:37:00(UTC)
Андрей *

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

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 13,523
Мужчина
Российская Федерация

Сказал «Спасибо»: 555 раз
Поблагодарили: 2252 раз в 1757 постах
http://www.cryptopro.ru/....aspx?g=posts&t=1319

CERT_FIND_SUBJECT_STR_W,

последний пост, может поможет
Техническую поддержку оказываем тут
Наша база знаний
Offline dedov  
#9 Оставлено : 18 мая 2012 г. 18:45:13(UTC)
dedov

Статус: Эксперт

Группы: Участники
Зарегистрирован: 03.04.2008(UTC)
Сообщений: 380
Мужчина
Откуда: Россия, г. Белгород

Сказал «Спасибо»: 11 раз
Поблагодарили: 9 раз в 9 постах
попробуйте на вход в certName подать к примеру "ООО Тест" или "Иванов Иван Иванович", что получится?
т.е. подавать не весь subject а отдельные значения его полей

Отредактировано пользователем 18 мая 2012 г. 18:46:06(UTC)  | Причина: Не указана

Offline ikozlov  
#10 Оставлено : 18 мая 2012 г. 18:54:36(UTC)
ikozlov

Статус: Активный участник

Группы: Участники
Зарегистрирован: 10.05.2012(UTC)
Сообщений: 50

dedov написал:
попробуйте на вход в certName подать к примеру "ООО Тест" или "Иванов Иван Иванович", что получится?
т.е. подавать не весь subject а отдельные значения его полей


Не дало результатов.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
4 Страницы123>»
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.