OpenSSL を使った Node.js & Express 環境の HTTPS 構築ガイド

2024-05-23

Node.js、Express、OpenSSL を使ってローカルホスト用の信頼できる自己署名 SSL 証明書を作成する方法

このチュートリアルでは、Node.js用の Express フレームワークと OpenSSL を使って、ローカルホスト用の信頼できる自己署名 SSL 証明書を作成する方法を説明します。

自己署名 SSL 証明書は、信頼できる認証局 (CA) によって発行された証明書ではなく、自分で作成する証明書です。 ローカル開発環境などで HTTPS 通信を構築する場合によく使用されます。

注意点

自己署名 SSL 証明書は、ブラウザから 「信頼できない」 と認識されるため、本番環境で使用することは 強く推奨されません。 本番環境では、必ず信頼できる認証局から発行された証明書を使用してください。

手順

  1. 秘密鍵の生成

    openssl genrsa -out server.key 2048
    
  2. 証明書署名要求 (CSR) の作成

    openssl req -new -key server.key -out server.csr
    

    上記のコマンドを実行すると、server.csr という名前の証明書署名要求 (CSR) ファイルが生成されます。

  3. 自己署名証明書の発行

    openssl x509 -req -in server.csr -out server.crt -days 365 -signkey server.key -extfile openssl.cnf
    

    openssl.cnf ファイルには、証明書に関する情報 (有効期限、ドメイン名など) を記述します。 以下の内容を openssl.cnf ファイルとして保存してください。

    [req]
    distinguished_name = req_distinguished_name
    req_distinguished_name = subject
    
    [subject]
    countryName = US
    stateOrProvinceName = Your State
    localityName = Your City
    organizationName = Your Organization
    organizationalUnitName = Your Organizational Unit
    commonName = localhost
    
    [SAN]
    DNS:localhost
    
  4. Express で証明書を使用する

    const https = require('https');
    const fs = require('fs');
    
    const app = require('express')();
    
    const httpsOptions = {
      key: fs.readFileSync('server.key'),
      cert: fs.readFileSync('server.crt')
    };
    
    const server = https.createServer(httpsOptions, app);
    
    server.listen(3000, () => {
      console.log('HTTPS server listening on port 3000');
    });
    

    上記コードは、Node.js の https モジュールと fs モジュールを使用して、Express アプリケーションを HTTPS サーバーとして起動します。 httpsOptions オブジェクトには、生成した証明書と秘密鍵へのパスを指定します。

補足

  • 生成した証明書と秘密鍵は、安全な場所に保管してください。
  • ブラウザによっては、自己署名 SSL 証明書を使用する際に警告が表示される場合があります。
  • より高度な設定については、OpenSSL と Express のドキュメントを参照してください。



証明書と秘密鍵の生成

openssl genrsa -out server.key 2048
openssl req -new -key server.key -out server.csr
openssl x509 -req -in server.csr -out server.crt -days 365 -signkey server.key -extfile openssl.cnf

Express アプリケーション

const https = require('https');
const fs = require('fs');
const express = require('express');

const app = express();

const httpsOptions = {
  key: fs.readFileSync('server.key'),
  cert: fs.readFileSync('server.crt')
};

const server = https.createServer(httpsOptions, app);

app.get('/', (req, res) => {
  res.send('Hello from HTTPS!');
});

server.listen(3000, () => {
  console.log('HTTPS server listening on port 3000');
});

実行

上記のコードを保存して、以下のコマンドを実行します。

node index.js

ブラウザを開き、https://localhost:3000 にアクセスすると、"Hello from HTTPS!" というメッセージが表示されます。




    Node.js、Express、OpenSSL 以外でローカルホスト用の自己署名 SSL 証明書を作成する方法

    mkcert は、ローカル開発環境向けに簡単に自己署名 SSL 証明書を作成できるツールです。

    mkcert localhost
    

    上記のコマンドを実行すると、localhost.pem という名前の証明書ファイルと localhost-key.pem という名前の秘密鍵ファイルが生成されます。

    Let's Encrypt は、無料で信頼できる SSL 証明書を発行する認証局です。

      自作のツール

      Python や Go などのプログラミング言語を使って、独自のツールを作成することもできます。

      • 簡単さ を重視する場合は、mkcert がおすすめです。
      • 信頼性 を重視する場合は、Let's Encrypt を使用するのがおすすめです。
      • 柔軟性 を重視する場合は、自作のツール を作成するのがおすすめです。

        node.js express openssl


        OS XでNODE_ENVをproduction/developmentに設定する方法

        OS X で NODE_ENV を設定するには、いくつかの方法があります。この方法は、一時的に NODE_ENV を設定するのに便利です。ターミナルを閉じると設定は解除されます。プロジェクトのルートディレクトリに . env という名前のファイルを作成し、以下の内容を記述します。...


        【Node.js, MongoDB, Mongoose】Mongoose スキーマで 2D ジオインデックス付き配列内のオブジェクトを定義する方法

        このチュートリアルでは、Node. js、MongoDB、Mongoose を使用して、2D ジオインデックス付きの配列内のオブジェクトを Mongoose スキーマで正しく定義する方法を説明します。要件このチュートリアルを完了するには、次のものが必要です。...


        バージョン管理をマスターしよう!node.js、npm、package.jsonにおけるバージョン指定のすべて

        チルダ(~)記号は、指定されたマイナーバージョンまでのバージョンの範囲を許容します。 例えば、~1.2.3と指定すると、1.2.3から1. 2.9までのバージョンがインストールされます。例以下は、package. jsonファイルでチルダとキャレット記号を使用する例です。...


        【超便利】JavaScript でオブジェクトのキーと値を入れ替える5つの方法

        方法1:Object. entries と Object. fromEntries を使用するこの方法は、ES2019 で導入された新しいメソッドである Object. fromEntries を使用します。このコードでは、まず Object...


        JavaScriptの非同期処理をマスターしよう! async/await と forEach ループの徹底解説

        JavaScriptの async/await は非同期処理をより簡単に記述するための強力なツールです。一方、forEach ループは配列の要素を反復処理する便利な方法です。しかし、forEach ループ内で非同期処理を行う場合、async/await を直接使用することはできません。...


        SQL SQL SQL SQL Amazon で見る



        Node.js + Express で HTTPS サーバーを構築し、SSL 証明書を設定する方法

        このチュートリアルでは、Node. js と Express を使用して HTTPS サーバーを構築し、SSL 証明書を設定する方法を説明します。準備するものNode. js (インストール済み)ドメイン名 (必須ではないが、推奨)手順秘密鍵と証明書を作成する OpenSSL を使用して、秘密鍵と自己署名証明書を作成します。以下のコマンドを実行します。