Продолжаю эксперименты с ActivityPub

Продолжаю разбираться с протоколом ActivityPub. Перечитал пример в блоге Mastodon и наконец-то разобрался с тем, как сообщение-объект вкладывается в сообщение-действие. У меня-то REST API головного мозга, и я привык, что действие определяется либо HTTP-методом, либо URLом, а в ActivityPub это не так. В результате получается несколько многословно, но зато в стиле 1Л.
Начал писать простейший клиент на PHP для взаимодействия сервер-сервер, который с моего виртуального пользователя на этом сайте пытается отправить сообщение на мой настоящий аккаунт на lor.sh. Но увы, пока что-то делаю не так: получаю ошибку "Public key not found for key http://4xpro.ru/activity_pub/me#main-key", хотя по логам видно, что lor файл скачивает. Видимо, по каким-то причинам не может извлечь из него ключы. Главная сложность в том, что посмотреть, что происходит на сервере, я не могу, разве что поставлю на второй VDS свою копию mastodonа, но это решение на крайний случай.
Еще в процессе тестирования опять столкнулся с тем, что gmdate('r') возвращает дату почти в нужном формате, только часовой пояс выводит как +0000 вместо GMT, из-за чего на приемной стороне не могут ее нормально разобрать. Эх, ну почему нельзя было сделать именно для gmdate нормальную выдачу с GMT? Уже какой раз сталкиваюсь. Приходится идти кривым путем: заменять +0000 на GTM через str_replace, чтобы не возиться с форматом.