From e7e84690ad59dc97441ba9a2e554912fd861a6b9 Mon Sep 17 00:00:00 2001 From: "a.dubenko" Date: Wed, 31 Aug 2022 13:40:40 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=20=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=20=D0=B4=D0=BB=D1=8F=20?= =?UTF-8?q?curl-=D0=B7=D0=B0=D0=BF=D1=80=D0=BE=D1=81=D0=BE=D0=B2=20=D1=81?= =?UTF-8?q?=20=D0=B8=D1=81=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=D0=BC=20=D0=B3=D0=BE=D1=81=D1=82=D0=BE=D0=B2?= =?UTF-8?q?=D1=8B=D1=85=20=D1=81=D0=B5=D1=80=D1=82=D0=B8=D1=84=D0=B8=D0=BA?= =?UTF-8?q?=D0=B0=D1=82=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CryptoProCli.php | 40 ++++++++++++++++++++++++++++++++++++++++ README.md | 3 ++- 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/CryptoProCli.php b/CryptoProCli.php index 5102c83..275f9a8 100644 --- a/CryptoProCli.php +++ b/CryptoProCli.php @@ -31,6 +31,11 @@ class CryptoProCli */ public string $certmgrExec = '/opt/cprocsp/bin/amd64/certmgr'; + /** + * @var string Путь к исполняемому файлу curl КриптоПро + */ + public string $curlExec = '/opt/cprocsp/bin/amd64/curl'; + public function __construct(bool $nochain = false) { $this->nochain = $nochain; @@ -256,4 +261,39 @@ public function verifyFileDetached(string $fileSign, string $fileToBeSigned, str throw new Cli("Неожиданный результат $shellCommand: \n$result"); } } + + /** + * Curl-запросы с использованием гостовых сертификатов + * + * + * @param string $url + * @param string|array $thumbprint + * @param string $method + * @param string|null $bearer + * @param string|null $contentType + * @param string|null $data + * @return bool|string + */ + public function proxyCurl( + string $url, + string|array $thumbprint, + string $method = 'GET', + string $bearer = null, + string $contentType = null, + string $data = null + ): bool|string + { + list($hash, $pin) = is_array($thumbprint) ? $thumbprint : [$thumbprint, '']; + $shellCommand = self::getExec($this->curlExec) + . ' -k -s -X ' . $method + . ' ' . $url + . ' --cert-type CERT_SHA1_HASH_PROP_ID:CERT_SYSTEM_STORE_CURRENT_USER:My' + . ' --cert ' . $hash + . ($pin ? ' --pass ' . $pin : '') + . ($bearer ? ' --header \"Authorization: Bearer ' . $bearer . '\"' : '') + . ($contentType ? ' --header \"Content-Type: ' . $contentType . '\"' : '') + . ($data ? ' --data \'' . str_replace("'", "'\''", $data) . '\'' : ''); + + return shell_exec($shellCommand); + } } diff --git a/README.md b/README.md index 2175047..c23dd6a 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ `composer require nikserg/cryptoprocli` -В свойстве `$cryptcpExec` объекта CryptoProCli хранится путь к утилите `cryptcp`. В свойстве `$certmgrExec` объекта CryptoProCli хранится путь к утилите `cryptcp`. Пути по умолчанию подходят для Linux-систем. Для Windows-систем пути нужно изменить. +В свойстве `$cryptcpExec` объекта CryptoProCli хранится путь к утилите `cryptcp`. В свойстве `$certmgrExec` объекта CryptoProCli хранится путь к утилите `cryptcp`. В свойстве `$curlExec` объекта CryptoProCli хранится путь к утилите `curl`. Пути по умолчанию подходят для Linux-систем. Для Windows-систем пути нужно изменить. ## Конструктор объекта CryptoProCli @@ -28,3 +28,4 @@ * `addSignToFile(string $file, string $thumbprint)` - Добавить подпись в файл, уже содержащий подпись. * `verifyFile(string $file)` - Проверяет корректность всех подписей, наложенных на файл. В случае ошибки выкидывает исключение, если все хорошо, ничего не происходит. * `verifyFileContent(string $file)` - Аналогично verifyFile, но по содержимому. +* `proxyCurl(string $url, string|array $thumbprint, string $method = 'GET', string $bearer = null, string $contentType = null, string $data = null)` - Curl-запросы с использованием гостовых сертификатов