Pre-loader


Підпис документів в PHP

Використання OpenSSL для підпису

Щоб підписати документи в PHP, ви можете використовувати бібліотеку OpenSSL, яка дозволяє створювати та перевіряти цифрові підписи. Ось кроки, які вам слід зробити:

  1. Встановіть бібліотеку OpenSSL, якщо вона ще не встановлена на вашому сервері.
  2. Створіть приватний та публічний ключі. Ви можете згенерувати їх за допомогою командного рядка: 
    openssl genpkey -algorithm RSA -out private_key.pem -pkeyopt rsa_keygen_bits:2048
    openssl rsa -pubout -in private_key.pem -out public_key.pem
    

  3. Створіть функції для створення та перевірки цифрового підпису: 
    function create_signature($data, $private_key_pem) {
        $private_key = openssl_pkey_get_private($private_key_pem);
        openssl_sign($data, $signature, $private_key, OPENSSL_ALGO_SHA256);
        openssl_free_key($private_key);
        return base64_encode($signature);
    }
    
    function verify_signature($data, $signature, $public_key_pem) {
        $public_key = openssl_pkey_get_public($public_key_pem);
        $decoded_signature = base64_decode($signature);
        $result = openssl_verify($data, $decoded_signature, $public_key, OPENSSL_ALGO_SHA256);
        openssl_free_key($public_key);
        return $result === 1;
    }
    

  4. Використовуйте ці функції для підпису та перевірки даних: 
    // Завантажте ваші ключі
    $private_key_pem = file_get_contents(`private_key.pem`);
    $public_key_pem = file_get_contents(`public_key.pem`);
    
    // Дані, які ви хочете підписати
    $data = `Це тестовий документ.`;
    
    // Створіть цифровий підпис
    $signature = create_signature($data, $private_key_pem);
    echo "Підпис: $signature
    ";
    
    // Перевірте цифровий підпис
    $is_valid = verify_signature($data, $signature, $public_key_pem);
    echo "Підпис вірний? " . ($is_valid ? `Так` : `Ні`) . "
    ";
    

Це приклад використання OpenSSL для створення та перевірки цифрових підписів в PHP. Зверніть увагу, що вам потрібно зберігати ваш приватний ключ у безпечному місці та передавати лише публічний ключ тим, хто потребує перевірки підписів.

Електронний підпис від українських сертифікаційних центрів

Щоб підписати документи за допомогою цифрового підпису від українських сертифікаційних центрів у PHP, вам слід спочатку отримати цифровий сертифікат від відповідного українського сертифікаційного центру. Після цього ви можете використовувати такі програмні бібліотеки, як OpenSSL або Cryptography, для роботи з підписами.

У цьому прикладі ми продемонструємо, як підписати документ в PHP за допомогою бібліотеки OpenSSL і приватного ключа, який був отриманий разом з сертифікатом.

  1. Встановіть бібліотеку OpenSSL, якщо вона ще не встановлена на вашому сервері.
  2. Отримайте приватний ключ та сертифікат від українського сертифікаційного центру. Приватний ключ має бути у форматі PEM, а сертифікат - у форматі X.509.
  3. Створіть функцію для створення підпису: 
    function create_signature($data, $private_key_pem) {
        $private_key = openssl_pkey_get_private($private_key_pem);
        openssl_sign($data, $signature, $private_key, OPENSSL_ALGO_SHA256);
        openssl_free_key($private_key);
        return base64_encode($signature);
    }
    

  4. Використовуйте функцію для підпису даних: 

    // Завантажте ваш приватний ключ
    $private_key_pem = file_get_contents(`private_key.pem`);
    
    // Дані, які ви хочете підписати
    $data = `Це тестовий документ.`;
    
    // Створіть цифровий підпис
    $signature = create_signature($data, $private_key_pem);
    echo "Підпис: $signature
    ";
    

    Цей приклад демонструє створення цифрового підпису в PHP за допомогою приватного ключа, отриманого від українського сертифікаційного центру. Зверніть увагу, що вам потрібно зберігати ваш приватний ключ у безпечному місці та не передавати його стороннім особам. 

Електронний підпис ключами Приватбанк

ПриватБанк надає послуги електронного підпису через свій сервіс "Електронна цифрова підпис" (ЕЦП). Для підписання документів ключем ПриватБанку в PHP, вам потрібно зробити наступне:

  1. Зареєструйтеся в сервісі ЕЦП ПриватБанку та отримайте відповідний ключ і сертифікат. Приватний ключ повинен бути у форматі PEM, а сертифікат - у форматі X.509.
  2. Встановіть на сервері бібліотеку OpenSSL, якщо ще не встановлено.
  3. Створіть функцію для створення підпису: 
    function create_signature($data, $private_key_pem) {
        $private_key = openssl_pkey_get_private($private_key_pem);
        openssl_sign($data, $signature, $private_key, OPENSSL_ALGO_SHA256);
        openssl_free_key($private_key);
        return base64_encode($signature);
    }
    

  4. Використовуйте функцію для підпису даних:
    // Завантажте ваш приватний ключ
    $private_key_pem = file_get_contents(`private_key.pem`);
    
    // Дані, які ви хочете підписати
    $data = `Це тестовий документ.`;
    
    // Створіть цифровий підпис
    $signature = create_signature($data, $private_key_pem);
    echo "Підпис: $signature
    ";
    

Цей приклад демонструє створення цифрового підпису в PHP за допомогою приватного ключа, отриманого від сервісу ЕЦП ПриватБанку. Зверніть увагу, що вам потрібно зберігати ваш приватний ключ у безпечному місці та не передавати його стороннім особам. Щоб перевірити підпис, вам потрібно використовувати публічний ключ, відповідний приватному ключу використовуваному для створення підпису.

Автор: Рудюк С.А. 2023. K2 Cloud ERP.