Статус: Участник
  Группы: Участники
 Зарегистрирован: 17.05.2017(UTC) Сообщений: 20
  Сказал(а) «Спасибо»: 3 раз Поблагодарили: 1 раз в 1 постах
  
	 
	
     | 
    
        
            
		      
                Добрый день. Прошу помощи стартануть.   Есть задача организации подписания документов на сервере и работа с ЭЦП. Есть несколько вопросов: 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");
}
?>
 
  
            
	  
         
     | 
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
            
        
            
            
    
        
	Статус: Сотрудник
  Группы: Администраторы, Участники Зарегистрирован: 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Само расширение предоставляется в исходных кодах, какие то детали методов всегда можно посмотреть в коде.     | 
 | 
            
	 
        
    
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
    
        
            
            
    
        
	Статус: Новичок
  Группы: Участники
 Зарегистрирован: 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, от обычной строки, до разных конвертов Заранее спасибо  
            
	  
         
     | 
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
            
        
            
            
    
        
	Статус: Сотрудник
  Группы: Участники
 Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,987   Сказал «Спасибо»: 605 раз Поблагодарили: 2351 раз в 1847 постах
  
	 
	
     | 
    
        
            
		      
                Здравствуйте.
  А конфигурация ПО? Номера сборок? Локальные\на сервере...
     | 
 | 
            
	 
        
    
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
    
        
            
            
    
        
	Статус: Сотрудник
  Группы: Участники
 Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,987   Сказал «Спасибо»: 605 раз Поблагодарили: 2351 раз в 1847 постах
  
	 
	
     | 
    
         | 
 | 
            
	 
        
    
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
            
        
            
            
    
        
	Статус: Новичок
  Группы: Участники
 Зарегистрирован: 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)
 | Причина: Не указана  
            
	  
         
     | 
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
    
	                           
	
    
        Быстрый переход
         
	
    
    Вы не можете создавать новые темы в этом форуме.
	
	Вы не можете отвечать в этом форуме.
	
	Вы не можете удалять Ваши сообщения в этом форуме.
	
	Вы не можете редактировать Ваши сообщения в этом форуме.
	
	Вы не можете создавать опросы в этом форуме.
	
	Вы не можете голосовать в этом форуме.
	
	
    
    
        Important Information:
        The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
        
        
More Details
        Close