Ich versuche Letsencrypt ohne Verwendung eines Reverse-Proxy wie Nginx zu verwenden, fand ich ein Modul namens Letsencrypt-Express (Greenlock-Express) auf npm. Aber ich kann es nicht funktionieren.Knoten: Letsencrypt-Express-Modul funktioniert nicht mit http und https Node-Server
Arbeitsbeispiel:
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 = '[email protected]',
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);
Das Ober Beispiel arbeitet wie erwartet. Leitet http zu https um und gibt ein Zertifikat vom Letsencript staging server aus. und speichert sie im ~/Letsencript-Ordner.
Und hier ist, was ich will aber nicht funktioniert.
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 = '[email protected]',
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");
});
Ich wünsche den Server über https Knotenmodul dienen. und möchte etwas in dem Callback ausführen, das in der .listen() - Funktion bereitgestellt wird. Aber es erstellt nicht einmal lassen Sie uns den Ordner in home dir verschlüsseln.
Konsolenausgabe:
[email protected]:~/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