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

Уведомление

Icon
Error

3 Страницы<123>
Опции
К последнему сообщению К первому непрочитанному
Offline Максим Коллегин  
#11 Оставлено : 7 декабря 2012 г. 17:57:43(UTC)
Максим Коллегин

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

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,408
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 37 раз
Поблагодарили: 722 раз в 626 постах
А сертификата в контейнере нет?
Знания в базе знаний, поддержка в центре поддержки
Offline Максим Коллегин  
#12 Оставлено : 7 декабря 2012 г. 18:02:05(UTC)
Максим Коллегин

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

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,408
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 37 раз
Поблагодарили: 722 раз в 626 постах
Хотя смотрю crypt32 - должно все работать.
Знания в базе знаний, поддержка в центре поддержки
Offline Treno1  
#13 Оставлено : 7 декабря 2012 г. 18:05:04(UTC)
Treno1

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

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

Сертификата в контейнере нету. Вот я уже попробовал и к контейнеру SetProvParam, и к сертификату SetContextProperty на PP_KEYEXCHANGE_PIN и PP_SIGNATURE_PIN, а он всёравно NTE_BAD_PUBLIC_KEY.
Что ещё делает криптопро командой "протестировать"?
Offline Максим Коллегин  
#14 Оставлено : 7 декабря 2012 г. 18:10:56(UTC)
Максим Коллегин

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

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,408
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 37 раз
Поблагодарили: 722 раз в 626 постах
Вы явно что-то не то пробуете. Выложите код.
Знания в базе знаний, поддержка в центре поддержки
Offline Treno1  
#15 Оставлено : 7 декабря 2012 г. 18:15:53(UTC)
Treno1

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

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

Код:

        HCERTSTORE hCertStore = NULL;
	PCCERT_CONTEXT pSignerCert=NULL; 
	LPCSTR lpszCertSubject;
	DWORD chpData = 0;
	DWORD err;
	PCRYPT_KEY_PROV_INFO pCryptKeyProvInfo = NULL;
	CRYPT_KEY_PROV_PARAM key_prov_param;
	HCRYPTPROV hProv = 0;
        BOOL fCallerFreeProv = FALSE;
	BYTE *pbPin = (BYTE *)"1234";
	DWORD cbPin = 4;
	HCRYPTPROV hCryptContProv = NULL;
	char* cont_name;
	wchar_t *convCp_wbuf = NULL;
    char *convCp_buf = NULL;
    unsigned short convCp_wbuf_len, convCp_buf_len;
	HCRYPTKEY hKey=0;

	convCp_wbuf_len = MultiByteToWideChar( CP_ACP , 0, "ne nastupil", -1, NULL, 0);
    convCp_wbuf = calloc( sizeof( wchar_t ) , convCp_wbuf_len );

    if(MultiByteToWideChar( CP_ACP, 0, "ne nastupil", -1, convCp_wbuf, convCp_wbuf_len)){
		lpszCertSubject = (LPCSTR)convCp_wbuf;
	}

         if ( !( hCertStore = CertOpenStore(
			   CERT_STORE_PROV_SYSTEM,
			   0,
			   NULL,
			   CERT_SYSTEM_STORE_CURRENT_USER,
			   CERT_STORE_NAME)))
	{
		printf("The MY store could not be opened.");
		return(-1);
	}else printf("Store opened\n\n");

	if(pSignerCert = CertFindCertificateInStore(
       hCertStore,
       MY_ENCODING_TYPE,
       0,
       CERT_FIND_SUBJECT_STR,
       lpszCertSubject,
       NULL))
    {
       printf("The signer's certificate was found.\n");
    }
    else
    {
        printf("Signer certificate not found.");
        return(-1);
    }

	if(!CertGetCertificateContextProperty(pSignerCert,
			CERT_KEY_PROV_INFO_PROP_ID,
			0,
			&chpData))
		{
			err = GetLastError();
			if(err == CRYPT_E_NOT_FOUND)
				printf("Не найдена структура ключа");
			printf("1");
		}
	if(!(pCryptKeyProvInfo = 
                   (CRYPT_KEY_PROV_INFO *)malloc(chpData)))
          {
             printf("Error in allocation of memory.");
           }
           if(CertGetCertificateContextProperty(
                pSignerCert,
                CERT_KEY_PROV_INFO_PROP_ID,
                pCryptKeyProvInfo,
                &chpData))
           {
               printf("\n The current key container is %S.",
                   pCryptKeyProvInfo->pwszContainerName);
           }
	
	convCp_buf_len = WideCharToMultiByte( CP_UTF8 , 0, pCryptKeyProvInfo->pwszContainerName, -1, NULL, 0, NULL, NULL);
    convCp_buf = calloc( sizeof( char ) , convCp_buf_len );
 
    WideCharToMultiByte( CP_UTF8, 0, pCryptKeyProvInfo->pwszContainerName, wcslen(pCryptKeyProvInfo->pwszContainerName), convCp_buf, convCp_buf_len, NULL, NULL );

	if(!CryptAcquireContext(
				&hCryptContProv,              
				convCp_buf,                 
				NULL,                      
				PROV_GOST_2001_DH,             
				0))
	{
		printf("Контейнер не открылсо");
	}

	if(!CryptSetProvParam(
				hCryptContProv,
				PP_SIGNATURE_PIN,
				pbPin,
				0))
	{
		printf("Pin не установилсо");
	}

	if(!CryptSetProvParam(
				hCryptContProv,
				PP_KEYEXCHANGE_PIN,
				pbPin,
				0))
	{
		printf("Pin не установилсо");
	}

	CryptReleaseContext(hCryptContProv,0);
	
	memset(&key_prov_param, 0, sizeof(CRYPT_KEY_PROV_PARAM));

	pCryptKeyProvInfo->cProvParam = 1;
	pCryptKeyProvInfo->rgProvParam = &key_prov_param;   
	key_prov_param.dwFlags = 0;
    key_prov_param.dwParam = PP_KEYEXCHANGE_PIN;
	key_prov_param.cbData = cbPin;
	key_prov_param.pbData = pbPin;

	if(!CertSetCertificateContextProperty(pSignerCert,
		CERT_KEY_PROV_INFO_PROP_ID,
		0,
		pCryptKeyProvInfo))
	{
		err = GetLastError();
		if(err == CRYPT_E_NOT_FOUND)
			printf("Не найдена структура ключа");
		printf("1");
	}

	if (!CryptAcquireCertificatePrivateKey(pSignerCert,
                    CRYPT_ACQUIRE_SILENT_FLAG | CRYPT_ACQUIRE_COMPARE_KEY_FLAG,
					//CRYPT_ACQUIRE_COMPARE_KEY_FLAG,
                    NULL,
                    &hProv,
                    &chpData,
                    &fCallerFreeProv)) {
						err = GetLastError();
						if (err == NTE_BAD_PUBLIC_KEY)
							printf ("bad pub");
						if (err == NTE_SILENT_CONTEXT)
							printf ("silent");
	}
Offline Максим Коллегин  
#16 Оставлено : 7 декабря 2012 г. 18:30:29(UTC)
Максим Коллегин

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

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,408
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 37 раз
Поблагодарили: 722 раз в 626 постах
А если поставить cbpin = 5?
Знания в базе знаний, поддержка в центре поддержки
Offline Treno1  
#17 Оставлено : 7 декабря 2012 г. 18:32:30(UTC)
Treno1

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

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

Спасибо! Пойду выстрою себе дом из свежих кирпичей) А на входе напишу strlen+1)
Offline Treno1  
#18 Оставлено : 10 декабря 2012 г. 14:58:45(UTC)
Treno1

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

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

Вопрос таков: А что нужно сделать, чтобы при след убращении к контейнеру не спрашивался пароль?
Offline Максим Коллегин  
#19 Оставлено : 10 декабря 2012 г. 15:01:49(UTC)
Максим Коллегин

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

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,408
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 37 раз
Поблагодарили: 722 раз в 626 постах
Если в том же приложении, то не закрывать контекст криптопровайдера.
Знания в базе знаний, поддержка в центре поддержки
Offline Treno1  
#20 Оставлено : 10 декабря 2012 г. 15:11:13(UTC)
Treno1

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

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

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