Nginx は https アクセスを構成して、ブラウザーから直接アクセスできる ssl 自己署名証明書を生成します。

質問

Nginx は、nginx への HTTPS アクセスをサポートするために自己署名 ssl 証明書を構成します. ブラウザーで nginx にアクセスすると、リスクがあることを確認するプロンプトが表示されます. 他の主要な Web サイトにアクセスする際にも https プロトコルが使用されますが、リスクがあることを確認せずに直接アクセスできるのはなぜですか?

疑問を払拭する

ssl証明書から始めましょう。https プロトコルを使用するか、ssl 認証を使用するかは、バックグラウンドの Web サイト サーバーによって決定されます。https プロトコルを使用する場合は、バックグラウンド サービスで ssl 証明書を構成できます。SSL 証明書を構成した後、ブラウザーは https プロトコルを使用して Web サイト サービスにアクセスする必要があります。このプロセスでは、ブラウザは最初に Web サイト サーバーで証明書情報を取得し、次にブラウザ自体が信頼できる証明書のリストを維持します。Web サイト サービスから返された証明書が信頼できる証明書リストにある限り、サービスは安全であり、ブラウザーはサービスに直接アクセスできます。返された証明書が信頼できるリストにない場合、ブラウザーはサービスが安全でないと判断し、警告メッセージを送信しますが、ユーザーは Web サイトを信頼してサービスへのアクセスを続行することを手動で選択できます。
上記の説明からわかるように、ssl 証明書を使用した後、サーバーの証明書がセキュリティ上の理由で信頼されているかどうかを確認するのはブラウザーであり、その信頼を使用して直接アクセスできます。Dachang の Web サイトの HTTPS プロトコル ブラウザは、アラームを発行しませんでした。これは、Dachang がサード パーティによって承認された SSL 証明書を使用しているためです.これらの証明書ブラウザは、デフォルトで信頼できる証明書であるため、直接アクセスできます. ただし、サードパーティが承認した SSL 証明書は、通常、取得に料金がかかります。
このプロジェクトで使用されている証明書は自己署名証明書であり、ブラウザの信頼できる証明書リストにないため、アラームが発行されます。

上記は https 単一認証、つまりブラウザ認証バックグラウンド サービス証明書です。双方向認証を有効にすることもできます。つまり、ブラウザーがサーバー証明書を認証し、サーバーもブラウザー証明書を認証します。ただし、公開 Web サイトの場合、通常は一方向認証で十分です。

解決

上記の説明から、自己署名証明書がブラウザで警告されないようにする場合は、それをブラウザの信頼リストに追加する必要があることがわかります。nginx が証明書を生成してブラウザの信頼リストに追加する方法をインターネットで検索しましたが、それらのほとんどはブラウザのアラームをスキップできません。以下に、ブラウザーのアラームを正常にスキップできる証明書の生成方法と構成方法を記録します。
Java が提供するツールを使用して生成します。
最初の一歩:

keytool -genkeypair -keyalg RSA -dname "CN=Demo" -alias server -keystore server.jks -keypass 123456 -storepass 123456 -ext SAN=dns:域名,ip:后端服务ip

server.jks ファイルを生成します。

ステップ2:

keytool -exportcert -file server.cer -alias server -keystore server.jks -storepass 123456

server.cer ファイルを生成します。

3 番目のステップ:

keytool -importcert -file server.cer -alias server1 -keyalg client_trusk.jks -storepass 123456 -keypass 123456

出力は次のとおりです。yes
ここに画像の説明を挿入
と入力するだけです。

4番目のステップ:

keytool -importkeystore -srckeystore server.jks -destkeystore server-pkcs12.p12 -deststoretype PKCS12

ここに画像の説明を挿入
対応するパスワードを入力するだけです。server-pkcs12.p12 ファイルを生成します。

5番目のステップ:

openssl x509 -inform der -in server.cer -out server-pem.pem

server-pem.pem ファイルが生成されます。

ステップ 6:

openssl pkcs12 -nocerts -nodes -in server-pkcs12.p12 -out server.key

server.key ファイルを生成します。

ステップ 7:
server.key ファイルと server-pem.pem ファイルを nginx サービスの構成構成ファイルに構成し、server.cer ファイルをブラウザーの信頼できるリストにインストールします。このように、ブラウザが nginx にアクセスすると、警告なしで直接アクセスできます。

参考記事:Nginx証明書の設定:cerファイルとjksファイルをnginx certificate.crtとkeyファイルに
(注:参考記事の方法には問題があります。参考記事に従って設定したnginxではブラウザにアラームをスキップさせることはできません)このブログは、最適化および修正された記事を更新します)

拡大

上記の操作では、合計で次のファイルが生成されました。
ここに画像の説明を挿入
最終的には、そのうちの 3 つだけが使用されました。では、これらのファイルは何のためにあるのでしょうか? 詳しくは、PEM、DER、CRT、CER、KEYなどの各種証明書やキーファイルのサフィックスの説明の記事を参照してください。

上記の手順では、最初の手順で jks ファイルが生成され、jks ファイルは Java キーストアを表し、証明書と秘密鍵の両方が含まれています。

2 番目のステップでは、最初のステップで生成された jks ファイルで、cer ファイルがエクスポートされます。cer ファイルには証明書のみが含まれ、秘密鍵は保存されません。通常、Linux は .crt サフィックスを使用し、.cer は Windows サフィックスです。jks には秘密鍵と証明書の両方が含まれているため、2 番目のステップで証明書が抽出され、cer ファイルになります。また、この cer ファイルは、ブラウザの信頼できるリストに最終的にインストールする必要がある証明書ファイルでもあります。

3 番目のステップも cer 証明書に対する操作です。たとえば、証明書を信頼できるようにする、操作を固定する、覚えておいてください。

4 番目のステップは、1 番目のステップで生成された jks ファイルを p12 形式のファイルに変換することです。p12 ファイルはバイナリ形式で、証明書と秘密鍵の両方が含まれています。jks ファイルの形式が変更され、p12 にも証明書と秘密鍵が含まれていることがわかります。

5 番目のステップは、cer 証明書を pem 形式に変換することです。pem ファイルは、Base64 ASCII でエンコードされたプレーン テキスト ファイルです。証明書であろうとキーであろうと、pem 形式であれば、テキスト エディターで開くと同じように、長い文字列の文字列が表示されます。pem は単なるファイル形式であり、証明書と秘密鍵の両方を pem 形式に変換できることがわかります。ここでは、証明書を pem 形式に変換します。

6 番目のステップは、p12 ファイルを .key ファイルに変換することです.key ファイルは秘密鍵であり、証明書と 1 つずつペアになっています。p12 ファイルの秘密鍵が抽出されようとしています。

7 番目のステップは、.key ファイル (秘密鍵) と .pem ファイル (証明書) を nginx に構成し、.cer ファイル (Windows 形式の証明書) をブラウザーの信頼リストに構成して、ブラウザーのアラームをスキップすることです。

公開鍵/秘密鍵/証明書の違い

ssl証明書には、しばらくの間公開鍵、しばらくの間秘密鍵、そしてしばらくの間証明書があり、完全にだまされています。整理してみましょう:
まず、秘密鍵がサーバーに配置されます。上記の nginx と同様に、.key ファイル (秘密鍵) はサーバーに配置されます。
The certificate is the SSL certificate configured in the server. たとえば、nginx の pem ファイルが証明書であり、証明書には公開キーも含まれています。ブラウザが SSL プロトコルを使用して Web サイトにアクセスすると、Web サイトの証明書と公開鍵が同時に取得されます。次に、ブラウザは取得した公開鍵を取得してウェブサイトに送信し、サーバーに到達した後、サーバーは秘密鍵を使用してデータを復号化します。したがって、https は非対称暗号化を使用してデータのセキュリティを確保します。

SpringBoot プロジェクト構成 https アクセス 単一認証 Google 有効証明書 の記事では、.keystore ファイルが 1 つだけバックグラウンドで構成されています。これは、.keystore ファイルが証明書ファイルであるだけでなく、公開鍵と秘密鍵も含まれているためです。

おすすめ

転載: blog.csdn.net/qq1309664161/article/details/127962653