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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Fridz55  
#1 Оставлено : 17 октября 2017 г. 20:10:04(UTC)
Fridz55

Статус: Участник

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

Сказал(а) «Спасибо»: 3 раз
Поблагодарили: 1 раз в 1 постах
Добрый день. Прошу помощи стартануть.Think
Есть задача организации подписания документов на сервере и работа с ЭЦП. Есть несколько вопросов:

1) По документации установили расширение для PHP. Но при запуске тестового файла возникает ошибка "The system cannot find the file specified. (0x80070002)". В чем может быть проблема?
2) Объяснте мне пжлс для чего устаналивается сертификат в коде и как это будет работать на боевой машине?
3) Может кто-то встречал документацию или хорошие статьи по php расширению крипто про?

Спасибо

Код:
Код:
<?php
//Вспомогательные функции предварительной инициализации
function SetupStore($location, $name, $mode)
{
    $store = new CPStore();
    $store->Open($location, $name, $mode);
    return $store;
}

function SetupCertificates($location, $name, $mode)
{
    $store = SetupStore($location, $name, $mode);
    $certs = $store->get_Certificates();
    return $certs;

}

function SetupCertificate($location, $name, $mode,
                           $find_type, $query, $valid_only,
                           $number)
{
    $certs = SetupCertificates($location, $name, $mode);
    if($find_type != NULL)
    {
        $certs = $certs->Find($find_type, $query, $valid_only);
        return $certs->Item($number);
    }
    else
    {
        $cert = $certs->Item($number);
        return $cert;
    }
}

function test_CPSignedData_Sign_Verify()
{
    try{
        $content = "test content";
        $address = "http://testca.cryptopro.ru/tsp/tsp.srf";
        $cert = SetupCertificate(CURRENT_USER_STORE, "My", STORE_OPEN_READ_ONLY,
                                 CERTIFICATE_FIND_SUBJECT_NAME, "Test", 0,
                                 1);

        if(!$cert)
            return "Certificate not found";
        $signer = new CPSigner();
        $signer->set_TSAAddress($address);
        $signer->set_Certificate($cert);

        $sd = new CPSignedData();
        $sd->set_ContentEncoding(1);
        $sd->set_Content(base64_encode($content));

        $sm = $sd->SignCades($signer, 1, false, 0);
        printf("Signature is:\n");
        printf($sm);
        printf("\n");
        $sd->Verify($sm, 0, VERIFY_SIGNATURE_ONLY);
        return 1;
    }catch(Exception $e)
    {
        printf($e->getMessage());
    }
}

if(test_CPSignedData_Sign_Verify() == 1)
{
    printf("TEST OK\n");
}else
{
    printf("TEST FAIL\n");
}

?>
Offline cross  
#2 Оставлено : 18 октября 2017 г. 10:54:02(UTC)
Анатолий Беляев

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

Группы: Администраторы, Участники
Зарегистрирован: 24.11.2009(UTC)
Сообщений: 965
Откуда: Crypto-Pro

Сказал(а) «Спасибо»: 3 раз
Поблагодарили: 174 раз в 152 постах
1. Тест сделан для проверки работы расширения после установки. Он создает и проверяет подпись. Для создания подписи на сервере требуется установленный сертификат и соответствующий ему закрытый ключ.
Именно он скорее всего у вас и не находится. Пример предполагает что есть сертификат с именем "Test". Именно его он у вас и не находит. Имя "Test" можно поменять на любое другое.
2. Если вы про код примера, то он не устанавливается и ищется. Он нужен для создания подписи.
3. Отдельной документации на расширение нет. Все его обьекты повторяют обьекты из "ЭЦП Browser plug-in" с точностью до способа вызова. Описание обьектов можно посмотреть по ссылке http://cpdn.cryptopro.ru...ades/cadescom_class.html
Само расширение предоставляется в исходных кодах, какие то детали методов всегда можно посмотреть в коде.
Техническую поддержку оказываем тут.
Наша база знаний.
Наша страничка в Instagram.
Offline JackRiSilver  
#3 Оставлено : 17 мая 2024 г. 17:09:05(UTC)
JackRiSilver

Статус: Новичок

Группы: Участники
Зарегистрирован: 17.05.2024(UTC)
Сообщений: 2
Российская Федерация

Столкнулся с такой же проблемой. Необходимо осуществить подпись на сервере. Плагины крипто про, .net sdk установлены. Сертификат также присутствует. При попытке создать экземпляр CPSigner вылетает ошибка:
The system cannot find the file specified. (Exception from HRESULT: 0x80070002) at CAdESCOM.CPSignerClass.set_KeyPin(String pVal)
Причем этот же код спокойно проходит Unit-тесты и на локальном сервере все отлично работает.

Вот код:
Код:

public class CrypterService
{
    public byte[] MakeSign(byte[] data, string thumbprint, string pin)
    {
        string signature = "";
        string tspServerAddress = @"http://qs.cryptopro.ru/tsp/tsp.srf";

        CAdESCOM.CPStore pStore = new CAdESCOM.CPStore();
        pStore.Open(CAPICOM.CAPICOM_STORE_LOCATION.CAPICOM_LOCAL_MACHINE_STORE, "MY", CAPICOM.CAPICOM_STORE_OPEN_MODE.CAPICOM_STORE_OPEN_READ_ONLY | CAPICOM.CAPICOM_STORE_OPEN_MODE.CAPICOM_STORE_OPEN_EXISTING_ONLY);
        CAPICOM.ICertificates certificatesFromStore = pStore.Certificates;
        CAPICOM.Certificate certificate = GetCertificates(certificatesFromStore).Find(x=> x.Thumbprint.ToLower() == thumbprint.ToLower());

        CPSigner cpsigner = new CPSigner
        {
            Certificate = certificate,
            //KeyPin = pin,
            KeyPin = Encoding.ASCII.GetString(Encoding.Unicode.GetBytes(pin)),
            TSAAddress = tspServerAddress,
            Options = CAPICOM_CERTIFICATE_INCLUDE_OPTION.CAPICOM_CERTIFICATE_INCLUDE_WHOLE_CHAIN
        };
        CadesSignedData cadesSignedData = new CadesSignedData
        {
            ContentEncoding = CADESCOM_CONTENT_ENCODING_TYPE.CADESCOM_BASE64_TO_BINARY,
            Content = Convert.ToBase64String(data)
        };

        signature = cadesSignedData.SignCades(cpsigner, CADESCOM_CADES_TYPE.CADESCOM_CADES_BES, true, CAdESCOM.CAPICOM_ENCODING_TYPE.CAPICOM_ENCODE_BASE64);
        cadesSignedData.VerifyCades(signature, CADESCOM_CADES_TYPE.CADESCOM_CADES_BES, true);

        return Convert.FromBase64String(signature);
    }

    private List<CAPICOM.Certificate> GetCertificates(ICertificates certificates)
    {
        List<CAPICOM.Certificate> certs = new List<Certificate>();
        for (int i = 0; i < certificates.Count; i++)
        {
            try
            {
                certs.Add((CAPICOM.Certificate)certificates[i]);
            }
            catch { }
        }
        return certs;
    }
}


При том, я разными способами пытался присвоить значение к KeyPin, от обычной строки, до разных конвертов
Заранее спасибо
Offline Андрей *  
#4 Оставлено : 17 мая 2024 г. 17:26:43(UTC)
Андрей *

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

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

Сказал «Спасибо»: 549 раз
Поблагодарили: 2207 раз в 1722 постах
Здравствуйте.

А конфигурация ПО? Номера сборок? Локальные\на сервере...
Техническую поддержку оказываем тут
Наша база знаний
Offline Андрей *  
#5 Оставлено : 17 мая 2024 г. 17:33:22(UTC)
Андрей *

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

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

Сказал «Спасибо»: 549 раз
Поблагодарили: 2207 раз в 1722 постах

KeyPin появился в ICPSigner4
cadescom_interface/icpsigner4keypin
Техническую поддержку оказываем тут
Наша база знаний
Offline JackRiSilver  
#6 Оставлено : 17 мая 2024 г. 17:53:35(UTC)
JackRiSilver

Статус: Новичок

Группы: Участники
Зарегистрирован: 17.05.2024(UTC)
Сообщений: 2
Российская Федерация

Цитата:
А конфигурация ПО? Номера сборок? Локальные\на сервере...


Локальные:
КриптоПро .NET SDK 2.0.8586.0
КриптоПро CSP 5.0.12000

Сервер:
CryptoPro .NET Server 2.0.8586.0
CryptoPro CSP 5.0.12500

Для подписания я использую (и локально, и на сервере) библиотеки Interop.CAdESCOM.dll (ver 1.0.0.0) и Interop.CAPICOM (ver 2.1.0.0) (ну или то, что мне говорит винда)


Цитата:
KeyPin появился в ICPSigner4
cadescom_interface/icpsigner4keypin


Да, и я так понимаю, что CPSigner (он же CPSignerClass) реализует аж ICPSigner6, CPSigner, ICPSigner5, ICPSigner4, ICPSigner3, ICPSigner2, ICPSigner, ISigner2, ICSigner

Отредактировано пользователем 17 мая 2024 г. 22:53:25(UTC)  | Причина: Не указана

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