はじめに
本ドキュメントの目的
本書は、Ubuntu環境でNginxを使いSSL/TLSを設定するための情報をまとめた案内です。自己署名証明書の作成から、プライベート認証局での発行、既存証明書の取り込み、Ubuntu 24.04向けの具体的手順までを網羅的に扱います。複数記事を整理し、実務で使える形にまとめました。
対象読者
Nginxの基本操作に慣れているが、HTTPS化や証明書の扱いに不安がある方を想定します。サーバー管理者、開発者、学習者に適しています。高度な暗号理論の説明は省き、実践的な手順を中心に説明します。
範囲と構成
各章は次の流れで進みます:
– 証明書の生成方法(自己署名)
– プライベートCAや”オレオレ”証明書での運用
– 証明書のNginxへの導入方法
– Ubuntu 24.04での設定例と注意点
前提条件
Ubuntuの基本操作、Nginxのインストール、sudo権限があることを前提とします。OpenSSL等の基本ツールを使用します。
読み方のポイント
操作は手順ごとに実行し、設定ファイルは必ずバックアップしてください。特に自己署名やプライベートCAはブラウザで警告が出るため、テスト環境でまず確認することをおすすめします。
Nginx④自己署名証明書でTLSの設定
概要
ローカル環境(Ubuntu 24.04想定)で自己署名証明書を使い、NginxにTLSを設定します。実務では公開証明書を使いますが、学習や検証用には自己署名が手早く便利です。
準備
- SSL用ディレクトリを作成します。
sudo mkdir -p /etc/nginx/ssl
sudo chmod 700 /etc/nginx/ssl
証明書と秘密鍵の作成
2048ビットRSA鍵を生成し、自己署名証明書を作ります。
sudo openssl genrsa -out /etc/nginx/ssl/server.key 2048
sudo openssl req -new -x509 -key /etc/nginx/ssl/server.key -out /etc/nginx/ssl/server.crt -days 365 -subj "/CN=localhost"
CNはlocalhostにします。パスと権限を確認してください。
Nginx設定 (/etc/nginx/sites-available/default.conf)
次のようにHTTPSの聞き取りを追加します。
server {
listen 443 ssl;
server_name localhost;
ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256;
ssl_prefer_server_ciphers on;
root /var/www/html;
}
TLSv1.3の暗号は自動扱いになるため、上は主にTLSv1.2向けです。
シンボリックリンクとNginx再読み込み
sudo ln -s /etc/nginx/sites-available/default.conf /etc/nginx/sites-enabled/default.conf
sudo nginx -t
sudo systemctl reload nginx
設定テストでOKが出れば再読み込みします。
動作確認と注意点
ブラウザで https://localhost にアクセスします。自己署名のため警告が出ますが、開発用途なら例外を許可して動作を確認してください。自己署名は信頼性が低いため、本番では認証局発行の証明書を使ってください。
Nginxをプライベート認証局やオレオレ証明書でHTTPS化
概要
社内向けやテスト用に、プライベート認証局(自社CA)や自己署名(オレオレ)証明書でNginxをHTTPS化する手順をわかりやすく説明します。公開CAの手続きが不要な場合に便利です。
鍵と証明書の作成(自己署名)
まず秘密鍵をパスフレーズなしで作ります(暗号化されていない鍵)。例:
openssl genpkey -algorithm RSA -out server.key -pkeyopt rsa_keygen_bits:2048
openssl req -new -x509 -days 365 -key server.key -out server.crt -subj "/CN=example.local"
SANが必要なら設定ファイルで指定できますが省略可能です。
プライベートCAからの発行
社内CAで発行した証明書と鍵をscpで転送します。例:
scp ca_signed.crt server.key user@server:/tmp
配置と権限設定
ファイルを配置します。例:
sudo mkdir -p /etc/certificate
sudo mv /tmp/server.crt /etc/certificate/
sudo mv /tmp/server.key /etc/certificate/
sudo chown root:root /etc/certificate/*
sudo chmod 640 /etc/certificate/server.key
鍵は読み取りを制限してください。
Nginx設定のポイント
serverブロックで以下を指定します。
listen 443 ssl;
ssl_certificate /etc/certificate/server.crt;
ssl_certificate_key /etc/certificate/server.key;
ssl_session_tickets off;
ssl_protocols TLSv1.3;
ssl_prefer_server_ciphers on;
設定反映と確認
サイト設定をsites-availableに置き、sites-enabledへシンボリックリンクを作成してNginxを再起動します。
sudo ln -s /etc/nginx/sites-available/site /etc/nginx/sites-enabled/
sudo systemctl restart nginx
ブラウザやopenssl s_clientで接続を確認してください。
注意点
自己署名や社内CAはブラウザで信頼されないため、クライアント側でCAをインポートする必要があります。
NGINXに証明書をインポートする
準備
既に用意した証明書(例: mysite.crt)と秘密鍵(例: mysite.key)を用意します。ファイル名は環境に合わせて変更してください。
証明書と鍵を配置する
- ディレクトリ作成: sudo mkdir -p /etc/nginx/ssl
- コピー: sudo cp mysite.crt mysite.key /etc/nginx/ssl/
- パーミッション設定(秘密鍵を保護): sudo chown root:root /etc/nginx/ssl/mysite.key && sudo chmod 600 /etc/nginx/ssl/mysite.key
nginx.conf にサーバーブロックを追加
http セクション内、または sites-available の該当ファイルに次のサーバーブロックを追加します。
server {
listen 443 ssl;
server_name example.com; # 実際のホスト名に変更
ssl_certificate /etc/nginx/ssl/mysite.crt;
ssl_certificate_key /etc/nginx/ssl/mysite.key;
# 任意の推奨設定(簡易例)
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
root /var/www/html;
}
設定反映
設定ファイルの文法を確認: sudo nginx -t
問題なければ再起動: sudo systemctl reload nginx
補足注意点
- 証明書チェーンがある場合は、ssl_certificate にチェーン結合済みファイルを指定してください。
- 秘密鍵にパスフレーズがあると自動起動で止まる場合があります。必要ならパスフレーズを削除するか、別途対策してください。
Ubuntu 24.04 : Nginx : SSL/TLSの設定
前提
Ubuntu 24.04にNginxをインストール済みで、サーバー名(例: example.com)と証明書ファイルが用意されている想定です。証明書はLet’s EncryptやプライベートCA、自己署名など任意の方法で準備してください。
サーバーブロックの例 (/etc/nginx/sites-available/default)
server {
listen 443 ssl http2 default_server;
listen [::]:443 ssl http2 default_server;
server_name example.com www.example.com;
root /var/www/html;
ssl_certificate /etc/ssl/certs/example.crt;
ssl_certificate_key /etc/ssl/private/example.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
}
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name example.com www.example.com;
return 301 https://$host$request_uri;
}
設定後の手順
- 設定ファイルの文法チェック: sudo nginx -t
- 問題なければ再読み込み: sudo systemctl reload nginx
- ファイアウォールで443を許可: sudo ufw allow 443/tcp
メモ
- TLS設定は証明書のパスと権限を正しく設定してください。
- HTTP/2を使うにはlistenにhttp2を指定します。
- より強固にするにはssl_ciphersやOCSP、HSTSなどを追加で設定してください。












