Atom Лента - Форум КриптоПро - Тема:Ошибка поиска сертификата по издателю на Unix - 10Форум КриптоПро - Atom Лентаurn:https:--www-cryptopro-ru:AtomLenta:ForumKriptoPro:Tema:OshibkapoiskasertifikatapoizdateljunaUnix-10:1Copyright 2024 Форум КриптоПро2024-03-28T15:42:50Zhttps://www.cryptopro.ru/forum2/Images/YAFLogo.pngForum Adminhttps://www.cryptopro.ruforum@cryptopro.ruDart_Chikerhttps://www.cryptopro.ru/forum2/default.aspx?g=profile&u=49603&name=Dart_ChikerDart_Chikerhttps://www.cryptopro.ru/forum2/default.aspx?g=profile&u=49603&name=Dart_ChikerYetAnotherForum.NETurn:https:--www-cryptopro-ru:ftPosts:st1:meid99867:1Ошибка поиска сертификата по издателю на Unix<table class="content postContainer_Alt" width="100%"><tr><td>Здравствуйте!<br /><br />Пытаюсь на Ubuntu найти сертификат по издателю (Чтобы в идеале искать по CERT_ID), но поиск почему-то не отрабатывает. Код прилагаю.<br />Если же искать таким же образом сертификат по Subject, он его находит. С чем это может быть связано?<br /><br />Да, аналогичный код на Windows отрабатывает без проблем. В хранилище TrustedPeople на Unix используется самый обычный тестовый сертификат выданный вашим УЦ.<br /><br />Заранее благодарю.<br /><div class="code"><strong>Код:</strong><div class="innercode"><pre class="line-numbers"><code class="language-c">int main(){
HCERTSTORE hFileStore;
PCCERT_CONTEXT pCertCtx;
DWORD cbSize;
LPCWSTR pszString = L"E=support@cryptopro.ru, C=RU, L=Moscow, O=CRYPTO-PRO LLC, CN=CRYPTO-PRO Test Center 2";
CERT_NAME_BLOB blobEncodedIssuerName;
if ((hFileStore = CertOpenStore(CERT_STORE_PROV_SYSTEM, 0, 0,
CERT_STORE_OPEN_EXISTING_FLAG | CERT_STORE_READONLY_FLAG |
CERT_SYSTEM_STORE_CURRENT_USER, L"TrustedPeople")))
{
printf("The file store was created successfully.\n");
}
else
{
MyHandleError((char *)"An error occurred during creation of the file store!");
}
if (!(CertStrToNameW(
MY_ENCODING_TYPE,
pszString,
CERT_X500_NAME_STR,
NULL,
NULL,
&cbSize,
NULL)))
{
MyHandleError((char*)"Could not get the length of the BLOB.");
}
if (!(blobEncodedIssuerName.pbData = (LPBYTE)malloc(cbSize)))
{
MyHandleError((char*)"Memory Allocation for the BLOB failed.");
}
blobEncodedIssuerName.cbData = cbSize;
if (!(CertStrToNameW(
MY_ENCODING_TYPE | CERT_NAME_STR_ENABLE_UTF8_UNICODE_FLAG,
pszString,
CERT_X500_NAME_STR,
NULL,
blobEncodedIssuerName.pbData,
&blobEncodedIssuerName.cbData,
NULL)))
{
MyHandleError((char*)"Could not write the blob.");
}
pCertCtx = NULL;
pCertCtx = CertFindCertificateInStore(hFileStore,
X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, 0, CERT_FIND_ISSUER_NAME,
&blobEncodedIssuerName, NULL);
if (pCertCtx == NULL)
{
MyHandleError((char*)"There is no such a certificate in the store\n");
}
else
{
printf("Certificate was found succesfully");
}
}</code></pre>
</div></div></td></tr></table>2019-02-06T11:28:31+03:002019-02-06T11:28:31+03:00Dart_Chiker<table class="content postContainer_Alt" width="100%"><tr><td>Здравствуйте!<br /><br />Пытаюсь на Ubuntu найти сертификат по издателю (Чтобы в идеале искать по CERT_ID), но поиск почему-то не отрабатывает. Код прилагаю.<br />Если же искать таким же образом сертификат по Subject, он его находит. С чем это может быть связано?<br /><br />Да, аналогичный код на Windows отрабатывает без проблем. В хранилище TrustedPeople на Unix используется самый обычный тестовый сертификат выданный вашим УЦ.<br /><br />Заранее благодарю.<br /><div class="code"><strong>Код:</strong><div class="innercode"><pre class="line-numbers"><code class="language-c">int main(){
HCERTSTORE hFileStore;
PCCERT_CONTEXT pCertCtx;
DWORD cbSize;
LPCWSTR pszString = L"E=support@cryptopro.ru, C=RU, L=Moscow, O=CRYPTO-PRO LLC, CN=CRYPTO-PRO Test Center 2";
CERT_NAME_BLOB blobEncodedIssuerName;
if ((hFileStore = CertOpenStore(CERT_STORE_PROV_SYSTEM, 0, 0,
CERT_STORE_OPEN_EXISTING_FLAG | CERT_STORE_READONLY_FLAG |
CERT_SYSTEM_STORE_CURRENT_USER, L"TrustedPeople")))
{
printf("The file store was created successfully.\n");
}
else
{
MyHandleError((char *)"An error occurred during creation of the file store!");
}
if (!(CertStrToNameW(
MY_ENCODING_TYPE,
pszString,
CERT_X500_NAME_STR,
NULL,
NULL,
&cbSize,
NULL)))
{
MyHandleError((char*)"Could not get the length of the BLOB.");
}
if (!(blobEncodedIssuerName.pbData = (LPBYTE)malloc(cbSize)))
{
MyHandleError((char*)"Memory Allocation for the BLOB failed.");
}
blobEncodedIssuerName.cbData = cbSize;
if (!(CertStrToNameW(
MY_ENCODING_TYPE | CERT_NAME_STR_ENABLE_UTF8_UNICODE_FLAG,
pszString,
CERT_X500_NAME_STR,
NULL,
blobEncodedIssuerName.pbData,
&blobEncodedIssuerName.cbData,
NULL)))
{
MyHandleError((char*)"Could not write the blob.");
}
pCertCtx = NULL;
pCertCtx = CertFindCertificateInStore(hFileStore,
X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, 0, CERT_FIND_ISSUER_NAME,
&blobEncodedIssuerName, NULL);
if (pCertCtx == NULL)
{
MyHandleError((char*)"There is no such a certificate in the store\n");
}
else
{
printf("Certificate was found succesfully");
}
}</code></pre>
</div></div></td></tr></table>