节点:letsencrypt-express 模块在使用 http 和 https 节点服务器时不工作
Node: letsencrypt-express module not working while using http and https node server
我试图在不使用像 Nginx 这样的反向代理的情况下使用 Letsencrypt,我在 npm 上发现了一个名为 letsencrypt-express (greenlock-express) 的模块。但我无法让它工作。
工作示例:
var express = require('express')
var letsencript = require('greenlock-express')
var leclg = require('le-challenge-fs')
var lestore = require('le-store-certbot')
var http = require('http');
var https = require('https');
var redHttps = require('redirect-https')
var app = express();
app.get('/', (req, res) => {
res.send('Ok Working');
})
var lex = letsencript.create({
server: 'staging',
// agreeTos: true,
approveDomains: (opts, certs, cb) => {
if (certs) {
// change domain list here
opts.domains = ['10hd.in']
} else {
// change default email to accept agreement
opts.email = 'test@gmail.com',
opts.agreeTos = true;
}
cb(null, { options: opts, certs: certs });
},
// app: app,
// challenges: { 'http-01': leclg.create({ webrootPath: '/tmp/acme-challenges' }) },
// store: lestore.create({ webrootPath: '/tmp/acme-challenges' })
}).listen(80, 443);
上面的示例按预期工作。将 http 重定向到 https 并从 Letsencript 登台服务器颁发证书。并将它们存储在 ~/letsencript 文件夹中。
这就是我想要但没有用的东西。
var express = require('express')
var letsencript = require('greenlock-express')
var leclg = require('le-challenge-fs')
var lestore = require('le-store-certbot')
var http = require('http');
var https = require('https');
var redHttps = require('redirect-https')
var app = express();
app.get('/', (req, res) => {
res.send('Ok Working');
})
var lex = letsencript.create({
server: 'staging',
// agreeTos: true,
approveDomains: (opts, certs, cb) => {
if (certs) {
// change domain list here
opts.domains = ['10hd.in']
} else {
// change default email to accept agreement
opts.email = 'test@gmail.com',
opts.agreeTos = true;
}
cb(null, { options: opts, certs: certs });
},
// app: app,
// challenges: { 'http-01': leclg.create({ webrootPath: '/tmp/acme-challenges' }) },
// store: lestore.create({ webrootPath: '/tmp/acme-challenges' })
})
// .listen(80, 443);
const middlewareWrapper = lex.middleware;
// redHttps()
http.createServer(lex.middleware(redHttps())).listen(80, ()=> {
console.log("Listening for ACME http-01 challenges");
});
//
https.createServer(
lex.httpsOptions,
lex.middleware(app)
).listen(433, () => {
console.log("Listening for ACME tls-sni-01 challenges and serve app");
});
我想通过 https 节点模块为服务器提供服务。并想在 .listen() 函数中提供的回调中做一些事情。
但它甚至没有创建 let's encrypt the folder in home dir.
控制台输出:
bubundas17@instance-2:~/test$ sudo node app.js
le.challenges[tls-sni-01].loopback should be defined as function (opts, domain, token, cb) { ... } and should prove (by external means) that the ACME server challenge 'tls-sni-01' will succeed
Listening for ACME http-01 challenges
Listening for ACME tls-sni-01 challenges and serve app
我自己解决了这个问题。 "greenlock-express" 只是 "greenlock" 模块的拦截器。
这是一个工作代码。
const http = require('http');
const https = require('https');
const redirectHttps = require('redirect-https')
var app = require('express')();
app.get('/', (req, res) => {
res.send("Test Server")
})
var le = require('greenlock').create({
server: 'staging',
configDir: 'certs/etc',
approveDomains: (opts, certs, cb) => {
if (certs) {
opts.domains = ['10hd.in']
} else {
opts.email = 'test@gmail.com',
opts.agreeTos = true;
}
cb(null, {
options: opts,
certs: certs
});
},
});
http.createServer(le.middleware(redirectHttps())).listen(80, function() {
console.log("Server Running On http" + 80);
})
https.createServer(le.httpsOptions, le.middleware(app)).listen(443, function() {
console.log("Server Running On https" + 443);
})
我不知道为什么这段代码有效,为什么以前的代码无效!但是代码可以运行,这就够了!
我试图在不使用像 Nginx 这样的反向代理的情况下使用 Letsencrypt,我在 npm 上发现了一个名为 letsencrypt-express (greenlock-express) 的模块。但我无法让它工作。
工作示例:
var express = require('express')
var letsencript = require('greenlock-express')
var leclg = require('le-challenge-fs')
var lestore = require('le-store-certbot')
var http = require('http');
var https = require('https');
var redHttps = require('redirect-https')
var app = express();
app.get('/', (req, res) => {
res.send('Ok Working');
})
var lex = letsencript.create({
server: 'staging',
// agreeTos: true,
approveDomains: (opts, certs, cb) => {
if (certs) {
// change domain list here
opts.domains = ['10hd.in']
} else {
// change default email to accept agreement
opts.email = 'test@gmail.com',
opts.agreeTos = true;
}
cb(null, { options: opts, certs: certs });
},
// app: app,
// challenges: { 'http-01': leclg.create({ webrootPath: '/tmp/acme-challenges' }) },
// store: lestore.create({ webrootPath: '/tmp/acme-challenges' })
}).listen(80, 443);
上面的示例按预期工作。将 http 重定向到 https 并从 Letsencript 登台服务器颁发证书。并将它们存储在 ~/letsencript 文件夹中。
这就是我想要但没有用的东西。
var express = require('express')
var letsencript = require('greenlock-express')
var leclg = require('le-challenge-fs')
var lestore = require('le-store-certbot')
var http = require('http');
var https = require('https');
var redHttps = require('redirect-https')
var app = express();
app.get('/', (req, res) => {
res.send('Ok Working');
})
var lex = letsencript.create({
server: 'staging',
// agreeTos: true,
approveDomains: (opts, certs, cb) => {
if (certs) {
// change domain list here
opts.domains = ['10hd.in']
} else {
// change default email to accept agreement
opts.email = 'test@gmail.com',
opts.agreeTos = true;
}
cb(null, { options: opts, certs: certs });
},
// app: app,
// challenges: { 'http-01': leclg.create({ webrootPath: '/tmp/acme-challenges' }) },
// store: lestore.create({ webrootPath: '/tmp/acme-challenges' })
})
// .listen(80, 443);
const middlewareWrapper = lex.middleware;
// redHttps()
http.createServer(lex.middleware(redHttps())).listen(80, ()=> {
console.log("Listening for ACME http-01 challenges");
});
//
https.createServer(
lex.httpsOptions,
lex.middleware(app)
).listen(433, () => {
console.log("Listening for ACME tls-sni-01 challenges and serve app");
});
我想通过 https 节点模块为服务器提供服务。并想在 .listen() 函数中提供的回调中做一些事情。 但它甚至没有创建 let's encrypt the folder in home dir.
控制台输出:
bubundas17@instance-2:~/test$ sudo node app.js
le.challenges[tls-sni-01].loopback should be defined as function (opts, domain, token, cb) { ... } and should prove (by external means) that the ACME server challenge 'tls-sni-01' will succeed
Listening for ACME http-01 challenges
Listening for ACME tls-sni-01 challenges and serve app
我自己解决了这个问题。 "greenlock-express" 只是 "greenlock" 模块的拦截器。
这是一个工作代码。
const http = require('http');
const https = require('https');
const redirectHttps = require('redirect-https')
var app = require('express')();
app.get('/', (req, res) => {
res.send("Test Server")
})
var le = require('greenlock').create({
server: 'staging',
configDir: 'certs/etc',
approveDomains: (opts, certs, cb) => {
if (certs) {
opts.domains = ['10hd.in']
} else {
opts.email = 'test@gmail.com',
opts.agreeTos = true;
}
cb(null, {
options: opts,
certs: certs
});
},
});
http.createServer(le.middleware(redirectHttps())).listen(80, function() {
console.log("Server Running On http" + 80);
})
https.createServer(le.httpsOptions, le.middleware(app)).listen(443, function() {
console.log("Server Running On https" + 443);
})
我不知道为什么这段代码有效,为什么以前的代码无效!但是代码可以运行,这就够了!