すべてのプロダクト
Search
ドキュメントセンター

Certificate Management Service:Nginx または Tengine サーバー (Linux) への SSL 証明書のインストール

最終更新日:Sep 10, 2026

SSL 証明書をインストールして、Nginx または Tengine サーバーで HTTPS を有効化します。このガイドでは、証明書のダウンロード、ポート 443 の開放、Nginx の server ブロックの設定、結果の確認までを順を追って説明します。

達成する内容:

  • SSL Certificates コンソールから証明書パッケージをダウンロードし、サーバーにアップロードする

  • セキュリティグループとシステムファイアウォールでポート 443 を開放する

  • Nginx の設定に HTTPS の server ブロックを追加する

  • Nginx をリロードし、証明書が機能していることを確認する

これらの手順は、Nginx の設定と互換性のある Tengine にも適用されます。

前提条件

開始する前に、以下の準備が整っていることを確認してください。

  • 信頼できる認証局 (CA) によって発行された SSL 証明書。証明書の有効期限が切れているか、まもなく切れる場合は、まず更新してください

  • サーバー上の root アカウントまたは sudo 権限を持つアカウント

  • サーバーのパブリック IP アドレスに解決されるように設定されたドメイン DNS レコード

  • 保護したいすべてのドメインをカバーする証明書

ドメインカバレッジのルール:

カバレッジタイプ

保護対象

保護対象外

完全一致 (example.com)

example.com のみ

www.example.com または任意のサブドメイン

完全一致 (www.example.com)

www.example.com のみ

ルートドメインまたは他のサブドメイン

ワイルドカード (*.example.com)

第一レベルのサブドメイン:www.example.com、a.example.com

ルートドメイン example.com、a.b.example.com のような複数レベルのサブドメイン

a.b.example.com のような複数レベルのサブドメインを保護するには、[バインド済みドメイン] フィールドに完全一致ドメインまたは *.b.example.com のような対応するワイルドカードが含まれている必要があります。

ドメイン名を追加または変更するには、有料証明書を購入するか、ドメイン名を追加および置換する必要があります。

ステップ 1: SSL 証明書の準備

  1. SSL Certificates ページに移動します。対象の証明書の [操作] 列で、[証明書のダウンロード] をクリックします。[ダウンロード] タブで、[サーバーの種類] として [Nginx] を選択し、パッケージをダウンロードします。

  2. ダウンロードしたパッケージを解凍します。

    • パッケージに証明書ファイル (.pem) と秘密鍵ファイル (.key) が含まれている場合は、両方を保存します。これらは次のステップで必要です。

    • パッケージに .pem ファイルのみが含まれ、.key ファイルが含まれていない場合は、証明書署名要求 (CSR) を生成したときにローカルに保存した秘密鍵ファイルを使用します。

    OpenSSL または keytool を使用して CSR を生成した場合、秘密鍵はローカルマシンにのみ保存され、ダウンロードしたパッケージには含まれません。秘密鍵を紛失した場合、証明書は使用できなくなります。新しい有料証明書を購入し、新しい CSR と秘密鍵を生成してください。
  3. .pem ファイルと .key ファイルをサーバーにアップロードします。これらを /etc/ssl/cert のような安全なディレクトリに保存します。

    PuTTY、Xshell、WinSCP などのリモートログインツールのファイルアップロード機能を使用してください。サーバーが Alibaba Cloud Elastic Compute Service (ECS) インスタンスの場合は、「ファイルのアップロードまたはダウンロード」をご参照ください。

ステップ 2: ポート 443 の開放

HTTPS トラフィックは TCP ポート 443 を使用します。クラウドのセキュリティグループとシステムのファイアウォールの両方でこのポートが開放されていることを確認してください。

ポート 443 が開放されているかの確認

次のコマンドを実行して、ポート 443 の接続性をテストします。<your_server_public_ip> をサーバーのパブリック IP アドレスに置き換えてください。

RHEL/CentOS

command -v nc > /dev/null 2>&1 || sudo yum install -y nc
# <your_server_public_ip> をサーバーのパブリック IP アドレスに置き換えます。
sudo ss -tlnp | grep -q ':443 ' || sudo nc -l 443 & sleep 1; nc -w 3 -vz <your_server_public_ip> 443

出力が Ncat: Connected to <your_server_public_ip>:443 の場合、ポート 443 は開放されています。そうでない場合は、以下の手順を実行してください。

Debian/Ubuntu

command -v nc > /dev/null 2>&1 || sudo apt-get install -y netcat
# <your_server_public_ip> をサーバーのパブリック IP アドレスに置き換えます。
sudo ss -tlnp | grep -q ':443 ' || sudo nc -l -p 443 & sleep 1; nc -w 3 -vz <your_server_public_ip> 443

出力が Connection to <your_server_public_ip> port [tcp/https] succeeded! または [<your_server_public_ip>] 443 (https) open の場合、ポート 443 は開放されています。そうでない場合は、以下の手順を実行してください。

セキュリティグループでのポート 443 の開放

重要

サーバーがクラウドプラットフォームで実行されている場合、そのセキュリティグループはポート 443 でのインバウンド TCP トラフィックを許可する必要があります。以下の手順では、ECS を例として使用します。他のクラウドプラットフォームについては、それぞれのドキュメントをご参照ください。

Elastic Compute Service (ECS) インスタンス ページに移動し、対象のインスタンス名をクリックします。 [セキュリティグループの詳細] セクションで、次の設定でルールを追加し、セキュリティグループのルールを追加 をクリックします:

フィールド

値

[アクション]

許可

[プロトコル]

カスタム TCP

[宛先 (現在のインスタンス)]

HTTPS (443)

[ソース]

0.0.0.0/0 (どこでも)

システムファイアウォールでのポート 443 の開放

次のコマンドを実行して、アクティブなファイアウォールを特定します。

if command -v systemctl >/dev/null 2>&1 && systemctl is-active --quiet firewalld; then
    echo "firewalld"
elif command -v ufw >/dev/null 2>&1 && sudo ufw status | grep -qw active; then
    echo "ufw"
elif command -v nft >/dev/null 2>&1 && sudo nft list ruleset 2>/dev/null | grep -q 'table'; then
    echo "nftables"
elif command -v systemctl >/dev/null 2>&1 && systemctl is-active --quiet iptables; then
    echo "iptables"
elif command -v iptables >/dev/null 2>&1 && sudo iptables -L 2>/dev/null | grep -qE 'REJECT|DROP|ACCEPT'; then
    echo "iptables"
else
    echo "none"
fi

出力が none の場合、ファイアウォールのアクションは不要です。そうでない場合は、ファイアウォールの種類に応じたコマンドを実行してください。

firewalld

sudo firewall-cmd --permanent --add-port=443/tcp && sudo firewall-cmd --reload

ufw

sudo ufw allow 443/tcp

nftables

sudo nft add table inet filter 2>/dev/null
sudo nft add chain inet filter input '{ type filter hook input priority 0; }' 2>/dev/null
sudo nft add rule inet filter input tcp dport 443 counter accept 2>/dev/null

iptables

sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

再起動後も iptables のルールを永続化するには:

  • RHEL/CentOS:

    sudo yum install -y iptables-services
    sudo service iptables save
  • Debian/Ubuntu:

    sudo apt-get install -y iptables-persistent
    sudo iptables-save | sudo tee /etc/iptables/rules.v4 >/dev/null

ステップ 3: Nginx への SSL 証明書のインストール

SSL モジュールのインストール

次のコマンドを実行します。出力が --with-http_ssl_module の場合、SSL モジュールはすでにインストールされているため、「SSL 証明書の設定」に進むことができます。

nginx -V 2>&1 | grep -o -- '--with-http_ssl_module'
システムが nginx: command not found を返す場合は、/usr/local/nginx/sbin/nginx -V 2>&1 | grep -o -- '--with-http_ssl_module' のように完全なインストールパスを使用してください。

SSL モジュールがない場合は、Nginx のインストール方法に応じて、以下のいずれかの方法でインストールします。

重要

SSL モジュールを追加すると、Nginx サービスが一時的に中断される可能性があります。事前に Nginx の設定とデータをバックアップし、この変更はオフピーク時に実行してください。

パッケージマネージャーの使用

サーバーのターミナルで次のコマンドを実行します。

RHEL/CentOS

# Nginx の公式リポジトリを追加します。
sudo tee /etc/yum.repos.d/nginx.repo <<EOF
[nginx-stable]
name=nginx stable repo
baseurl=https://nginx.org/packages/centos/\$releasever/\$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
EOF

# Nginx をアップグレードします。
sudo yum upgrade nginx

Debian/Ubuntu

# Nginx をアップグレードします。
sudo apt-get update
sudo apt-get install --only-upgrade nginx

ソースからのコンパイル

  1. ビルド依存関係をインストールします。

    RHEL/CentOS

    sudo yum install -y gcc pcre-devel zlib-devel openssl-devel

    Debian/Ubuntu

    sudo apt-get update
    sudo apt-get install -y build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev
  2. 現在のコンパイルパラメーターを記録します。

    nginx -V

    configure arguments: の後に表示されるすべてのパラメーターをコピーします。これらはステップ 4 で必要になります。

  3. 現在の Nginx バージョンのソースコードをダウンロードします。nginx -v を実行してバージョンを確認し (例として 1.14.2 を使用)、ソースパッケージをダウンロードして展開します。

    wget http://nginx.org/download/nginx-1.14.2.tar.gz
    tar -zxvf nginx-1.14.2.tar.gz
    cd nginx-1.14.2
  4. SSL モジュールを使用して Nginx を再コンパイルします。記録したパラメーターに --with-http_ssl_module を追加して再コンパイルします。

    error: 'ENGINE_by_id' is deprecated: Since OpenSSL 3.0 [-Werror=deprecated-declarations] が表示された場合は、代わりに make CFLAGS='-Wno-error=deprecated-declarations' を実行してください。
    # 既存のモジュールを失わないように、元のパラメーターをすべて保持します。
    ./configure <元のパラメーター> --with-http_ssl_module
    make
  5. Nginx バイナリを置き換えます。元のバイナリをバックアップします (例として /usr/local/nginx/sbin/nginx を使用)。

    # /usr/local/nginx/sbin/nginx を nginx バイナリの実際のパスに置き換えます。
    sudo cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak

    新しくコンパイルしたバイナリで上書きします。

    # /usr/local/nginx/sbin/nginx を nginx バイナリの実際のパスに置き換えます。
    sudo cp objs/nginx /usr/local/nginx/sbin/nginx
  6. SSL モジュールがインストールされていることを確認します。

    nginx -V 2>&1 | grep -o -- '--with-http_ssl_module'

    出力 --with-http_ssl_module は、モジュールがインストールされていることを確認します。

SSL 証明書の設定

重要

以下の手順では、Nginx 1.14.2 と設定ファイル /etc/nginx/nginx.conf を例として使用します。サーバーでアクティブな設定ファイルを見つけるには、「アクティブな Nginx 設定ファイルを見つけるにはどうすればよいですか?」をご参照ください。

  1. 設定ファイルを開きます。証明書ファイル (.pem または .crt) と秘密鍵ファイル (.key) のファイル名と保存パスはカスタマイズできます。Nginx の設定で指定するパスが正しく、Nginx プロセスがそれらのファイルに対する読み取り権限を持っていることを確認してください。

    sudo vim /etc/nginx/nginx.conf
  2. HTTPS 用の server ブロックを追加します。ポート 80 をリッスンしている既存の server ブロックをコピーし、listen 80 を listen 443 ssl に変更し、以下に示す SSL ディレクティブを追加します。他の設定はすべて変更しないでください。

    # ポート 80 をリッスンする元の server ブロック
    server {
        listen 80;
        server_name yourdomain www.yourdomain;
    
        # その他の設定
        location / {
            proxy_pass http://127.0.0.1:8000;
        }
    }
    
    # HTTPS 用の新しい server ブロック
    server {
        # 元の 'listen 80' を 'listen 443 ssl' に変更します。
        listen 443 ssl;
        # 元の server_name。現在の証明書でサポートされているドメイン名を追加できます。
        server_name yourdomain www.yourdomain;
    
        # ======================= 証明書設定の開始 =======================
        # 証明書ファイルを指定します (中間証明書はこの .pem ファイルに追加できます)。/etc/ssl/cert/ssl.pem を証明書ファイルの絶対パスに置き換えます。
        ssl_certificate /etc/ssl/cert/ssl.pem;
        # 秘密鍵ファイルを指定します。/etc/ssl/cert/ssl.key を秘密鍵ファイルの絶対パスに置き換えます。
        ssl_certificate_key /etc/ssl/cert/ssl.key;
        # パフォーマンスを向上させるために SSL セッションキャッシュを設定します。
        ssl_session_cache shared:SSL:1m;
        # SSL セッションのタイムアウト期間を設定します。
        ssl_session_timeout 5m;
        # 使用する TLS プロトコルの種類と暗号スイートをカスタマイズします (以下は設定例です。設定が必要かどうかを評価してください)。
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        # 許可される TLS プロトコルバージョンを指定します。TLS バージョンが高いほど HTTPS 通信のセキュリティが向上しますが、低い TLS バージョンよりもブラウザの互換性が劣ります。
        ssl_protocols TLSv1.2 TLSv1.3;
        # サーバーが指定した暗号スイートを優先します。
        ssl_prefer_server_ciphers on;
        # ======================= 証明書設定の終了 =======================
    
        # その他の設定
    }
  3. (任意) HTTP を HTTPS にリダイレクトするには、ポート 80 の server ブロックに return ディレクティブを追加します。

    # ポート 80 をリッスンする元の server ブロック
    server {
        listen 80;
        server_name yourdomain www.yourdomain;
    
        # すべての HTTP トラフィックを HTTPS にリダイレクトします。
        return 301 https://$host$request_uri;
    
        # 他の元の設定は実行されなくなるため、削除できます。
    }
  4. (オプション) Nginx または Tengine の Web サービスが Docker コンテナで実行されている場合の証明書パスを設定します。

    コンテナには独自のファイルシステムがあり、ホストサーバーから隔離されているため、Nginx はホストパスから直接証明書ファイルを読み取ることができません。SSL Certificates コンソールからダウンロードしたデジタル証明書 (.pem ファイル、中間証明書チェーンを含む) と秘密鍵ファイルをコンテナにマウントし、コンテナ内のパスを参照します。

    1. コンテナを起動する際に、証明書ファイル、秘密鍵ファイル、設定ファイルをマッピングします。:ro オプションは、それらを読み取り専用としてマウントします。

      # /host/path/to/ をホストサーバー上の証明書ファイル、秘密鍵ファイル、設定ファイルの実際の絶対パスに置き換えます。
      docker run -d --name nginx-ssl \
        -v /host/path/to/cert.pem:/etc/nginx/ssl/cert.pem:ro \
        -v /host/path/to/cert.key:/etc/nginx/ssl/cert.key:ro \
        -v /host/path/to/nginx.conf:/etc/nginx/nginx.conf:ro \
        -p 443:443 \
        nginx
    2. nginx.conf で、ssl_certificate と ssl_certificate_key の設定項目をホストパスではなくコンテナ内のパスに設定します。

      ssl_certificate     /etc/nginx/ssl/cert.pem;
      ssl_certificate_key /etc/nginx/ssl/cert.key;
    3. コンテナを再起動して変更を適用します。

      docker restart nginx-ssl

    ファイルがマウントされていない場合、または nginx.conf がコンテナ内のパスではなくホストパスを指している場合、Nginx は起動に失敗し、cannot load certificate: No such file or directory というエラーを返します。詳細なトラブルシューティングについては、よくある質問をご参照ください。コンテナが再起動した後、ブラウザでサイトを開き、証明書が正しく読み込まれることを確認します。

  5. 設定の構文エラーをテストします。

    sudo nginx -t -c /etc/nginx/nginx.conf

    出力に syntax is ok と test is successful の両方が含まれている場合、設定は有効です。そうでない場合は、報告されたエラーを修正し、再度テストを実行してください。

Nginx のリロード

重要

これらのコマンドは、Nginx がデフォルトの設定パスで起動されたことを前提としています。カスタムのインストールパスまたは設定ファイルがある場合は、適宜調整してください。

Nginx が実行中の場合

サービスを再起動せずに設定をリロードします。

sudo nginx -s reload

リロードが失敗した場合は、よくある質問を参照してトラブルシューティングを行ってください。

Nginx が実行されていない場合

起動します。

nginx

ステップ 4: デプロイの検証

  1. ブラウザを開き、https://yourdomain に移動します。yourdomain を実際のドメインに置き換えてください。

  2. アドレスバーの鍵アイコンは、証明書が正常にデプロイされたことを示します。Chrome バージョン 117 以降、image アイコンは新しい image アイコンに置き換えられました。これをクリックして証明書の詳細を表示します。アクセスエラーが表示されたり、鍵アイコンが表示されない場合は、ブラウザのキャッシュをクリアするか、シークレットモードで再試行してください。

    image

問題が解決しない場合は、よくある質問を参照してトラブルシューティングを行ってください。

本番環境に適用

本番環境にデプロイする際は、以下のベストプラクティスを適用してください。

プラクティス

重要性

適用方法

非 root ユーザーとして実行

セキュリティインシデントの際の影響範囲を限定する

アプリケーション専用の低権限システムユーザーを作成する

ゲートウェイで SSL を終端

証明書管理を簡素化し、バックエンドの複雑さを軽減する

Server Load Balancer (SLB) に証明書をデプロイする。SLB は HTTPS を終端し、プレーンな HTTP をバックエンドに転送する

シークレットの外部化

ソースコードや設定ファイルからの認証情報の漏洩を防ぐ

パスワードをハードコーディングする代わりに、環境変数、HashiCorp Vault、または Alibaba Cloud Key Management Service を使用する

HTTP から HTTPS へのリダイレクトを強制

暗号化されていないトラフィックに対する中間者攻撃を防ぐ

ポート 80 の server ブロックに return 301 https://$host$request_uri; を追加する

安全でない TLS バージョンを無効化

SSLv3、TLSv1.0、TLSv1.1 は既知の攻撃に対して脆弱である

Nginx の設定で ssl_protocols TLSv1.2 TLSv1.3; を設定する

証明書を監視し、期限内に更新

期限切れの証明書は、すべてのユーザーの HTTPS を中断させる

ドメイン監視を有効にする。Alibaba Cloud は証明書の有効性をチェックし、有効期限前に更新リマインダーを送信する。「パブリックドメイン名の監視の購入と有効化」をご参照ください

よくある質問

インストール後に HTTPS にアクセスできないのはなぜですか?

以下の項目を順番に確認してください。

  • ポート 443 がブロックされている — セキュリティグループまたはファイアウォールがポート 443 でのインバウンドトラフィックを許可していません。「ポート 443 の開放」をご参照ください。

  • ドメインの不一致 — アクセスしているドメインが証明書の [バインド済みドメイン] にリストされていません。「前提条件」のドメインカバレッジ表をご参照ください。

  • Nginx がリロードされていない — 変更後に設定がリロードされていません。sudo nginx -s reload を実行してください。

  • ファイルパスが間違っている — ssl_certificate または ssl_certificate_key ディレクティブが不正なパスを指しています。.pem ファイルと .key ファイルへの絶対パスを確認してください。

  • アップストリームサービスに証明書がない — ドメインが Content Delivery Network (CDN)、Server Load Balancer (SLB)、または Web アプリケーションファイアウォール (WAF) を経由している場合、証明書はそれらのサービスにもインストールする必要があります。「トラフィックが複数の Alibaba Cloud サービスを通過する場合の証明書デプロイ場所」をご参照ください。

  • 証明書がすべてのサーバーにデプロイされていない — ドメイン DNS が複数のサーバーに解決される場合、それぞれのサーバーに証明書をインストールしてください。

さらにヘルプが必要な場合は、「ブラウザのエラーメッセージに基づく証明書デプロイ問題の解決」および「SSL 証明書デプロイのトラブルシューティングガイド」をご参照ください。

ダウンタイムなしで SSL 証明書を更新または置換するにはどうすればよいですか?

  1. サーバー上の現在の .pem ファイルと .key ファイルをバックアップします。

  2. Certificate Management Service コンソールから新しい証明書と秘密鍵をダウンロードします。

  3. 新しいファイルをサーバーにアップロードし、既存のファイルを上書きします。 Nginx 設定で参照されているものと全く同じファイルパスと名前を使用してください。

  4. Nginx をリロードします:sudo nginx -s reload。

Linux サーバーでアクティブな Nginx 設定ファイル (nginx.conf) を見つけるにはどうすればよいですか?

  1. ps -ef | grep '[n]ginx: master' | grep -- ' -c ' を実行します。出力に -c /etc/nginx/custom.conf のような出力がある場合、Nginx はそのカスタム設定ファイルを使用しています。

  2. ステップ 1 で出力がない場合、Nginx はデフォルトのパスを使用しています。nginx -V 2>&1 | grep -oP -- '--conf-path=[^ ]*' を実行して、--conf-path=/etc/nginx/nginx.conf のようなデフォルトパスを表示します。

「証明書が標準を満たしていません」という警告を修正するために TLSv1.0 と TLSv1.1 を無効にするにはどうすればよいですか?

Nginx の設定で ssl_protocols ディレクティブを次のように設定します。

ssl_protocols TLSv1.2 TLSv1.3;

これにより、安全でない TLSv1.0 および TLSv1.1 プロトコルが無効になります。ファイルを保存した後、nginx -s reload を実行して変更を適用します。

nginx -t が bind() to 0.0.0.0:443 failed (98: Address already in use) で失敗するのはなぜですか?

別のプロセスがすでにポート 443 をリッスンしています。sudo ss -tlnp | grep :443 を実行して特定します。その後、競合するプロセス (別の Web サーバーやハングした Nginx インスタンスなど) を停止するか、別のポートを使用するように再設定してください。

nginx -t が cannot load certificate "/etc/nginx/ssl/domain.pem": BIO_new_file() failed で失敗するのはなぜですか?

Nginx は設定で指定されたパスに証明書ファイルを見つけられません。nginx.conf の ssl_certificate ディレクティブを、.pem ファイルの実際の絶対パスを指すように修正してください。

Nginx のリロードが the "ssl" parameter requires ngx_http_ssl_module で失敗するのはなぜですか?

Nginx のビルドに SSL モジュールがありません。ngx_http_ssl_module を有効にして Nginx をインストールまたは再コンパイルしてください。「SSL モジュールのインストール」をご参照ください。

Nginx をリロードすると No such file or directory: fopen('/cert/3970497_demo.aliyundoc.com.pem','r') が表示されるのはなぜですか?

ssl_certificate または ssl_certificate_key に指定されたパスが正しくありません。設定内のパスが正しい絶対パスであり、ファイルがその場所に存在することを確認してください。

Nginx が permission denied エラーで SSL 証明書ファイルの読み取りに失敗するのはなぜですか?

Nginx のワーカープロセスユーザーが証明書ファイルへの読み取りアクセス権を持っていません。

  1. Nginx のワーカーユーザーを見つけます:nginx.conf の user ディレクティブを探します (例:user nginx;)。

  2. そのユーザーに証明書と秘密鍵ファイルに対する読み取り (r) 権限と、パス内のすべての親ディレクトリに対する実行 (x) 権限を付与します。

Nginx 1.2 は SSL Certificate Management V2.0 からダウンロードした証明書をサポートしていますか?

はい。SSL Certificate Management V2.0 を通じて発行された証明書は、V1.0 を通じて発行されたものと同じです。唯一の違いは購入方法です。