Binascii.Error: Неверная base64-кодированная строка: количество символов данных (41) не может быть на 1 больше, чем кратно 4

Я пытаюсь использовать py-vapid, pywebpush и django-push-notifications для отправки уведомлений через Webpush. Когда я пытаюсь отправить тестовое уведомление с сайта администратора django, я получаю в консоли такой лог отслеживания:

Кажется, что он говорит, что мои ключи не имеют правильного формата для преобразования в Base64, но я проверил документацию pywebpush, и мои ключи имеют правильный формат VAPID EC2 private key PEM file. Они были сгенерированы с помощью py-vapid следующим образом:

import os
from cryptography.hazmat.primitives.serialization import Encoding, PrivateFormat, NoEncryption, PublicFormat
from py_vapid import Vapid
import base64

PROJECT_ROOT = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

# Generate VAPID key pair
vapid = Vapid()
vapid.generate_keys()

# Get public and private keys for the vapid key pair
vapid.save_public_key(os.path.join(PROJECT_ROOT, "keys", "webpush", "public_key.pem"))
public_key_bytes = vapid.public_key.public_bytes(Encoding.X962, PublicFormat.UncompressedPoint)

vapid.save_key(os.path.join(PROJECT_ROOT, "keys", "webpush", "private_key.pem"))


# Convert the public key to applicationServerKey format
application_server_key = base64.urlsafe_b64encode(public_key_bytes).replace(b'=', b'').decode('utf8')

with open(os.path.join(PROJECT_ROOT, "keys", "webpush", "ApplicationServerKey.key"), "w") as f:
    f.write(application_server_key)

Вот тестовые ключи, о которых идет речь:

-----BEGIN PRIVATE KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgFCZ0WxsNENwKK3Pf
c0HFZPDlr/KAmjIwB6Hz/OdH/YKhRANCAASFpOW98Q4xfCjD0Taog9ZstRQgS+Ch
L7HoOBGHFZAQwpEd83Qt58bnUCIZFwMZc4tyHKV+b0UxM2cMzm8pMI4z
-----END PRIVATE KEY-----

-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEhaTlvfEOMXwow9E2qIPWbLUUIEvg
oS+x6DgRhxWQEMKRHfN0LefG51AiGRcDGXOLchylfm9FMTNnDM5vKTCOMw==
-----END PUBLIC KEY-----

Я пытался сгенерировать ключи вручную с помощью OpenSSL, но они все равно не работают.

Вернуться на верх