UbuntuでNginxのSSL設定!自己署名証明書でHTTPS化するUbuntu環境解説

目次

はじめに

本ドキュメントの目的

本書は、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を設定します。実務では公開証明書を使いますが、学習や検証用には自己署名が手早く便利です。

準備

  1. 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)を用意します。ファイル名は環境に合わせて変更してください。

証明書と鍵を配置する

  1. ディレクトリ作成: sudo mkdir -p /etc/nginx/ssl
  2. コピー: sudo cp mysite.crt mysite.key /etc/nginx/ssl/
  3. パーミッション設定(秘密鍵を保護): 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;
}

設定後の手順

  1. 設定ファイルの文法チェック: sudo nginx -t
  2. 問題なければ再読み込み: sudo systemctl reload nginx
  3. ファイアウォールで443を許可: sudo ufw allow 443/tcp

メモ

  • TLS設定は証明書のパスと権限を正しく設定してください。
  • HTTP/2を使うにはlistenにhttp2を指定します。
  • より強固にするにはssl_ciphersやOCSP、HSTSなどを追加で設定してください。
よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

目次