Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Subscription error - "Invalid raw ECDSA P-256 public key." #95

Open
MkLHX opened this issue Mar 16, 2021 · 3 comments
Open

Subscription error - "Invalid raw ECDSA P-256 public key." #95

MkLHX opened this issue Mar 16, 2021 · 3 comments

Comments

@MkLHX
Copy link

MkLHX commented Mar 16, 2021

Hello!
I'm facing issue about subscription step.
On Firefox

Subscription error. 
Arguments
​
0: DOMException: Invalid raw ECDSA P-256 public key.

On chrome

Subscription error. Arguments [DOMException: Failed to execute 'subscribe' on 'PushManager': The provided applicationServerKey is …, callee: ƒ, Symbol(Symbol.iterator): ƒ]

I generate vapid keys by using python package py-vapid==1.7.1

by using command vapid --gen for public and private keys
my settings.py contains:

INSTALLED_APPS = [
 # /../
     'webpush',
 # /../
]
privk = (
    open(os.path.join(BASE_DIR, "private_key.pem"), "r+")
    .read()
    .strip()
    .split("\n")[1:][:-1]
)
WEBPUSH_VAPID_PRIVATE_KEY = "".join(privk)
pubk = (
    open(os.path.join(BASE_DIR, "public_key.pem"), "r+")
    .read()
    .strip()
    .split("\n")[1:][:-1]
)
WEBPUSH_VAPID_PUBLIC_KEY = "".join(pubk)
WEBPUSH_SETTINGS = {
    "VAPID_PUBLIC_KEY": WEBPUSH_VAPID_PUBLIC_KEY,
    "VAPID_PRIVATE_KEY": WEBPUSH_VAPID_PRIVATE_KEY,
    "VAPID_ADMIN_EMAIL": "[email protected]",
}

I wrote a view to render django template tags:

from django.views.decorators.http import require_http_methods
from django.shortcuts import render, redirect


@require_http_methods(["GET"])
def index(request):
    webpush = {
        "group": "my_group"
    }  # The group_name should be the name you would define.

    return render(request, "push_notification/index.html", {"webpush": webpush})

my template:

{% extends "gui/base.html" %}

{% load webpush_notifications %}

{% block head %}
    <!-- # For django templating engine -->
    {% webpush_header %}
{% endblock %}

{% block body %}
<p> Hello World! </p>
<!-- # For django templating engine -->
{% webpush_button %}
{% endblock %}

in browser:
firefox
image
image

chrome
image
image

My public key is:

-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEONKLXu1hkjwHIYxgERnucAfOjunh
h7ZGtgxNi7kXUU/+jyhHeC6YkTSzpwIkn2q6ibguVmJL5j9BriKgaqst1Q==
-----END PUBLIC KEY-----

My private key is:

-----BEGIN PRIVATE KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgeqyvj6nPSg5QB3rJ
PeNd2woigO31EhxdEjQsDrfBplChRANCAAQ40ote7WGSPAchjGARGe5wB86O6eGH
tka2DE2LuRdRT/6PKEd4LpiRNLOnAiSfarqJuC5WYkvmP0GuIqBqqy3V
-----END PRIVATE KEY-----

in the template:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8" />
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
    <meta content="IE=edge,chrome=1" http-equiv="X-UA-Compatible" />
    <meta content="width=device-width, initial-scale=1, minimum-scale=1.0, shrink-to-fit=no" name="viewport" />
    
    <!-- # For django templating engine -->
   <script id="webpush-js" type="text/javascript" src="/static/webpush/webpush.js"></script>
 
  <meta name="service-worker-js" content="/webpush/service-worker.js">
  <meta name="django-webpush-vapid-key" content="MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEONKLXu1hkjwHIYxgERnucAfOjunhh7ZGtgxNi7kXUU/+jyhHeC6YkTSzpwIkn2q6ibguVmJL5j9BriKgaqst1Q==">
 </head>
 <body>
<p> Hello World! </p>
<!-- # For django templating engine -->

  <button id="webpush-subscribe-button"  data-group="my_group" data-url="/webpush/save_information">
    Subscribe to Push Messaging
  </button>
  <div id="webpush-message" hidden></div>
</body>
 </html>

i don't now how to better investigage on this issue.

@MkLHX
Copy link
Author

MkLHX commented Mar 17, 2021

Ok i find the good way.

In the documentation we have to put public vapid key in settings.

But when i do this i'm facing issue, when i use vapid --applicationServerKey instead that works!

So i think there is a misunderstand in the doc about private key, public key and server key....

@safwanrahman
Copy link
Owner

@MkLHX Thanks. It would be nice if you can update the documentation

@MkLHX
Copy link
Author

MkLHX commented Mar 21, 2021

@safwanrahman yeah why not, but the true question is this is normal you wrote the code with public key use and today i can use it only with the server key?

Maybe i doing mistake.

I'm ok to PR but if do it, for me we have to change every variable name about vapid_public_key to vapid_public_server_key.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants