ローカル SSL 証明書作成ガイド
Node.js, Express, OpenSSL で自己署名 SSL 証明書を作成する
自己署名 SSL 証明書は、ウェブサーバーが自身を認証するための証明書です。信頼できる認証機関によって発行されたものではありませんが、開発環境やテスト環境でローカルホストのウェブサーバーを HTTPS でアクセスできるようにする際に便利です。
手順
-
sudo apt install openssl
-
鍵ペアの生成
RSA 鍵ペアを生成します。openssl genrsa -out privatekey.pem 2048
-
証明書要求の生成
証明書要求ファイルを作成します。openssl req -new -key privatekey.pem -out certificate.csr
プロンプトが表示されたら、証明書の情報を入力します。国、州、都市、組織名、部署名、メールアドレスなどです。これらの情報は、自己署名証明書のため実際には使用されませんが、入力する必要があります。
-
自己署名証明書の生成
証明書要求を自己署名証明書として署名します。openssl x509 -req -days 365 -in certificate.csr -signkey privatekey.pem -out certificate.crt
Node.js と Express で使用
Node.js の Express フレームワークで自己署名 SSL 証明書を使用するには、https
モジュールと fs
モジュールを使用して証明書を読み込みます。
const express = require('express');
const https = require('https');
const fs = require('fs');
const app = express();
// 証明書を読み込む
const privateKey = fs.readFileSync('privatekey.pem', 'utf8');
const certificate = fs.readFileSync('certificate.crt', 'utf8');
// HTTPS サーバーを作成
const server = https.createServer({
key: privateKey,
cert: certificate,
}, app);
// Express アプリケーションのルートエンドポイントを設定
app.get('/', (req, res) => {
res.send('Hello, world!');
});
// サーバーを起動
server.listen(443, () => {
console.log('HTTPS server listening on port 443');
});
Node.js/Express での自己署名 SSL 証明書作成と利用の解説
自己署名 SSL 証明書とは?
自己署名 SSL 証明書は、信頼できる認証機関ではなく、自分自身で作成する SSL 証明書です。主に開発環境やローカル環境で HTTPS 通信をテストする際に利用されます。
なぜ自己署名 SSL 証明書が必要なの?
- ローカルで HTTPS サーバーを立ち上げる
ローカルで HTTPS サーバーを構築し、ブラウザで HTTPS 通信を試すことができます。 - HTTPS 機能のテスト
Web アプリケーションの HTTPS 対応を開発段階から確認できます。 - ローカル開発環境のセキュリティ強化
HTTPS を利用することで、開発中のデータの盗聴や改ざんを防ぐことができます。
作成手順とコード解説
OpenSSL を用いた証明書の作成
# 秘密鍵の作成
openssl genrsa -out privatekey.pem 2048
# 証明書署名要求 (CSR) の作成
openssl req -new -key privatekey.pem -out certificate.csr
# 自己署名証明書の作成
openssl x509 -req -days 365 -in certificate.csr -signkey privatekey.pem -out certificate.crt
- x509
CSR を基に自己署名証明書を作成します。-days 365
は証明書の有効期限を365日とすることを意味します。 - req
証明書署名要求 (CSR) を作成します。この際、組織名、国名などの情報を入力する必要があります。 - genrsa
RSA 秘密鍵を生成します。
Node.js/Express での利用
const express = require('express');
const https = require('https');
const fs = require('fs');
const app = express();
// 証明書を読み込む
const privateKey = fs.readFileSync('privatekey.pem', 'utf8');
const certificate = fs.readFileSync('certificate.crt', 'utf8');
// HTTPS サーバーを作成
const server = https.createServer({
key: privateKey,
cert: certificate
}, app);
// ルートへのリクエストハンドラ
app.get('/', (req, res) => {
res.send('Hello, HTTPS!');
});
// サーバーを起動
server.listen(443, () => {
console.log('HTTPS server listening on port 443');
});
- app.get
ルートへのリクエストに対する処理を定義します。 - https.createServer
HTTPS サーバーを作成し、読み込んだ証明書と秘密鍵を指定します。 - fs.readFileSync
作成した証明書と秘密鍵をファイルから読み込みます。
重要な注意点
- 証明書の有効期限
証明書の有効期限が切れると、HTTPS 通信ができなくなります。定期的に更新する必要があります。 - 本番環境では利用しない
本番環境では、信頼できる認証機関から発行された SSL 証明書を使用する必要があります。 - 自己署名証明書は信頼されていない
ブラウザは、自己署名証明書を信頼していないため、セキュリティ警告が表示されます。開発環境では、この警告を無視してアクセスできます。
ローカル SSL 証明書作成ガイド
多くのチュートリアルやガイドが、より詳細な手順や注意点、さらには特定の環境(Dockerなど)での設定方法などを提供しています。
検索キーワード例
- ローカル開発環境 HTTPS
- OpenSSL 証明書作成
- Express HTTPS サーバー
- Node.js 自己署名 SSL 証明書
これらのキーワードで検索すると、より詳しい情報を得ることができます。
自己署名 SSL 証明書は、ローカル開発環境で HTTPS 環境を構築する上で非常に有用です。OpenSSL を用いて簡単に作成でき、Node.js/Express での利用も比較的簡単です。ただし、本番環境での利用は避けるようにしましょう。
- Let's Encrypt
無料の SSL 証明書を発行してくれる Let's Encrypt を利用することもできます。ただし、ドメイン名が必要となります。 - Docker 環境
Docker コンテナ内で Node.js アプリケーションを実行する場合、ボリュームマウントなどを利用して、ホストマシン上の証明書をコンテナ内に取り込む必要があります。
より詳しい情報
- より高度な設定
- 証明書の更新方法
- 特定の環境での設定方法
ローカル SSL 証明書作成の代替方法と詳細解説
これまで、OpenSSL を用いて自己署名 SSL 証明書を作成し、Node.js/Express で利用する方法について解説してきました。しかし、他にも様々な方法やツールが存在します。本記事では、これらの代替方法と、それぞれのメリット・デメリットについて詳しく解説します。
mkcert の利用
-
利用例
# 一度だけ実行 mkcert -install # 証明書の作成 mkcert -cert-file cert.pem -key-file key.pem localhost 127.0.0.1
-
デメリット
-
- 操作が簡単で、初心者でも使いやすい。
- カスタムドメイン名に対応しているため、より現実的な環境でのテストが可能。
-
特徴
- シンプルなコマンドで自己署名証明書を作成できる。
- ローカルホストだけでなく、カスタムドメイン名もサポートしている。
- Windows、macOS、Linux で利用可能。
certbot の利用
-
# certbot をインストール # (OSごとにコマンドが異なる) # 証明書の発行 certbot certonly --non-interactive --agree-tos --email [email protected] -d localhost
-
- 設定が少し複雑になる場合がある。
- DNS検証など、ドメインの管理が必要になる場合がある。
-
- 信頼できる認証機関の証明書を無料で取得できる。
- 自動化されているため、手間がかからない。
-
- Let's Encrypt のクライアントツール。
- 自動化された証明書の発行と更新が可能。
- ローカル開発環境でも利用できる。
Docker イメージの利用
-
例
node:alpine
のような Node.js のベースイメージを利用し、CMD
でnpm start
を実行する。- Dockerfile を作成し、カスタムイメージを作成する。
-
- Docker の知識が必要。
- イメージの選択やカスタマイズが必要になる場合がある。
-
- 環境構築が簡単。
- 複数のプロジェクトで同じ設定を利用できる。
-
- 事前設定されたイメージを利用することで、環境構築の手間を省ける。
クラウドプラットフォームのマネージドSSLサービス
-
- AWS Certificate Manager
- GCP Certificate Authority Service
- Azure Key Vault
-
- クラウドプラットフォームの利用料金がかかる。
- プラットフォームに依存する。
-
- 高可用性。
選択のポイント
- 環境
Docker は、複数のプロジェクトで共通の環境を利用したい場合に適している。 - 自動化
クラウドプラットフォームのマネージドサービスは、証明書の管理を自動化できる。 - 信頼性
certbot は信頼できる認証機関の証明書を取得できる。 - 手軽さ
mkcert は最も手軽に利用できる。
どの方法を選ぶかは、プロジェクトの規模、開発環境、セキュリティ要件によって異なります。
自己署名 SSL 証明書の作成には、OpenSSL の他にも様々な方法があります。それぞれの方法にメリットとデメリットがあるため、プロジェクトの要件に合わせて最適な方法を選択することが重要です。
- 具体的なユースケースに合わせたアドバイス
- 複数の方法の比較
- 特定のツールや方法についての詳しい解説
node.js express openssl