繁体   English   中英

如何使用Node.js创建与LetsEncrypt兼容的JWT?

[英]How to create a LetsEncrypt compatible JWT with Node.js?

我正在尝试使用Node.js将JSON Web令牌发布到Lets Encrypt 新的注册端点 如何创建此令牌? 这是我正在尝试的一些代码,试图生成一个令牌,Let's Encrypt的网络服务器将接受该令牌:

var jwt = require('jsonwebtoken');    
var jws = require('jws');
var crypto = require('crypto');
var pem = require('pem');
var jose = require('node-jose');
var keystore = jose.JWK.createKeyStore();

var key;

var props = {
  //kid: 'gBdaS-adsfasdfasdfsa',
  alg: 'HS256',
  //use: 'enc',
    n: "pK7LuT2hxkWnYRl1Tcw9iAy9-_TqvHp2wh6EcHq_wglsNmtpxAe9gNGZevWu6T2O1aEmPYkgy7Q1meKNifenFuWicDcSSenkMM0JApfdveiVqjBA81EL0Y76T8i2JolggGXbiSa_ZRGwG-0FPDSIX3Jy5mQgOn-t-zrhD9yLDn2N7zzFqCBOtxzrwz1HEtN8QWZAFAzOceyyL6C791lGOk9SYYekxyuZkwkzhDEsoqR7fN6hmu6IfIU8hF5kt8M_Gef30wt5dUESvcTNdmQmq_L1QYA8qYO6-T0mC0zIpHpwQnANYOSZBCz1uE-vwS17MlfnUwGkPHJXWThlMZqZmQ",
    e: "AQAB"
};
keystore.generate("oct", 256, props).
        then(function(result) {   

          console.log(result);

         var obj = {
              header: {
                alg: "HS256",
                jwk: result,
                nonce: "kajdfksajdf39393"
              },
              payload: {
                  "resource": "new-reg",
                  "contact": [
                    "mailto:cert-admin@example.com",
                    "tel:+12025551212"
                  ]
                },
              secret: 'has a van',
            };

          const signature = jws.sign(obj);     
            console.log(signature);    
        });
}

实际上,这确实会生成有效的JWT:

但是,当我尝试将其发布到新的注册端点时,出现以下错误:

{  "type": "urn:acme:error:malformed",   "detail": "Parse error reading JWS",   "status": 400 }

测试代码是我在Google搜索了几个小时后整理而成的代码片段的集合。 我了解有可以运行的LetsEncrypt服务器,但不想这样做 我实际上想直接在Node.js中生成请求和回调,因为我想从AWS Lambda函数(此处不涉及服务器)运行所有这些请求和回调。

我确实找到了一个JWT令牌的示例,该示例似乎确实有效 我说“ sort of”是因为该示例的响应是:

{  "type": "urn:acme:error:badNonce",  "detail": "JWS has invalid anti-replay nonce 5H63XwyOHKpAETFpHR8stXSkhkqhlAY1xV7VsCnOrs",  "status": 400}

这至少告诉我正在解析JWT令牌并正在查看Nonce。 当我解码此JWT时,会看到以下内容:

解码的JWT

看起来这个家伙使用RSA 256创建了这个JWT。 我不确定值“ e”和“ n”来自何处?

如何使用Node.JS / Jose重新创建上述工作示例?

我认为这里的答案是仅使用letencrypt node.js NPM软件包。 无需从头开始开发ACME协议,因为该库似乎可以做到。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM