Как расшифровать уведомление Mastodon Web Push в PHP ⇐ Php
-
Гость
Как расшифровать уведомление Mastodon Web Push в PHP
Я создаю прослушиватель уведомлений PHP Web Push для Mastodon. Я успешно создал подписку, отправив следующие данные публикации на URL-адрес API подписки Mastodon:
$post_data = массив( "подписка" => массив( "endpoint" => $env["endpoint"], // URL конечной точки, где находится PHP-скрипт "ключи" => массив( "p256dh" => $env["vapid_public"], // Открытый ключ "auth" => $env["vapid_private"] // Закрытый ключ ) ), "данные" => массив( "оповещения" => массив( "mention" => true // получать уведомления об упоминаниях ) ) ); Когда я упоминаю или отправляю личное сообщение учетной записи, для которой настроена подписка, сценарий PHP получает запрос POST с уведомлением Web Push. Полезная нагрузка уведомления извлекается с помощью file_get_contents("php://input"). Это двоичные данные.
Мой вопрос теперь заключается в том, как мне расшифровать эти двоичные данные. Я попытался сначала преобразовать полезную нагрузку в шестнадцатеричный формат, а затем передать ее в openssl_decrypt(), но я не уверен, какие ключи использовать, и поэтому я здесь как бы в неведении. Любая помощь приветствуется.
Вот копия заголовков POST, полученных веб-уведомлением от Mastodon. Фактические значения ключей заменяются некоторыми словами из соображений безопасности. Точки [.], идентификаторы [xx=] и точки с запятой[;] остаются на месте.
[Авторизация] => WebPush some_key_1.some_key_2.some_key_3 // Это веб-токен JSON https://web.dev/articles/push-notificat ... _web_token [Крипто-ключ] => dh=crypto_key_1;p256ecdsa=crypto_key_2 [Шифрование] => salt=salt_key [Кодирование контента] => aesgcm [Срочно] => нормально [Ттл] => 172800 [Content-Type] => приложение/октет-поток [Дайджест] => SHA-256=дайджест_ключ [Accept-Encoding] => gzip [Дата] => Ср, 22 ноября 2023 г., 16:02:27 GMT [Агент пользователя] => http.rb/5.1.1 (Mastodon/4.2.1; +https://hidden_url.com/) [Content-Length] => 334 [Соединение] => закрыть [Хост] =>other_hidden_url.com [X-Real-Port] => ххххх [X-Порт] => 443 [X-Https] => вкл. [X-Real-Ip] => скрытый_ip [X-Forwarded-By] =>other_hidden_ip openssl_decrypt() использует следующие параметры:
функция openssl_decrypt( строка $данные, строка $cipher_algo, строка $парольная фраза, int $options = 0, строка $iv = "", строка|ноль $тег = ноль, строка $аад = "" ): строка|ложь Полагаю, сейчас задача состоит в том, чтобы сопоставить ключи из заголовков и ключи, которые я использовал для создания подписки, с этими параметрами. Я пробовал разные комбинации, но пока безуспешно.
Использованная документация:
[*]API Mastodon Web Push: https://docs.joinmastodon.org/methods/push/ [*]openssl_decrypt() PHP: https://www.php.net/manual/en/function. ... ecrypt.php [*]API Mozilla Push: https://developer.mozilla.org/en-US/doc ... I/Push_API
Я создаю прослушиватель уведомлений PHP Web Push для Mastodon. Я успешно создал подписку, отправив следующие данные публикации на URL-адрес API подписки Mastodon:
$post_data = массив( "подписка" => массив( "endpoint" => $env["endpoint"], // URL конечной точки, где находится PHP-скрипт "ключи" => массив( "p256dh" => $env["vapid_public"], // Открытый ключ "auth" => $env["vapid_private"] // Закрытый ключ ) ), "данные" => массив( "оповещения" => массив( "mention" => true // получать уведомления об упоминаниях ) ) ); Когда я упоминаю или отправляю личное сообщение учетной записи, для которой настроена подписка, сценарий PHP получает запрос POST с уведомлением Web Push. Полезная нагрузка уведомления извлекается с помощью file_get_contents("php://input"). Это двоичные данные.
Мой вопрос теперь заключается в том, как мне расшифровать эти двоичные данные. Я попытался сначала преобразовать полезную нагрузку в шестнадцатеричный формат, а затем передать ее в openssl_decrypt(), но я не уверен, какие ключи использовать, и поэтому я здесь как бы в неведении. Любая помощь приветствуется.
Вот копия заголовков POST, полученных веб-уведомлением от Mastodon. Фактические значения ключей заменяются некоторыми словами из соображений безопасности. Точки [.], идентификаторы [xx=] и точки с запятой[;] остаются на месте.
[Авторизация] => WebPush some_key_1.some_key_2.some_key_3 // Это веб-токен JSON https://web.dev/articles/push-notificat ... _web_token [Крипто-ключ] => dh=crypto_key_1;p256ecdsa=crypto_key_2 [Шифрование] => salt=salt_key [Кодирование контента] => aesgcm [Срочно] => нормально [Ттл] => 172800 [Content-Type] => приложение/октет-поток [Дайджест] => SHA-256=дайджест_ключ [Accept-Encoding] => gzip [Дата] => Ср, 22 ноября 2023 г., 16:02:27 GMT [Агент пользователя] => http.rb/5.1.1 (Mastodon/4.2.1; +https://hidden_url.com/) [Content-Length] => 334 [Соединение] => закрыть [Хост] =>other_hidden_url.com [X-Real-Port] => ххххх [X-Порт] => 443 [X-Https] => вкл. [X-Real-Ip] => скрытый_ip [X-Forwarded-By] =>other_hidden_ip openssl_decrypt() использует следующие параметры:
функция openssl_decrypt( строка $данные, строка $cipher_algo, строка $парольная фраза, int $options = 0, строка $iv = "", строка|ноль $тег = ноль, строка $аад = "" ): строка|ложь Полагаю, сейчас задача состоит в том, чтобы сопоставить ключи из заголовков и ключи, которые я использовал для создания подписки, с этими параметрами. Я пробовал разные комбинации, но пока безуспешно.
Использованная документация:
[*]API Mastodon Web Push: https://docs.joinmastodon.org/methods/push/ [*]openssl_decrypt() PHP: https://www.php.net/manual/en/function. ... ecrypt.php [*]API Mozilla Push: https://developer.mozilla.org/en-US/doc ... I/Push_API
Мобильная версия