Я пытаюсь создать подпись PKI, используя закрытый ключ в PHP.
Это следующие правила для создания подписи
Используйте алгоритм SHA-2 для генерации хэша базовой строки подписи.
Подпишите хэшированное значение, используя закрытый ключ приложения.
Base64-кодирует значение подписи. ПРИМЕЧАНИЕ. Кодировка Base64 не должна включать CRLF (возврат каретки/перевод строки) через каждые 72 символа, что является частью строгой кодировки Base64. Вместо этого вся строка в кодировке Base64 должна быть без разрывов строк.
Установите строку в качестве значения параметра подписи.
Пример кода Nodejs:
var signature = crypto.createSign('RSA-SHA256')
.update(baseString)
.sign(signWith, 'base64');
Java-код
String baseString = "Constructed base string";
Signature sig = Signature.getInstance("RSA-SHA256");
sig.initSign(privateKey); // Get private key from keystone
sig.update(baseString.getBytes());
byte[] signedData = sig.sign();
String finalStr = Base64.getEncoder().encodeToString(signedData);
Я пытаюсь преобразовать этот код в PHP, моя базовая строка верна.
// $data = "BaseString";
// $private_key_pem = openssl_pkey_get_private("file://".$path."privateKey.pem",'passphrase');
$hash = hash('sha256', $data);
$result = openssl_sign($hash, $signature, $private_key_pem,'RSA-SHA256');
$signature = base64_encode($signature);
Это верно? Если да, ответ API — недействительная подпись PKI.