mirror of
https://github.com/crypto-pro-web/crypto-pro-php.git
synced 2025-01-18 11:25:50 +03:00
Доработки и улучшения
This commit is contained in:
parent
8e6ed3b16f
commit
141e439575
@ -228,14 +228,7 @@ class CryptoPro
|
|||||||
*/
|
*/
|
||||||
public static function createAttachedSignature(string $thumbprint, string $unencryptedMessage, string $pin = null)
|
public static function createAttachedSignature(string $thumbprint, string $unencryptedMessage, string $pin = null)
|
||||||
{
|
{
|
||||||
try
|
$cadesCertificate = self::getCadesCertificate($thumbprint);
|
||||||
{
|
|
||||||
$cadesCertificate = self::getCadesCertificateFromStore($thumbprint, CURRENT_USER_STORE);
|
|
||||||
}
|
|
||||||
catch (\Throwable $e)
|
|
||||||
{
|
|
||||||
$cadesCertificate = self::getCadesCertificateFromStore($thumbprint, CONTAINER_STORE);
|
|
||||||
}
|
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -248,7 +241,8 @@ class CryptoPro
|
|||||||
throw new \Exception(ErrorMessageHelper::getErrorMessage($e, 'Ошибка при инициализации подписи'));
|
throw new \Exception(ErrorMessageHelper::getErrorMessage($e, 'Ошибка при инициализации подписи'));
|
||||||
}
|
}
|
||||||
|
|
||||||
$currentDateTime = (new \DateTime())->format('d.m.Y H:i:s');
|
// Дату и время устанавливаем в формате generalizedTime https://docs.cryptopro.ru/pki/cplib/class/cdatetime?id=cdatetime-1
|
||||||
|
$currentDateTime = (new \DateTime())->format('YmdHis.u') . 'Z';
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -289,7 +283,12 @@ class CryptoPro
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
/** @var string $signature */
|
/** @var string $signature */
|
||||||
$signature = $cadesSignedData->SignCades($cadesSigner, PKCS7_TYPE);
|
$signature = $cadesSignedData->SignCades(
|
||||||
|
$cadesSigner,
|
||||||
|
PKCS7_TYPE,
|
||||||
|
false,
|
||||||
|
ENCODE_BASE64
|
||||||
|
);
|
||||||
}
|
}
|
||||||
catch (\Throwable $e)
|
catch (\Throwable $e)
|
||||||
{
|
{
|
||||||
@ -311,14 +310,7 @@ class CryptoPro
|
|||||||
*/
|
*/
|
||||||
public static function createDetachedSignature(string $thumbprint, string $messageHash, string $pin = null)
|
public static function createDetachedSignature(string $thumbprint, string $messageHash, string $pin = null)
|
||||||
{
|
{
|
||||||
try
|
$cadesCertificate = self::getCadesCertificate($thumbprint);
|
||||||
{
|
|
||||||
$cadesCertificate = self::getCadesCertificateFromStore($thumbprint, CURRENT_USER_STORE);
|
|
||||||
}
|
|
||||||
catch (\Throwable $e)
|
|
||||||
{
|
|
||||||
$cadesCertificate = self::getCadesCertificateFromStore($thumbprint, CONTAINER_STORE);
|
|
||||||
}
|
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -332,7 +324,8 @@ class CryptoPro
|
|||||||
throw new \Exception(ErrorMessageHelper::getErrorMessage($e, 'Ошибка при инициализации подписи'));
|
throw new \Exception(ErrorMessageHelper::getErrorMessage($e, 'Ошибка при инициализации подписи'));
|
||||||
}
|
}
|
||||||
|
|
||||||
$currentDateTime = (new \DateTime())->format('d.m.Y H:i:s');
|
// Дату и время устанавливаем в формате generalizedTime https://docs.cryptopro.ru/pki/cplib/class/cdatetime?id=cdatetime-1
|
||||||
|
$currentDateTime = (new \DateTime())->format('YmdHis.u') . 'Z';
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -403,14 +396,7 @@ class CryptoPro
|
|||||||
*/
|
*/
|
||||||
public static function addAttachedSignature(string $thumbprint, string $signedMessage, string $pin = null)
|
public static function addAttachedSignature(string $thumbprint, string $signedMessage, string $pin = null)
|
||||||
{
|
{
|
||||||
try
|
$cadesCertificate = self::getCadesCertificate($thumbprint);
|
||||||
{
|
|
||||||
$cadesCertificate = self::getCadesCertificateFromStore($thumbprint, CURRENT_USER_STORE);
|
|
||||||
}
|
|
||||||
catch (\Throwable $e)
|
|
||||||
{
|
|
||||||
$cadesCertificate = self::getCadesCertificateFromStore($thumbprint, CONTAINER_STORE);
|
|
||||||
}
|
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -423,7 +409,8 @@ class CryptoPro
|
|||||||
throw new \Exception(ErrorMessageHelper::getErrorMessage($e, 'Ошибка при инициализации подписи'));
|
throw new \Exception(ErrorMessageHelper::getErrorMessage($e, 'Ошибка при инициализации подписи'));
|
||||||
}
|
}
|
||||||
|
|
||||||
$currentDateTime = (new \DateTime())->format('d.m.Y H:i:s');
|
// Дату и время устанавливаем в формате generalizedTime https://docs.cryptopro.ru/pki/cplib/class/cdatetime?id=cdatetime-1
|
||||||
|
$currentDateTime = (new \DateTime())->format('YmdHis.u') . 'Z';
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -486,14 +473,7 @@ class CryptoPro
|
|||||||
*/
|
*/
|
||||||
public static function addDetachedSignature(string $thumbprint, string $signedMessage, string $messageHash, string $pin = null)
|
public static function addDetachedSignature(string $thumbprint, string $signedMessage, string $messageHash, string $pin = null)
|
||||||
{
|
{
|
||||||
try
|
$cadesCertificate = self::getCadesCertificate($thumbprint);
|
||||||
{
|
|
||||||
$cadesCertificate = self::getCadesCertificateFromStore($thumbprint, CURRENT_USER_STORE);
|
|
||||||
}
|
|
||||||
catch (\Throwable $e)
|
|
||||||
{
|
|
||||||
$cadesCertificate = self::getCadesCertificateFromStore($thumbprint, CONTAINER_STORE);
|
|
||||||
}
|
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -507,7 +487,8 @@ class CryptoPro
|
|||||||
throw new \Exception(ErrorMessageHelper::getErrorMessage($e, 'Ошибка при инициализации подписи'));
|
throw new \Exception(ErrorMessageHelper::getErrorMessage($e, 'Ошибка при инициализации подписи'));
|
||||||
}
|
}
|
||||||
|
|
||||||
$currentDateTime = (new \DateTime())->format('d.m.Y H:i:s');
|
// Дату и время устанавливаем в формате generalizedTime https://docs.cryptopro.ru/pki/cplib/class/cdatetime?id=cdatetime-1
|
||||||
|
$currentDateTime = (new \DateTime())->format('YmdHis.u') . 'Z';
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -774,7 +755,11 @@ class CryptoPro
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
$cadesCertificates = $cadesCertificates->Find(CERTIFICATE_FIND_SHA1_HASH, $thumbprint);
|
$cadesCertificates = $cadesCertificates->Find(
|
||||||
|
CAPICOM_CERTIFICATE_FIND_TYPE::SHA1_HASH,
|
||||||
|
$thumbprint,
|
||||||
|
false
|
||||||
|
);
|
||||||
|
|
||||||
$cadesCertificatesCount = $cadesCertificates->Count();
|
$cadesCertificatesCount = $cadesCertificates->Count();
|
||||||
|
|
||||||
@ -783,6 +768,7 @@ class CryptoPro
|
|||||||
throw new \Exception('Сертификат с отпечатком: "' . $thumbprint . '" не найден в хранилище');
|
throw new \Exception('Сертификат с отпечатком: "' . $thumbprint . '" не найден в хранилище');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Считаем, что первый сертификат, найденный по отпечатку - наш
|
||||||
$cadesCertificate = $cadesCertificates->Item(1);
|
$cadesCertificate = $cadesCertificates->Item(1);
|
||||||
}
|
}
|
||||||
catch (\Throwable $e)
|
catch (\Throwable $e)
|
||||||
@ -830,4 +816,36 @@ class CryptoPro
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Возвращает сертификат в формате Cades по отпечатку.
|
||||||
|
* Сначала ищет в хранилище пользователя, потм - в хранилище закрытого ключа
|
||||||
|
*
|
||||||
|
* @param string $thumbprint
|
||||||
|
*
|
||||||
|
* @throws \Exception
|
||||||
|
* @return \CPCertificate
|
||||||
|
*/
|
||||||
|
protected static function getCadesCertificate(string $thumbprint)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
$cadesCertificate = self::getCadesCertificateFromStore($thumbprint, CURRENT_USER_STORE);
|
||||||
|
}
|
||||||
|
catch (\Throwable $e)
|
||||||
|
{
|
||||||
|
$previousException = $e;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
$cadesCertificate = self::getCadesCertificateFromStore($thumbprint, CONTAINER_STORE);
|
||||||
|
}
|
||||||
|
catch (\Throwable $e)
|
||||||
|
{
|
||||||
|
throw new \Exception($e->getMessage(), $e->getCode(), $previousException);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $cadesCertificate;
|
||||||
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user