nginx と openssl で https を実装する方法

nginx と openssl で https を実装する方法

サーバーデータがSSL証明書を使用して暗号化および認証されていない場合、ユーザーのデータはプレーンテキストで送信されます。これにより、パケットキャプチャツールを使用してユーザーのパスワード情報を取得することが可能になり、非常に危険です。また、データの一貫性と整合性を検証することは不可能であり、送信中にデータが変更されていないことを保証することはできません。したがって、Web サイトにユーザー アカウントなどの重要な情報が含まれる場合は、通常、SSL 証明書を構成して使用し、https プロトコルを実装する必要があります。

実稼働環境での SSL 証明書は、サードパーティの認証機関を通じて購入する必要があります。プロフェッショナル版の OV 証明書 (ブラウザのアドレスバーに会社名が表示されない) とアドバンス版の EV 証明書 (会社名を表示できる) に分かれています。証明書で保護されるドメイン名の数も価格に影響します (たとえば、www 証明書とワイルドカード * 証明書では価格が異なります)。また、サードレベルドメイン名はサポートされていません。テスト中に、証明機関として自分で証明書を作成できます。ブラウザには証明書が期限切れまたは無効であることを示す赤色で表示されます。黄色の場合は、Web サイトの一部の接続がまだ http プロトコルを使用していることを意味します。

どちらの方法を使用する場合でも、証明書を取得した後の Nginx の設定は同じなので、ここでは OpenSSL の設定と証明書の作成について詳しく説明します。

1. 環境を整える

1) nginx サービス

2) SSLモジュール

[root@ns3 ~]# systemctl 停止firewalld
[root@ns3 ~]# iptables -F
[root@ns3 ~]# setenforce 0
[root@ns3 ~]# yum -y インストール pcre zlib pcre-devel zlib-devel
[root@ns3 ~]# tar xf nginx-1.16.0.tar.gz -C /usr/src/
[root@ns3 ~]#cd /usr/src/nginx-1.16.0
[root@ns3 ~]#./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module --with-http_flv_module --with-http_gzip_static_module&&make && make install #後で必要なモジュールを一度にインストールします

3) opensslがインストールされているかどうかを確認する

[root@ns3 ~]# rpm -qa openssl 2 openssl-1.0.1e-42.el7.x86_64

インストールされていない場合

[root@ns3 ~]# yum -y openssl をインストール openssl-devel

2. ルート証明書CAを作成する

1. CA秘密鍵を生成する

[root@ns3 ~]# cd zhengshu/
[root@ns3 zhengshu]# openssl genrsa -out local.key 2048
RSA秘密鍵の生成、2048ビット長の係数
.............................................................................................................................................................................................................................................................................+++
.............................................................................................................................................................................................................................+++
eは65537(0x10001)
[root@ns3 鄭州]# ls
ローカルキー

2. CA証明書要求を生成する

[root@ns3 zhengshu]# openssl req -new -key local.key -out local.csr
組み込まれる情報を入力するよう求められます
証明書リクエストに追加します。
これから入力するのは、識別名または DN と呼ばれるものです。
フィールドはたくさんあるが、一部は空白のままにしておくこともできる
いくつかのフィールドにはデフォルト値があります。
「.」を入力すると、フィールドは空白のままになります。
-----
国名 (2 文字コード) [XX]:CN #州または県名 (フルネーム) []:BJ #地域名 (例: 市) [デフォルトの市]:BJ #組織名 (例: 会社) [デフォルトの会社 Ltd]:
組織単位名(例:セクション)[]:test #部門共通名(例:あなたの名前またはサーバーのホスト名)[]:test #ホスト名メールアドレス[]:[email protected] #メール次の「追加」属性を入力してください
証明書のリクエストと一緒に送付されます
チャレンジパスワード []:wuminyan #Password オプションの会社名 []:wuminyan #Name [root@ns3 zhengshu]# ls
ローカル.csr ローカル.キー
req: これは、証明書要求ファイルの生成、証明書の検証、およびルート CA の作成を提供する大規模なコマンドです。
 -new: 新しい証明書要求を生成することを意味します -x509: 証明書を直接出力します -key: 証明書要求を生成するときに使用する秘密鍵ファイル -out: 出力ファイル

3. CAルート証明書を生成する

CA 証明書を生成するこのコマンドはわかりにくいです。1. 秘密鍵を使用して証明書要求ファイルを生成します。2. 証明書要求ファイルを使用して最終証明書を生成します。-in 証明書要求ファイルを使用して証明書を生成します。-signkey は秘密鍵を指定します。これはまだ理解していないパラメータです。[root@ns3 zhengshu]# openssl x509 -req -in local.csr -extensions v3_ca -signkey local.key -out local.crt
署名OK
件名=/C=CN/ST=BJ/L=BJ/O=Default Company Ltd/OU=test/CN=test/[email protected]
秘密鍵の取得

3. CA証明書に基づいてサーバー証明書を作成する

1. サーバーの秘密鍵を生成する

[root@ns3 zhengshu]# openssl genrsa -out my_server.key 2048
RSA秘密鍵の生成、2048ビット長の係数
...............................+++
...............................+++
eは65537(0x10001)
[root@ns3 鄭州]# ls
local.crt local.csr local.key my_server.key

2. サーバー証明書要求を生成する

[root@ns3 zhengshu]# openssl x509 -req -in local.csr -extensions v3_ca -signkey local.key -out local.crt
署名OK
件名=/C=CN/ST=BJ/L=BJ/O=Default Company Ltd/OU=test/CN=test/[email protected]
秘密鍵の取得
[root@ns3 zhengshu]# openssl genrsa -out my_server.key 2048
RSA秘密鍵の生成、2048ビット長の係数
...............................+++
...............................+++
eは65537(0x10001)
[root@ns3 zhengshu]# openssl req -new -key my_server.key -out my_server.csr
組み込まれる情報を入力するよう求められます
証明書リクエストに追加します。
これから入力するのは、識別名または DN と呼ばれるものです。
フィールドはたくさんあるが、一部は空白のままにしておくこともできる
いくつかのフィールドにはデフォルト値があります。
「.」を入力すると、フィールドは空白のままになります。
-----
国名(2文字コード)[XX]:CN
州または県名(フルネーム)[]: BJ
地域名(例:市)[デフォルトの市]: BJ
組織名(例:会社)[Default Company Ltd]:
組織単位名(例:セクション) []:test
共通名(例:あなたの名前またはサーバーのホスト名)[]:test
メールアドレス []:[email protected]

次の「追加」属性を入力してください
証明書のリクエストと一緒に送付されます
チャレンジパスワード []:wuminyan
オプションの会社名 []:wuminyan
[root@ns3 鄭州]# ls
local.crt local.csr local.key my_server.csr my_server.key

3. サーバー証明書を生成する

[root@ns3 zhengshu]# openssl x509 -days 365 -req -in my_server.csr -extensions v3_req -CAkey local.key -CA local.crt -CAcreateserial -out my_server.crt
 署名OK
 件名=/C=CN/ST=BJ/L=BJ/O=Default Company Ltd/OU=test/CN=test/[email protected]
 CA秘密鍵の取得

4. SSLをサポートするようにnginxを設定する

[root@ns3 ~]# vim /etc/nginx.cof #ソフトリンクはここに設定されます: lln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
サーバー{
        聞く 80;
        listen 443 default ssl; #ポート 433 をリッスンします keepalive_timeout 100; #キープアライブをオンにします クライアント要求の数を減らすためにキープアライブの長い接続を有効にします ssl_certificate /root/zhengshu/local.crt; #サーバー証明書の場所 ssl_certificate_key /root/zhengshu/local.key; #サーバー秘密鍵の場所 ssl_session_cache shared:SSL:10m; #キャッシュセッション ssl_session_timeout 10m; #セッションは 10 分で期限切れになります ssl_ciphers HIGH:!aNULL:!MD5;
                   ssl_prefer_server_ciphers をオン;

        サーバー名 test.com;
        文字セット utf-8;

        位置 / {
            ルートhtml;
            インデックス index.html index.htm;
        }

    }
}

5. テスト

https://192.168.200.115 と入力します

nginx と openssl を組み合わせて https を実装する方法についての記事はこれで終わりです。nginx で https を実装する方法についてさらに詳しく知りたい場合は、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続きご覧ください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Linux に Nginx をインストールする方法 (pcre と openssl)
  • OpenSSL のセキュリティ脆弱性に対処するために Nginx サーバーを調整する方法
  • Nginxドメイン名転送のhttpsアクセスの実装
  • 複数のドメイン名に対する Nginx リバース プロキシを使用した HTTP および HTTPS サービスの実装

<<:  インライン要素スパンの最小高さの定義

>>:  MySQL マルチバージョン同時実行制御メカニズム (MVCC) ソースコードの詳細な説明

推薦する

40 CSS/JSスタイルと機能的な技術処理

1-ドロップダウン選択ボックスのスタイル設定 - ドロップダウン リストを変更します。 2- <...

HTMLでのフォーム送信の実装

フォーム送信コード1. ソースコード分析 <!DOCTYPE html> <htm...

vue3 のストアを使用してスクロール位置を記録する例

目次全体的な効果コンテナのスクロールイベントをリッスンするストア内の構成ページが戻るときのスクロール...

キャッシュサーバーを構築するためのMemcached方式

序文多くの Web アプリケーションは、リレーショナル データベース管理システム (RDBMS) に...

JavaScript シングルスレッドと非同期の詳細

目次1. タスクキュー2. 混乱を招く問題を説明する1. setTimeout(f1,0)とは何です...

経験者のHTMLの書き方と理由の分析

1. ナビゲーション: 順序なしリストとその他のラベル要素ナビゲーションを記述するために最も一般的に...

MySQL データベース クエリ パフォーマンス最適化戦略

クエリを最適化するExplain ステートメントを使用してクエリ ステートメントを分析するExpla...

シンプルなタブバー切り替えコンテンツバーを実装するJavaScript

この記事では、タブバーの切り替えコンテンツバーを簡単に実現するためのJavaScriptの具体的なコ...

NestJsはMongooseを使用してMongoDBを操作する

最近、NestJs フレームワークを学び始めました。学習コストは他のフレームワークよりもはるかに高く...

UbuntuへのDocker CEのインストール

この記事は、Ubuntu 17.10 での Docker CE のインストールを記録するために使用さ...

JSの矢印関数におけるこのポイントの詳細な説明

矢印関数は ES6 の新機能です。独自の this はありません。その this ポイントは外部のコ...

H5ゲームをnginxサーバーにデプロイする方法の詳細な説明

自己学習型ゲーム開発の道において、最も充実した瞬間は、自分でミニゲームを作り、友達と共有して試しにプ...

Node.jsがES6モジュールを処理する方法の詳細な説明

目次1. 2つのモジュールの違い2. Node.jsとの違い3. CommonJSモジュールの読み込...

mysqlを完全にアンインストールします。個人テストです!

MySQL をクリーンアンインストールします。個人的にテストしたところ、今回はようやくうまくいきま...

MySQLテーブルにタイムスタンプを追加するいくつかの方法

シナリオ:テーブル内のデータは、同期ツールを使用して他のデータベースと同期する必要があり、増分同期に...