🎉

Let's Encrypt + Node.js で HTTPS サーバ

2022/10/18に公開約1,600字

Qiitaより転載
2018/5/14 初投稿


キーの場所を忘れてしまったので備忘録がてらに。

証明書の場所

Let's Encrypt で作成した証明書は以下にある:

  • /etc/letsencrypt/live/[ドメイン]/

Node.js で HTTPS サーバを立ち上げる

https モジュールを使用する

  • keyprivkey.pem
  • certcert.pem
const https = require("https");
const fs = require("fs");

const key  = "/etc/letsencrypt/live/***/privkey.pem"
const cert = "/etc/letsencrypt/live/***/cert.pem"

const options = {
    key: fs.readFileSync(key),
    cert: fs.readFileSync(cert)
};

const server = https.createServer(options);

// 5001 番ポートで listen
server.listen(5001);

サンプル

適当なログサーバを書いたので丸ごと。

const https = require("https");
const fs = require("fs");

const key  = "/etc/letsencrypt/live/***/privkey.pem"
const cert = "/etc/letsencrypt/live/***/cert.pem"

const options = {
    key: fs.readFileSync(key),
    cert: fs.readFileSync(cert)
};

const server = https.createServer(options);

server.on("request", (request, response) => {
  if(request.url.includes(".ico")) return;

  const dir = "./access-log/";
  if (fs.existsSync(dir) === false) {
    fs.mkdirSync(dir);
  }

  const now = new Date();
  const fileName = dir + `${now.getMonth()}${now.getDate()}${now.getHours()}.txt`;
  let writeMethod =
    fs.existsSync(fileName) === false ? fs.writeFileSync : fs.appendFileSync;

  writeMethod(fileName, `${now.toISOString()}\n`);

  response.writeHead(200, {
    "Content-Type": "application/json"
  });
  response.write(JSON.stringify({ result: "success" }));
  response.end();
});

server.listen(5001);
console.log("Server running at https://localhost:5001/");

なんか実際はファイル名おかしいけど。。

Discussion

ログインするとコメントできます