暗号化されていない HTTP を使用してデータを送信すると、情報漏洩やコンテンツ改ざんなどのセキュリティリスクにさらされ、ブラウザによってサイトが「安全でない」と表示される可能性があり、ユーザーの信頼を損ないます。Windows ベースの Nginx サーバーに SSL 証明書をデプロイすることで、HTTPS 暗号化通信が可能になり、転送中のデータの機密性と整合性を保護し、ウェブサイトのセキュリティと信頼性を向上させます。本トピックでは、Windows 上で動作する Nginx サーバーへの SSL 証明書のデプロイ方法と、HTTPS デプロイメントの検証方法について説明します。
前提条件
作業を開始する前に、以下の要件を満たしていることを確認してください。
証明書のステータス:信頼された認証局 (CA) から発行された SSL 証明書を取得済みであること。証明書の有効期限が近づいている場合や、すでに期限切れになっている場合は、事前に更新する必要があります。
ドメイン名の一致:証明書が保護したいすべてのドメイン名をカバーしていることを確認してください。ドメイン名を追加または変更する必要がある場合は、有料証明書を購入するか、ドメイン名の追加および置き換えを行ってください。
完全一致ドメイン名:完全一致ドメイン名の証明書は、指定されたドメイン名にのみ適用されます。
example.comの証明書は、example.comにのみ適用されます。www.example.comの証明書は、www.example.comにのみ適用されます。
ワイルドカードドメイン名:ワイルドカードドメイン名の証明書は、第 1 レベルのサブドメインにのみ適用されます。
*.example.comの証明書は、www.example.comやa.example.comなどの第 1 レベルのサブドメインに適用されます。*.example.comの証明書は、ルートドメインexample.comやa.b.example.comなどの複数レベルのサブドメインには適用されません。
説明複数レベルのサブドメインを一致させるには、ドメイン名のバインド フィールドに、特定のドメイン名(例:
a.b.example.com)または対応するワイルドカードドメイン名(例:*.b.example.com)を含める必要があります。-
サーバー権限:
Administratorアカウントまたは管理者権限を持つアカウントを使用する必要があります。 DNS 解決:ドメイン名がサーバーのパブリック IP アドレスに解決されていること。
-
前提条件:本トピックでは、Windows Server 2025 および Nginx 1.28.0 を例として使用します。Nginx のインストールディレクトリの例は
D:\nginx-1.28.0です。説明他の OS バージョンまたはウェブサーバーソフトウェアでは、手順が異なる場合があります。
操作手順
ステップ 1:SSL 証明書の準備
-
SSL Certificates Service ページに移動します。操作 列で証明書の横にある もっと をクリックして、証明書詳細ページを開きます。ダウンロード タブで、Nginx サーバータイプ 用の証明書をダウンロードします。
ダウンロードした証明書パッケージを解凍します。
パッケージに証明書ファイル (.pem) と秘密鍵ファイル (.key) の両方が含まれている場合は、両方のファイルを安全に保管してください。デプロイ時にこれらが必要になります。
パッケージに証明書ファイル (.pem) のみが含まれていて、秘密鍵ファイル (.key) が含まれていない場合は、ローカルに保存した秘密鍵ファイルとともに証明書をデプロイする必要があります。
説明証明書の申請時に OpenSSL や Keytool などのツールを使用して証明書署名要求 (CSR) ファイルを生成した場合、秘密鍵ファイルはローカルマシン上にのみ保存され、ダウンロードしたパッケージには秘密鍵ファイルは含まれません。秘密鍵を紛失した場合、証明書は使用できなくなります。有料証明書を購入し、新しい CSR および秘密鍵を生成する必要があります。
-
抽出した証明書および秘密鍵ファイルをサーバーにアップロードし、安全なディレクトリに保存します。本トピックで使用するパスの例は
D:\certです。説明以下の手順では、Alibaba Cloud ECS インスタンスを例として使用します。他のサーバータイプの場合は、ベンダードキュメントをご参照ください。
-
ECS コンソール - インスタンス に移動します。左上隅で、対象リソースのリージョンおよびリソースグループを選択します。
-
インスタンス詳細ページに移動します。接続 をクリックし、ワークベンチ を選択します。画面上の指示に従って、サーバーにログインします。
-
サーバーデスクトップの左下隅にある スタート メニューをクリックし、PC、コンピューター、または エクスプローラー を見つけて開きます。
-
リダイレクトされたドライブとフォルダー の下で、workbench on *** をダブルクリックします。ローカルマシンから証明書ファイルをこのディレクトリにドラッグし、右クリックして 更新 を選択してフォルダーを更新します。
-
ファイルを
D:\certディレクトリにコピーします。重要ワークベンチは、再接続時またはインスタンスから退出時にスペースを節約するために、リダイレクトされたドライブとフォルダー からアップロードされたすべてのファイル情報を自動的にクリアします。このディレクトリはファイル転送専用であり、ここにファイルを保存しないでください。
-
ステップ 2:システムおよびネットワークの構成
-
セキュリティグループでポート 443 を開きます。
重要サーバーがクラウドプラットフォーム上にデプロイされている場合は、そのセキュリティグループが TCP ポート 443 のインバウンドトラフィックを許可していることを確認してください。そうでない場合、サービスはインターネットからアクセスできません。以下の操作では、Alibaba Cloud ECS インスタンスを例として使用します。他のクラウドプラットフォームの場合は、各社の公式ドキュメントをご参照ください。
ECS インスタンス ページに移動し、対象の ECS インスタンスが配置されているリージョンを選択して、インスタンス名をクリックして詳細ページに移動します。
をクリックし、操作 が 許可、プロトコルの種類 が TCP、ポート範囲 が HTTPS (443)、認証オブジェクト が すべて (0.0.0.0/0) に設定されたルールが存在することを確認します。
このようなルールが存在しない場合は、対象のセキュリティグループにルールを追加してください。詳細については、「セキュリティグループルールの追加」をご参照ください。
-
サーバーファイアウォールでポート 443 を開きます。
Windows サーバーにログインし、スタート メニューをクリックして、コントロールパネル を開きます。
に移動します。
次の図のようにファイアウォールが無効になっている場合は、これ以上の操作は不要です。

ファイアウォールが有効になっている場合は、HTTPS トラフィックを許可するための以下の手順に従ってください。
左側のナビゲーションウィンドウで、 をクリックし、プロトコル が TCP、ローカルポート が 443、操作 が ブロック に設定されたインバウンドルールが存在するかどうかを確認します。
このようなルールが存在する場合は、ルールを右クリックして プロパティ を選択し、全般 タブで操作を 接続を許可する に変更してから、適用 をクリックします。
ステップ 3:Nginx への証明書のデプロイ
-
Nginx 設定ファイル(例:
D:\nginx-1.28.0\conf\nginx.conf)を開き、SSL 証明書および秘密鍵を構成します。-
ポート 443 をリッスンする server ブロックを追加します。
ポート 80 の server ブロックを複製し、listen ディレクティブを
listen 443 sslに変更して、SSL ディレクティブ(ssl_certificateおよびssl_certificate_key)を追加します。# ポート 80 をリッスンする元の server ブロック server { listen 80; server_name yourdomain.com www.yourdomain.com; # その他の構成 location / { proxy_pass http://127.0.0.1:8000; } } # ポート 80 の既存の server ブロックを複製し、新しい server ブロックとして追加します。 server { # 'listen 80' を 'listen 443 ssl' に変更 listen 443 ssl; # 元の server_name を維持します。証明書でサポートされているドメイン名をさらに追加できます。 server_name yourdomain.com www.yourdomain.com; # ======================= 証明書構成の開始 ======================= # 証明書ファイルを指定します(中間証明書はこの .pem ファイルに連結できます)。次のパスを証明書ファイルへの絶対パスに置き換えてください。 ssl_certificate D:\\cert\\example.com.pem; # 秘密鍵ファイルを指定します。次のパスを秘密鍵ファイルへの絶対パスに置き換えてください。 ssl_certificate_key D:\\cert\\example.com.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 バージョンはより良いセキュリティを提供しますが、ブラウザとの互換性が低くなる可能性があります。 ssl_protocols TLSv1.2 TLSv1.3; # サーバーの暗号スイートを優先します。 ssl_prefer_server_ciphers on; # ======================= 証明書構成の終了 ======================= # その他の構成 } -
オプション: HTTP リクエストを自動的に HTTPS にリダイレクトします。ポート 80 をリッスンしている既存の
serverブロックにrewriteディレクティブを追加します。server { listen 80; # 証明書にバインドされたドメイン名を入力します。 server_name <YOURDOMAIN>; # すべての HTTP リクエストを 301 ステータスコードで HTTPS にリダイレクトします。 return 301 https://$host$request_uri; } -
構成を検証します。出力に
syntax is okおよびtest is successfulと表示されれば、構成は正しいです。それ以外の場合は、報告されたエラーを修正して再度テストしてください。.\nginx.exe -t
-
-
Nginx サービスを再読み込みします。
コマンドプロンプトを開き、Nginx インストールディレクトリに移動して、次のコマンドを実行します。
.\nginx.exe -s reload
ステップ 4:デプロイメントの検証
HTTPS 経由でドメイン名にアクセスします。例:
https://example.com。example.comは実際のドメイン名に置き換えてください。ブラウザのアドレスバーにロックアイコンが表示された場合、証明書は正常にデプロイされています。アクセスエラーが発生したり、ロックアイコンが表示されない場合は、ブラウザのキャッシュをクリアするか、シークレットモードまたはプライベートモードで再度試してください。

Chrome 117 以降、アドレスバーの
アイコンは新しい
アイコンに置き換えられました。このアイコンをクリックすると、セキュリティロック情報を表示できます。
問題が解決しない場合は、「よくある質問」セクションを参照してトラブルシューティングを行ってください。
本番環境への適用
本番環境にアプリケーションをデプロイする際は、セキュリティ、安定性、保守性を向上させるために、以下のベストプラクティスに従ってください。
非管理者ユーザーとしてアプリケーションを実行する:
アプリケーション専用の、特権の低いシステムユーザーを作成します。管理者権限を持つアカウントを使用してアプリケーションを実行しないでください。
説明ゲートウェイレベルの SSL 構成 を使用することを推奨します。これは、SLB や Nginx インスタンスなどのリバースプロキシに証明書をデプロイすることを意味します。
認証情報管理の外部化:
パスワードなどの機密情報をコードや設定ファイルにハードコードしないでください。環境変数、ボールト、またはクラウドプロバイダーが提供する Key Management Service を使用して、認証情報を注入します。
HTTP から HTTPS へのリダイレクトを強制する:
HTTP 経由でウェブサイトにアクセスするすべてのトラフィックが自動的に HTTPS にリダイレクトされるようにしてください。これにより、中間者攻撃 (MITM) を防止できます。
最新の TLS プロトコルを構成する:
サーバー構成で、SSLv3、TLS 1.0、TLS 1.1 など、古くて安全でないプロトコルを無効にします。TLS 1.2 および TLS 1.3 のみを有効にしてください。
証明書の監視と自動更新を設定する:
証明書をデプロイした後は、ドメイン名のモニタリングを有効にすることを推奨します。Alibaba Cloud は証明書の有効期間を自動的にチェックし、証明書の有効期限が切れる前にリマインダーを送信します。これにより、サービス中断を防ぐために適時に証明書を更新できます。詳細については、「パブリックドメイン名の購入とモニタリングの有効化」をご参照ください。
よくある質問
証明書が機能しない、または HTTPS にアクセスできない
主な原因は以下のとおりです。
-
セキュリティグループまたはファイアウォールでポート 443 が開かれていません。「システムおよびネットワークの構成」に従ってポートを開いてください。
-
証明書の ドメイン名のバインド がアクセスしているドメインをカバーしていません。「ドメイン名の一致」の前提条件を確認してください。
-
構成変更後に Nginx が再読み込みされていません。「Nginx サービスの再読み込み」を実行してください。
-
証明書ファイルが正しく置き換えられていない、または Nginx 構成が誤ったパスを指しています。構成および証明書ファイルの両方が最新であることを確認してください。
ドメイン名が CDN、SLB、WAF などのクラウドサービスと統合されていますが、証明書が該当するサービスにインストールされていません。詳細については、「トラフィックが複数のクラウドサービスを通過する場合の証明書デプロイ場所」をご参照ください。
ドメイン名が複数のサーバーに解決されていますが、証明書が一部のサーバーにのみインストールされています。各サーバーに証明書をインストールする必要があります。
さらにトラブルシューティングを行う場合は、「ブラウザエラーに基づく証明書デプロイのトラブルシューティング」および「SSL 証明書デプロイのトラブルシューティングガイド」をご参照ください。
Nginx で SSL 証明書を更新する方法
サーバー上の既存の .pem ファイルおよび .key ファイルをバックアップします。Certificate Management Service コンソールから新しい証明書をダウンロードし、同じパスに同じファイル名でアップロードして、古いファイルを上書きします。変更を適用するために Nginx を再読み込みします。
ブラウザで「証明書が基準を満たしていない」という警告が表示されないようにするには、Nginx で TLSv1.0 および TLSv1.1 を無効にするにはどうすればよいですか?
ポート 443 をリッスンする Nginx server ブロックで、ssl_protocols を TLSv1.2 および TLSv1.3 のみを含むように設定します:ssl_protocols TLSv1.2 TLSv1.3;。これにより、安全でない TLSv1.0 および TLSv1.1 プロトコルが無効になります。構成を更新した後は、.\nginx.exe -s reload を実行して変更を適用します。
nginx -s reload 実行後に Nginx が起動に失敗し、ログに bind() to 0.0.0.0:443 failed というエラーが表示される
これはポートの競合です。netstat -ano | findstr ":443" を実行して、ポート 443 が使用中かどうかを確認し、占有しているサービスを停止してください。
ロックアイコンが表示されない、または「混在コンテンツ」の警告が表示される場合のトラブルシューティング
これは、画像、CSS、JavaScript などのリソースが HTTP 経由でページにロードされている場合に発生します。ページのソースコードを確認し、すべての http:// リンクを https:// に変更するか、/images/logo.png のような相対パスを使用してください。