Node.jsでHTTPSサーバー作成
Node.jsでHTTPSサーバーを作成する方法 (日本語)
HTTPSサーバーは、インターネット上で安全な通信を実現するために使用されます。Node.jsでは、https
モジュールを使用してHTTPSサーバーを作成することができます。
必要なモジュール
fs
: ファイルシステムにアクセスするためのモジュールhttps
: HTTPSサーバーを作成するためのモジュール
基本的な手順
-
HTTPSモジュールのインポート
const https = require('https'); const fs = require('fs');
-
SSL証明書と秘密鍵の読み込み
HTTPSサーバーを起動するには、SSL証明書と秘密鍵が必要です。これらのファイルは、通常、Webホスティングプロバイダーから取得します。const privateKey = fs.readFileSync('path/to/your/private.key'); const certificate = fs.readFileSync('path/to/your/certificate.crt');
-
HTTPSサーバーの作成
const options = { key: privateKey, cert: certificate }; https.createServer(options, (req, res) => { // ここにリクエスト処理のコードを書く res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello, HTTPS world!\n'); }).listen(443);
詳しい説明
- res
HTTPレスポンスオブジェクト。 - options
SSL証明書と秘密鍵を指定するためのオブジェクト。 - https.createServer(options, (req, res) => { ... })
HTTPSサーバーを作成し、リクエストハンドラー関数を受け取ります。
例
const https = require('https');
const fs = require('fs');
const privateKey = fs.readFileSync('private.key');
const certificate = fs.readFileSync('certificate.crt');
const options = {
key: privateKey,
cert: certificate
};
https.createServer(options, (req, res) => {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hel lo, HTTPS world!\n');
}).listen(443);
このコードは、ポート443でHTTPSサーバーを起動し、クライアントからのリクエストに対して「Hello, HTTPS world!」というメッセージを返します。
基本的なHTTPSサーバー
const https = require('https');
const fs = require('fs');
const privateKey = fs.readFileSync('private.key');
const certificate = fs.readFileSync('certificate.crt');
const options = {
key: privateKey,
cert: certificate
};
https.createServer(options, (req, res) => {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hel lo, HTTPS world!\n');
}).listen(443);
複数の証明書を使用する
const https = require('https');
const fs = require('fs');
const options = {
key: fs.readFileSync('private.key'),
cert: fs.readFileSync('certificate.c rt'),
ca: fs.readFileSync('ca.crt')
};
https.createServer(options, (req, res) => {
// ...
}).listen(443);
- ca
証明書チェーンを検証するためのCA証明書。
HTTPSサーバーを特定のホスト名にバインドする
const https = require('https');
const fs = require('fs');
const options = {
key: fs.readFileSync('private.key'),
cert: fs.readFileSync('certificate.c rt'),
server: {
port: 443,
host: 'www.example.com'
}
};
https.createServer(options, (req, res) => {
// ...
}).listen();
- server.host
サーバーのバインドするホスト名。 - server.port
サーバーのポート番号。
HTTPSサーバーを複数のポートでリスンする
const https = require('https');
const fs = require('fs');
const options = {
key: fs.readFileSync('private.key'),
cert: fs.readFileSync('certificate.crt')
};
const server = https.createServer(options, (req , res) => {
// ...
});
server.listen(443);
server.listen(8443);
- サーバーを複数のポートでリスンすることができます。
HTTPSサーバーにカスタム証明書チェーンを提供する
const https = require('https');
const fs = require('fs');
const options = {
key: fs.readFileSync('private.key'),
cert: fs.readFileSync('certificate.c rt'),
ca: [fs.readFileSync('ca1.crt'), fs.readFileSync('ca2.crt')]
};
https.createServer(options, (req, res) => {
// ...
}).listen(443);
Express.jsの使用
- Express.jsのHTTPSサーバーの作成は、
https
モジュールを使用する場合と非常によく似ています。 - Express.jsは、Node.jsでWebアプリケーションを構築するためのフレームワークです。HTTPSサーバーを作成する際に、Express.jsの組み込み機能を利用することができます。
const express = require('express');
const https = require('https');
const fs = require('fs');
const app = express();
const privateKey = fs.readFileSync('private .key');
const certificate = fs.readFileSync('certificate.crt');
const options = {
key: privateKey,
cert: certificate
};
https.createServer(optio ns, app).listen(443);
Hapi.jsの使用
- Hapi.jsのHTTPSサーバーの作成は、Express.jsのHTTPSサーバーの作成と非常に似ています。
const Hapi = require('hapi');
const https = require('https');
const fs = require('fs');
const server = new Hapi.Server({
port: 443,
host: 'localhost'
});
const privateKey = fs.readFileSync('private.key');
const certificate = fs.readFileSync('certificate.crt');
const options = {
key: privateKey,
cert: certificate
};
https.createServer(optio ns, server.listener).listen();
Fastifyの使用
- FastifyのHTTPSサーバーの作成は、他のフレームワークと同様に、
https
モジュールを使用します。
const Fastify = require('fastify');
const https = require('https');
const fs = require('fs');
const fastify = new Fastify({
https: {
key: fs.readFileSync('private.key'),
cert: fs.readFileSync('certificate.crt')
}
});
fastify.get('/', (req, res) => {
res.send('Hello, HTTPS world!');
});
fastify.listen(443);
javascript node.js ssl