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

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

最終更新日:Apr 01, 2026

SSL 証明書をインストールして、ご利用の Nginx または Tengine サーバーで HTTPS を有効化します。このガイドでは、証明書のダウンロード、ポート 443 の開放、Nginx サーバーブロックの構成、および結果の確認手順を説明します。

このガイドで実現できること:

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

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

  • Nginx 構成に HTTPS サーバーブロックを追加する

  • Nginx を再読み込みし、証明書が正常に動作していることを確認する

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

前提条件

作業を開始する前に、以下の要件を満たしていることを確認してください。

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

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

  • ドメインの DNS レコードがサーバーのパブリック IP アドレスに解決されるように構成されていること

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

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

カバレッジタイプ保護対象保護対象外
完全一致 (example.com)example.com のみwww.example.com またはその他のサブドメイン
完全一致 (www.example.com)www.example.com のみルートドメインまたはその他のサブドメイン
ワイルドカード (*.example.com)第 1 階層のサブドメイン:www.example.coma.example.comルートドメイン example.coma.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
# Replace <your_server_public_ip> with the public IP address of your server.
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
# Replace <your_server_public_ip> with the public IP address of your server.
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 トラフィックを許可する必要があります。以下の手順は、Alibaba Cloud 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 <Original parameters> --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. 構成ファイルを開きます。

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

    # ポート 80 でリッスンする元のサーバーブロック
    server {
        listen 80;
        server_name yourdomain www.yourdomain;
    
        # その他の構成
        location / {
            proxy_pass http://127.0.0.1:8000;
        }
    }
    
    # HTTPS 用の新しいサーバーブロック。
    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 のサーバーブロックに return ディレクティブを追加します。

    # ポート 80 でリッスンする元のサーバーブロック
    server {
        listen 80;
        server_name yourdomain www.yourdomain;
    
        # すべての HTTP トラフィックを HTTPS にリダイレクトします。
        return 301 https://$host$request_uri;
    
        # 到達しなくなるため、元のその他の構成は削除できます。
    }
  4. 構文エラーがないか構成をテストします。

    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 のサーバーブロックに 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 ファイルの絶対パスを確認してください。

  • 上流サービスでの証明書の不足 — お客様のドメインがコンテンツデリバリーネットワーク (CDN)、Server Load Balancer (SLB)、またはWeb Application Firewall (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 -tbind() to 0.0.0.0:443 failed (98: Address already in use) で失敗するのはなぜですか?

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

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

Nginx が構成で指定されたパスに証明書ファイルを見つけられません。nginx.confssl_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 が SSL 証明書ファイルを読み取れず、permission denied エラーが発生するのはなぜですか?

Nginx ワーカープロセスのユーザーに証明書ファイルの読み取り権限がありません。

  1. Nginx ワーカーユーザーを特定します:nginx.conf 内の user ディレクティブを確認します (例:user nginx;)。

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