環境

  • HW

    • Raspberry Pi 4

  • OS

    • Ubuntu 24.04.1 LTS

手順

自己署名証明書を作成

  1. 証明書を作成

    $ mkdir certs
    
    # 10年間有効な証明書を作成する
    $ openssl req -x509 -nodes -days 3650 -newkey rsa:2048 \
      -keyout certs/selfsigned.key \
      -out certs/selfsigned.crt \
      -subj "/CN=localhost"
    
    $ ls certs/
    >>> selfsigned.crt  selfsigned.key
    • -x509

      • X.509 は証明書の標準フォーマットであり、ほとんどのSSL/TLSで使用

    • -nodes

      • 秘密鍵(selfsigned.key)を暗号化せず、パスフレーズを要求されない形式で保存

    • -days 3650

      • 証明書の有効期限を設定

    • -out certs/selfsigned.crt

      • 生成した自己署名証明書を certs/selfsigned.crt に保存

    • -subj "/CN=localhost"

      • 証明書の「サブジェクト名(Subject)」を設定

NGINX用のDocker Composeを作成

  1. ディレクトリを作成

    $ mkdir docker/nginx_ssl
    $ cd docker/nginx_ssl
    
    $ mkdir ./nginx_conf ./certs ./html
  2. compose.yml を作成

    $ nano compose.yml
    version: '3.9'
    services:
      nginx:
        image: nginx:latest
        container_name: nginx_container
        ports:
          - "10443:443" # HTTPS用ポート
          - "8080:80" # 必要ならHTTPも
        volumes:
          - ./nginx_conf:/etc/nginx/conf.d:ro # 複数の設定ファイルを格納するフォルダ
          - ./certs:/etc/nginx/certs:ro # 証明書と秘密鍵をマウント
          - ./html:/usr/share/nginx/html:ro # 静的コンテンツ
        restart: unless-stopped
  3. nginx用のconfigを作成

    $ nano .nginx_conf/default.conf
    server {
        listen 80;
        server_name localhost;
    
        # HTTPからHTTPSにリダイレクト
        return 301 https://$host$request_uri;
    }
    
    server {
        listen 443 ssl;
        server_name localhost;
    
        ssl_certificate /etc/nginx/certs/selfsigned.crt;
        ssl_certificate_key /etc/nginx/certs/selfsigned.key;
    
        location / {
            root /usr/share/nginx/html;
            index index.html;
        }
    }
  4. opensslで作成した鍵をコピーする

    $ cp /home/[user]/certs/selfsigned.crt certs/
    $ cp /home/[user]/certs/selfsigned.key certs/
  5. htmlファイルを作成する

    $ cp /home/[user]/certs/selfsigned.crt certs/
    $ cp /home/[user]/certs/selfsigned.key certs/
  6. docker composeを実行

    $ docker compose up -d

httpsでアクセス

  1. https://[Server URL] でアクセスして、htmlが表示されることを確認

    • 警告画面が出てくるので、詳細から表示させる