【发布时间】:2017-05-24 05:23:24
【问题描述】:
我正在尝试在我的应用中使用带有网络推送协议的网络推送通知。为了将 Push API 与 VAPID 一起使用,我需要一个 applicationServerKey。
PushManager subscribe 方法将 VAPID 密钥(仅公钥)作为参数,并提供订阅端点和推送消息的密钥。
为了生成 VAPID 密钥,我一直在使用 node.js(google web-push 包)和 openssl 直到现在。但在我的用例中,VAPID 密钥应该在 Java 中生成并传递给 JavaScript 以从浏览器订阅。
我正在尝试使用 Java 中的以下代码生成 VAPID 密钥。我能够成功创建密钥,但是当我传递生成的公钥(base64 编码的字符串)时,subscribe 方法返回错误消息:
无法注册服务工作者。 DOMException: 执行失败 'PushManager' 上的'subscribe':提供的 applicationServerKey 不是 有效..
请帮我解决这个问题。以下是我的 Java 代码:
ECNamedCurveParameterSpec parameterSpec =
ECNamedCurveTable.getParameterSpec("prime256v1");
KeyPairGenerator keyPairGenerator =
KeyPairGenerator.getInstance("ECDH", "BC");
keyPairGenerator.initialize(parameterSpec);
KeyPair serverKey = keyPairGenerator.generateKeyPair();
PrivateKey priv = serverKey.getPrivate();
PublicKey pub = serverKey.getPublic();`
System.out.println(Base64.toBase64String(pub.getEncoded()));
【问题讨论】:
-
嗨 - 运气好吗?你也可以给我一些指点吗?
标签: java bouncycastle web-push ecdsa vapid