2017-10-01 12 views
0

Nginxのようなリバースプロキシを使用せずにLetsencryptを使用しようとしていますが、という名前のモジュールが見つかりました.npmに(greenlock-express)しかし、私はそれを働かせることはできません。ノード:httpとhttpsノードサーバを使用しているときに、encrypt-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 = '[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); 

上の例は期待通りに働いています。 httpをhttpsにリダイレクトし、Letsencript stagging serverから証明書を発行します。 〜/ 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 = '[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"); 
}); 

私は、HTTPSノードモジュールを介してサーバーにサービスを提供したいです。 .listen()関数で提供されているコールバックで何かしたい。 しかし、ホームディレクトリ内のフォルダを暗号化するように作成することさえできません。

コンソール出力:

[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 

答えて

0

私はこの問題を自分で解決しました。 "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 = '[email protected]', 
     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); 
}) 

、このコードが動作していると、なぜ以前のコードではありませんなぜ私は知りません!しかし、コードは動作している、それだけで十分です!

関連する問題