nginx プロキシ サーバーで双方向証明書検証を構成する方法

nginx プロキシ サーバーで双方向証明書検証を構成する方法

証明書チェーンを生成する

スクリプトを使用して、ルート証明書、中間証明書、および 3 つのクライアント証明書を生成します。

このスクリプトは(改変)から派生したものです
https://stackoverflow.com/questions/26759550/how-to-create-own-self-signed-root-certificate-and-intermediate-ca-to-be-importe

中間証明書のドメイン名は localhost です。

#!/bin/bash -x

セット-e

`echo root-ca 中間`のCの場合;

 mkdir $C
 cd $C
 mkdir certs crl newcerts プライベート
 CD ..

 エコー 1000 > $C/シリアル
 $C/index.txt をタッチ $C/index.txt.attr

 エコー '
[ 約 ]
default_ca = CA_default
[ CA_デフォルト ]
dir = '$C' # すべてのものが保存される場所
certs = $dir/certs # 発行された証明書が保存される場所
crl_dir = $dir/crl # 発行された crl が保存される場所
database = $dir/index.txt # データベースのインデックス ファイル。
new_certs_dir = $dir/newcerts # 新しい証明書のデフォルトの場所。
certificate = $dir/cacert.pem # CA証明書
serial = $dir/serial # 現在のシリアル番号
crl = $dir/crl.pem # 現在の CRL
private_key = $dir/private/ca.key.pem # 秘密鍵
RANDFILE = $dir/.rnd # プライベート乱数ファイル
nameopt = デフォルト_ca
certopt = デフォルト_ca
ポリシー = ポリシーマッチ
デフォルト日数 = 365
デフォルト_md = sha256

[ ポリシーマッチ ]
countryName = オプション
州または州名 = オプション
組織名 = オプション
organizationalUnitName = オプション
commonName = 指定
emailAddress = オプション

[必須]
要求拡張機能 = v3_req
識別名 = 必須識別名

[必須識別名]

[v3_必須]
基本制約 = CA:TRUE
' > $C/openssl.conf
終わり

openssl genrsa -out ルートCA/プライベートCA.キー 2048
openssl req -config root-ca/openssl.conf -new -x509 -days 3650 -key root-ca/private/ca.key -sha256 -extensions v3_req -out root-ca/certs/ca.crt -subj '/CN=Root-ca'

openssl genrsa -out 中間/プライベート/中間.キー 2048
openssl req -config middle/openssl.conf -sha256 -new -key middle/private/intermediate.key -out middle/certs/intermediate.csr -subj '/CN=localhost.'
openssl ca -batch -config root-ca/openssl.conf -keyfile root-ca/private/ca.key -cert root-ca/certs/ca.crt -extensions v3_req -notext -md sha256 -in middle/certs/intermediate.csr -out middle/certs/intermediate.crt

mkdir 出力

I in `seq 1 3` の場合;
 openssl req -new -keyout out/$I.key -out out/$I.request -days 365 -nodes -subj "/CN=$I.example.com" -newkey rsa:2048
 openssl ca -batch -config root-ca/openssl.conf -keyfile 中間/private/intermediate.key -cert 中間/certs/intermediate.crt -out out/$I.crt -infiles out/$I.request
終わり

サーバ

nginx の設定

ワーカープロセス 1;

イベント {
  ワーカー接続 1024;
}

ストリーム{
  アップストリームバックエンド{
    サーバー 127.0.0.1:8080;
  }

  サーバー{
    8888 ssl を聴く;
    proxy_pass バックエンド;
    ssl_certificate 中間.crt;
    ssl_certificate_key 中間キー;
    ssl_verify_depth 2;
    ssl_client_certificate ルート.crt;
    ssl_verify_client オプション_no_ca;
  }
}

クライアント

カール\
 -私 \
 -vv \
 -x https://localhost:8888/ \
 --proxy-cert client1.crt \
 --proxy-key client1.key \
 --proxy-cacert ca.crt \
 https://www.baidu.com/

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • CentOS 7.3 で Nginx 仮想ホストを設定する方法
  • Django uwsgi Nginx の実稼働環境への詳細な展開
  • PHP-FPMとNginx間の通信メカニズムの詳細な説明
  • Nginx リバース プロキシを使用してクロスドメイン問題を解決する方法の詳細な説明
  • シェルスクリプト nginx 自動化スクリプト
  • DockerでNginxサーバーを作成する方法
  • dockerでnginxを実行するときにdaemon offが使用される理由についての簡単な説明
  • Dockerでnginxを実行し、ローカルディレクトリをイメージにマウントする方法
  • Docker で nginx の https を設定する方法
  • nginx プロキシ サーバーで双方向証明書検証を構成する方法

<<:  jQueryは、マウスをドラッグしてdivの位置とサイズを変更する方法を実装しています。

>>:  lnmp を使用して MySQL データベースのルート パスワードをリセットする 2 つの方法

推薦する

MySQL ページングパフォーマンスの調査

一般的なページング方法: 1. エスカレーター方式エスカレーター方式では通常、前のページ/次のページ...

WeChatアプレットは日付と時刻に基づいた並べ替え機能を実装

最近、小さなプログラム プロジェクトを引き継いだのですが、リストを日付と時刻で並べ替えるという要件が...

JavaScriptのアンチシェイクとスロットリングとは

目次1. 関数デバウンス1. 画像安定化とは何ですか? 2. 関数のスロットリング2.1 タイマーの...

Nginx で WordPress 擬似静的を設定する方法の例

Baidu の擬似静的の説明を引用します。擬似静的は、実際の静的に相対的です。通常、検索エンジンの使...

クロスブラウザ開発体験のまとめ(I)HTMLタグ

ページにDOCTYPEを追加するブラウザによってタグやスタイルシートの解釈が異なるため、さまざまなブ...

ハードコーディングに別れを告げ、フロントエンドテーブルがインスタンスコードを自動的に計算できるようにします。

序文私のチームが税制モジュールを開発していたとき、計算問題、特にグリッド内の計算を解決するために時間...

Pagoda Panel のインストール時にサーバーがデータベースにリモート接続できない問題の解決策

自分のウェブサイトを構築する予定なので、618 プロモーションを利用して Tencent Cloud...

Linux で MySQL パスワードを忘れた場合の解決策

問題は次のとおりです。mysql -uroot -p コマンドを入力しましたが、パスワードを忘れてし...

JavaScript Three.js でテキストを作成する最初の経験

目次効果テキストの作成を開始するまずフォントローダーを作成するフォントライブラリを読み込むテキストジ...

Linuxカーネルスケジューラソースコード初期化の分析

目次1. はじめに2. スケジューラの基本概念2.1. 実行キュー (rq) 2.2 スケジューリン...

フロントエンド例外 502 不正なゲートウェイの原因と解決策

目次502 不正なゲートウェイ エラーの発生1. 502 不正なゲートウェイ エラーとは何ですか? ...

Linux での MySQL のインストールに関するチュートリアル

目次1. 古いバージョンを削除する2. サーバーのカーネルタイプを確認し、適切なバージョンをダウンロ...

MySQL のユニークインデックスと通常のインデックスのどちらを選択すればよいでしょうか?

ユーザー テーブルを設計するときに、各人の ID 番号が一意であり、検索する必要があるシナリオを想像...

MySQL ストアドプロシージャの長所と短所の分析

MySQL バージョン 5.0 ではストアド プロシージャのサポートが開始されました。ストアド プロ...

CSS3で実装されたダイナミックな星空の背景

結果:実装コードhtml <link href='https://fonts.goog...