nginx で http でアクセスする Web サイトを https に変更する方法

nginx で http でアクセスする Web サイトを https に変更する方法

1. 背景

私は、nginx を使用して外部 http アクセスを提供するデータ表示用の Web サイトを持っています。また、別のシステムでは、ハイパーリンクを使用して、エンド ユーザーがアクセスできるように私の Web サイトにジャンプします。その後、相手側から、自分のサイトはhttpsでアクセスされており、httpで直接アクセスすることはできないので、httpsアクセスをサポートする必要があると言われました。

したがって、これはディスプレイ Web サイトの参考資料に過ぎず、インタラクティブ Web サイトの作成方法はわかりません。

***私の nginx に関する理解は、設定ファイルを介した Web サイト アクセスの設定に限られており、他の点については深く理解していません。 ***

2. 前提条件

https:

HTTPS (正式名称: Hyper Text Transfer Protocol over Secure Socket Layer または Hypertext Transfer Protocol Secure) は、セキュリティを目的とした HTTP チャネルです。簡単に言えば、HTTP の安全なバージョンです。つまり、HTTP の下に SSL レイヤーが追加されます。HTTPS のセキュリティ基盤は SSL であるため、暗号化された詳細には SSL が必要です。

簡単に言えば、証明書は Web サイトに埋め込まれており、ユーザーがブラウザを通じて Web サイトのサーバーとやり取りするときにデータが暗号化され、セキュリティが確保されます。

証明書システム:

ツリー構造には、複数のレベルの認証局が存在する場合があります。最上位の認証局はルート認証局と呼ばれ、ルート証明書の秘密鍵を保持し、次のレベルの証明書を発行できます。各組織または個人が使用する証明書は、認証局によって発行されます。簡単に言えば、発行局は、その秘密鍵を使用して、証明書所有者の個人情報、公開鍵、およびその他の情報にデジタル署名し、証明書が発行局によって認証されていることを外部に宣言します。証明書は、所有者の身元を確認するために公開アクセスが可能で、発行機関によって承認されています。証明書に対応する秘密鍵は、所有者によって保持され、一般には公開されません。これは、証明書内の公開鍵を使用して他の人が暗号化したプライベート メッセージを復号化するために使用されます。

これは公安機関による身分証明書の発行と似ています。全国にトップレベルの公安部があり、すべての省の公安局の管理に責任を負っています。省レベルは市レベルに責任を負っています。そして最終的には警察署が個人に身分証明書を発行します。身分証明書は警察署の承認を得ており、警察署は上司の承認を得ており、さらにその上司は公安部に至るまで、すべて承認を得ているため、私たちは身分証明書で外部に対して身元を証明できます。違いは、ID カードには証明書ほど多くの情報が含まれていないことです。

注: 証明書は公開鍵暗号化システムに依存しており、公開鍵と秘密鍵の 2 つの鍵が含まれます。公開鍵は暗号化と署名の検証に使用され、秘密鍵は復号化と署名に使用されます。

3. 操作プロセス

3.1 証明書の生成

主なプロセスは、ルート証明書 --> サーバー証明書です。ここでのサーバー証明書は、https アクセスを追加する必要がある、前述の Web サイト サーバーを指します。

1. ルート証明書の秘密鍵を生成し、ルート証明書要求を生成し、自己署名ルート証明書を作成します。

#ルート証明書の秘密鍵を生成する openssl genrsa -out root.key 2048

 #ルート証明書要求を生成する openssl req -new -key root.key -out root.csr

 #ルート証明書の秘密鍵を使用してルート証明書を生成します openssl x509 -req -in root.csr -extensions v3_ca -signkey root.key -out root.crt

ここでルート証明書の秘密鍵を使用した自己署名証明書を使用する理由は、証明書の形式が一貫しており、証明機関によって発行される必要があるためです。ルート証明機関には上位者がいないため、ルート証明機関は自分自身に証明書を発行し、誰もがそれを信頼する必要があります。

2. サーバー証明書の秘密鍵を生成し、サーバー証明書の要求を生成し、ルート証明書の秘密鍵を使用してサーバー証明書を発行します。このサーバー証明書の commonName は、一貫性を保つために、nginx 構成ファイルの server_name に設定する必要があることに注意してください。

#サーバー証明書の秘密鍵を生成する openssl genrsa -out server.key 2048

 #サーバー証明書要求を生成する openssl req -new -key server.key -out server.csr

 #サーバー証明書を生成 openssl x509 -days 365 -req -in server.csr -extensions v3_req -CAkey root.key -CA root.crt -CAcreateserial -out server.crt -extfile openssl.cnf

ここには注意が必要な openssl.cnf ファイルがあります。このファイルには、発行する必要があるサーバー証明書に関する情報が記述されています。内容は次のとおりです。

[必須]
識別名 = 必須識別名
要求拡張機能 = v3_req
 
[必須識別名]
国名 = CN
国名_default = CN
州または省名 = 貴州省
stateOrProvinceName_default = 貴州省
地域名 = 貴州省
localityName_default = 貴州省
organizationalUnitName = (Web ページが IP でアクセスされる場合は IP アドレスを記入します。ドメイン名でアクセスされる場合はドメイン名を記入します)
organizationalUnitName_default = (Web ページへのアクセスが IP による場合は IP を記入します。ドメイン名による場合はドメイン名を記入します)
commonName = (WebページがIPでアクセスされる場合はIPアドレスを記入します。ドメイン名の場合はドメイン名を記入します)
共通名_max = 64
 
[ v3_req ]
# 証明書リクエストに追加する拡張機能
基本制約 = CA:FALSE
keyUsage = 否認防止、デジタル署名、keyEncipherment

3.2 nginxの設定

nginx 構成の HTTPS サーバー セクションのコメントを開き、場所の server_name、ssl_certificate、ssl_certificate_key、root などのフィールドを変更します。

...
 # HTTPS サーバー
 #
 サーバー{
  443 ssl を聴く;
  server_name xxx.com(ウェブサイトアクセスアドレス)

 sslオン;
  ssl_certificate xxx.crt(サーバー証明書);
  ssl_certificate_key xxx.key (サーバー証明書の秘密鍵);

  ssl_session_cache 共有:SSL:1m;
  ssl_session_timeout 5分;

  ssl_ciphers HIGH:!aNULL:!MD5;
  ssl_prefer_server_ciphers をオン;

  位置 / {
   root xxx (フロントエンドコードディレクトリ);
   インデックス index.html index.htm;
  }
 }
...

外部サービスを提供するために nginx を起動します。

3.3 ブラウザアクセス

これまで、サーバー側で https アクセスを構成しましたが、ブラウザーがアクセスすると、ブラウザーがまだ証明書を認識しておらず、安全かどうかわからないため、証明書エラーが表示されます。公安部が発行する身分証明書を身元証明に使用することに問題がないのと同じように、自分で発行した身分証明書を身元証明に使用すると、発行機関の身元を誰も知らないため、他人はそれを信じない可能性があります。

そのため、サーバー証明書の発行機関、つまり上記で生成したルート証明書をブラウザの信頼リストに追加する必要があります。具体的な操作方法は次のとおりです。Windows システムの場合は、ルート証明書ファイルを直接ダブルクリックし、[インストール] をクリックして、信頼できるルート証明機関にインストールします。このとき、スムーズにアクセスできます。

上記は、nginx が http でアクセスされるウェブサイトを https でアクセスするように変更する方法の詳細です。nginx の http アクセスを https アクセスに変更する方法の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • SSL を実装するために nginx を設定する方法の例
  • Nginx は https ウェブサイト構成コード例を実装します
  • https暗号化アクセス用にnginxを設定するための詳細なチュートリアル
  • Nginxドメイン名転送のhttpsアクセスの実装
  • Alibaba Cloud Nginx はドメイン名アクセス プロジェクトを実装するために https を設定します (グラフィック チュートリアル)
  • Nginx設定の原理と実装プロセスの詳細な説明https
  • Nginxはhttpとhttpsの両方のアクセスをサポートするために同じドメイン名を設定します
  • HttpとHttpsの両方をサポートするNginxの詳細な設定
  • 複数のドメイン名に対する Nginx リバース プロキシを使用した HTTP および HTTPS サービスの実装
  • Nginx を使用して https ルートドメイン名への 301 リダイレクトを実装するためのサンプル コード

<<:  MySQL の大きなテーブルで大量のデータを一括削除する方法

>>:  W3C チュートリアル (7): W3C XSL アクティビティ

推薦する

JavaScriptオフセットは、ウィンドウ内でのマウス座標の取得とモジュールのドラッグを実装します。

オフセットOffset はオフセットです。関連プロパティの offset シリーズを使用すると、次の...

キーフリーログインプロセスを実現するためのLinux構成の分析

1.sshコマンドLinux では、ssh コマンドを使用して別のサーバーにログインできます。 2 ...

MySQL5.7.21 解凍版インストール詳細チュートリアル図

私は頻繁にシステムをインストールするので、インストールのたびにいくつかのソフトウェアを再インストール...

SQL実行ステップの詳細な分析

SQL実行ステップの詳細な分析まず、ステートメントが実行される順序を見てみましょう。 (8)選択する...

Webデザインチュートリアル(2):模倣と盗作について

<br />前回の記事では、Webデザインの手順と方法を紹介しました。詳細については、前...

JSscriptタグの属性は何ですか

JS スクリプト タグの属性は何ですか? charset : オプション。 src 属性で指定された...

MySQL SQL 最適化チュートリアル: IN クエリと RANGE クエリ

まず、in() クエリについて説明します。 「High Performance MySQL」では、イ...

モバイル開発におけるHTML5開発の現状を深く理解する

「私たちは次の一連のモバイル製品を HTML5 で作成しています。」 「ええ、最近は多くの人が Ap...

MySQL InnoDB row_id 境界オーバーフロー検証方法の手順

背景クラスメートと row_id の境界問題について話し合ったので、ここで詳しく説明します。 Inn...

MySQL での limit の使用方法は何ですか (推奨)

SELECT * FROM テーブル名制限m,n; SELECT * FROM テーブル LIMI...

Nginx 構成 80 ポート アクセス 8080 とプロジェクト名アドレス メソッド分析

Tomcatはプロジェクトにアクセスします。通常はIP + ポート + プロジェクト名です。 Ngi...

NavicatでMySQLビッグデータをインポートする際のエラーの解決方法

Navicat がエクスポートしたデータはインポートできません。最後に、MySQLコマンドのインポー...

DOM操作テーブルの例(DOMはテーブルを作成します)

1. HTML タグを使用してテーブルを作成します。コードをコピーコードは次のとおりです。 <...

純粋なCSS3で実装されたネオンライト効果

達成される効果は次のとおりです。 マウスがボタン内に移動すると、ネオンライトのような効果が生成され、...