httpsの原則と実践

ウェブサイトの証明書の有効期限が迫っているので、HTTPS関連する。

前提

HTTPS端的に言えば、情報を暗号化して送信し、情報漏えいを防ぐことであり、事前にいくつかの概念を理解する必要があります。

暗号化

最初に最も単純な暗号化、置換方法について話しましょう。各文字は新しい文字に対応します。

たとえば、平文は でありwindliang、暗号文は上記のマッピング関係によるものですpbgwebtgz

この暗号化アルゴリズムは古代に使用されていましたが、単語の頻度分析により、力ずくの列挙は簡単に解読できるため、このアルゴリズムは現代では使用されなくなりました。

暗号化アルゴリズムが何であれ、平文、暗号文、鍵、およびアルゴリズムの 3 つの部分に分けることができます。

ここでのキーは、上記のマッピング テーブルとして理解でき、アルゴリズムは直接マッピングです。

現代の暗号化アルゴリズムでは、キーは一般的に文字列であり、アルゴリズムはより複雑です.さまざまな計算、演算、AND 演算、グループ化などを実行し、素数やモジュラスなどのさまざまな数学的知識を適用します. .. , 大学 ときどき習いましたが、ここでは忘れてしまいました. 以下では簡単な概念のみを紹介します.

対称暗号化

古代の暗号アルゴリズムのプロセスと同じです

アルゴリズムが単純な置換よりも複雑であるというだけです。一般的に使用されるのは、DES アルゴリズム、AES アルゴリズム、3DES アルゴリズム、TDEA アルゴリズム、Blowfish アルゴリズム、RC5 アルゴリズム、IDEA アルゴリズムなどです。その特徴は、暗号化と復号化に同じ鍵を使用することです。

非対称暗号化

以前との最大の違いは、2 つの鍵が含まれていることです。1 つは公開鍵と呼ばれ、もう 1 つは秘密鍵と呼ばれます。また、アルゴリズムは対称暗号化よりも複雑です。

暗号化には公開鍵と秘密鍵の両方を使用できます. 公開鍵で暗号化した後は, 秘密鍵でのみ復号化できます. 秘密鍵で暗号化した後は, 公開鍵でのみ復号化できます.

一般的な非対称暗号化アルゴリズムには、DSA アルゴリズム、RSA アルゴリズム、Elgamal アルゴリズム、ナップザック アルゴリズム、Rabin アルゴリズム、DH アルゴリズム、ECC アルゴリズムなどがあります。アルゴリズムが非常に複雑なため、非対称暗号化と復号化には非常に時間がかかります。

ハッシュアルゴリズム

これは特別な暗号化と見なすことができます。

これは一方向であり、一度暗号化すると元に戻すことはできません。任意の長さの平文文字列は、より短い (通常は固定長の) バイナリ文字列 (値) にマッピングできHash、異なる平文を同じHash値。

現在一般的なHashアルゴリズムには、国内のSM3アルゴリズムだけでなく、国際的な MD (Message Digest) シリーズや SHA (Secure Hash Algorithm) シリーズのアルゴリズムもあります。

この機能を利用して、テキストが改ざんされていないかどうかをすばやく比較し、平文とhash値を、Hash受信後に平文の値を再生成し、受信したHash値、Hash値が異なる場合はそれを比較することができます。改ざんされていることを意味します。

パスノート

教室の最前列にいる Xiao Ming が、最後の列にいる Xiao Hong にメモを渡したいとします。

ダイレクトパス

最初の最も簡単な方法は、渡したいことを紙に直接書き、それを積み重ねて、教室の真ん中にいる人に渡すのを手伝ってもらうことです.

しかし、安全ではない最大の問題が 1 つあります. 真ん中の特定の生徒が突然興味を持った場合、彼は直接メモを開くと、内容が一目でわかります.

対称暗号化

シャオミンはそれについて考えた.シャオホンと私は対称暗号化アルゴリズムに同意した.最初に紙に鍵を書いてシャオホンに渡し、次にそれを暗号化して紙に書いてシャオホンに渡したので安全だ. .

途中でメモを渡していたシャオ・ギャングは、ふと気になってメモを開いたが、今度は好奇心が満たされないまま、紙に書かれた内容が暗号化されていて全く理解不能であることに気付いた。

しかし、シャオ・ファがメモを開いたとき、彼はメモの内容を理解していたので、突然大声で笑い、シャオ・ミンが初めて鍵付きのメモを渡したとき、シャオ・ファはすでにそれを開き、密かに書き留めていました。したがって、その後の送信では、Xiaohua が見たいと思う限り、分解後にキーで復号化できます。

非対称暗号化

Xiao Ming と Xiao Hong は、これではうまくいかないと考えたので、非対称暗号化を使用する必要があると言いました.私たちのメモの内容は相手の公開鍵で暗号化されており、メモを取得した後、私たちは自分の秘密鍵を使用して復号化します. . このように、私たちだけが秘密鍵を持っているので、メモが他の人に見られても問題ありません。

そのため、最初にメモを渡すとき、Xiao Ming は自分の公開鍵を書き留めて Xiaohong に渡し、Xiaohong はそれを公開鍵で暗号化してメモに書きました。Xiaohong も彼女の公開鍵を書き留めて Xiaomiing に渡し、Xiaoming はこの公開鍵を使用して暗号化し、メモに書き留めます。

シャオミンがシャオホンによって書かれたメモの内容を受け取った後、メモはシャオミンの公開鍵で暗号化されているため、シャオミンはそれを自分の秘密鍵で復号化するだけで正常に読み取ることができます。

シャオホンも同じです。

Xiaohuaも、XiaohongとXiaomingが最初にメモを渡したときに2つの公開鍵を書き留めましたが、メモの内容が公開されたため、XiaohuaがXiaohongとXiaomingの間のその後のチャットを復号化する方法はありませんでした.復号化するには、秘密鍵を使用する必要がありますが、秘密鍵は Xiaohong と Xiaoming の手にあり、他の誰も何もできません。

しかし、シャオ・ギャングはこの時こっそりと笑った。なぜなら、彼が初めてノートで公開鍵を渡したとき、シャオ・ギャングはこっそり手足を動かしたからである。

シャオ・ミンがシャオ・ホンに公開鍵を渡したとき、シャオ・ギャングは密かにメモを自分の公開鍵に置き換えたので、シャオ・ホンはシャオ・ギャングの公開鍵を手に入れました。

XiaohongがXiaogangに公開鍵を渡したとき、XiaogangもXiaohongの公開鍵を自分のものに置き換えたため、Xiaomingが取得したのはXiaogangの公開鍵でした。

シャオミンが受け取った公開鍵で暗号化してシャオガンに渡すと、シャオガンは自分の秘密鍵で復号化し、シャオホンの公開鍵で暗号化してシャオホンに送った。Xiao Hong と Xiao Ming は安全な場所で通信していると思っていましたが、Xiao Gang はそれをすべて見ていました。

署名付き証明書

このとき、シャオホンさんとシャオミンさんが遭遇した問題は、受け取った公開鍵が相手のものかどうかを確認できないことでした。

Xiao Liang は立ち上がって、「証明書の内容に自分の秘密鍵で署名し、公開鍵を黒板に直接書きます。具体的なプロセスは次のとおりです。

あなた自身の名前とあなたの公開鍵を証明書に書いてください。証明書の内容を一度作成しHash、これを私の秘密鍵Hashで、暗号化された内容を証明書に載せます。

これで、証明書にはあなたの名前と公開鍵、および暗号化されたHash値が。

他人の証明書を取得したら、まず名前が目的のものであるかどうかを確認し、証明書の内容を計算してHash値をHash。この2つを見てください値が同じであれば、証明書が改ざんされていないことを証明し、証明書の公開鍵を安心して使用できます.

証明書チェーン

彼は証明書を取得したので、シャオミンがシャオホンに渡した証明書を取得した後、シャオガンは何もできません。

まず、証明書の内容を変更することはできません.変更すると、最終的なHash値、他の人はそれが偽物であると判断します.

第二に、証明書には自分の名前が書かれているため、証明書を自分のものに置き換えることはできません.証明書が通過した後、XiaohongはそれがXiaogangの証明書であることを確認したため、直接公開されました.

クラスの生徒たちは、これも素晴らしいことに気づき、メモの内容を誰も読まなくなりましたが、シャオ・リャンは忙しくなり、ますます多くの人が彼に証明書を要求しました。Xiao Liang は、私に Xiao Yang に証明書を発行してもらい、Xiao Yang に将来他の人に証明書を発行するように依頼します。

そこで後ろの人はシャオヤンに証明書を発行するように頼んだので、メモを渡すとき、自分の証明書に加えて、シャオヤンの証明書も書かなければなりません。受信者はシャオ・ヤンの証明書の公開鍵を使って受け取った証明書が本物かどうかを検証し、シャオ・ヤンの証明書は黒板に書かれたシャオ・リャンの公開鍵を使って本物かどうかを検証します。

将来、Xiao Yang も忙しすぎると感じており、誰かに証明書を発行する権限を与える可能性があるため、最初にメモを渡すときに、チェーン全体のすべての証明書を作成し、確認する必要があります。真正性を順番に確認しますが、最終的には、プライマリ証明書は黒板の公開鍵で確認する必要があります。これは誰でも見ることができ、偽物であってはならないからです。

非対称暗号化と対称暗号化の組み合わせ

しばらく教室でメモを渡してみると、非対称アルゴリズムで暗号化と復号化を行うには時間がかかりすぎることに誰もが気づきました. もともと、元のテキストは102つの安心、面倒すぎる。

そこでシャオミンはシャオホンに「対称暗号化アルゴリズムを組み合わせることはできますか?」と言いました。証明書を受け取り、その証明書が信頼できるものであることを確認したら、対称暗号化キーを生成し、証明書の公開キーで暗号化し、メモに書き込んでアップロードします。それを受け取ったら、独自の秘密鍵を使用して復号化し、対称暗号化アルゴリズムの鍵を取得すると、今後のメモはすべて暗号化され、対称暗号化によって私に送信されます。これにより、送信のセキュリティが確保されるだけでなく、暗号化と復号化の時間を節約できます。

中間の誰かが暗号化された鍵を手に入れたとしても、あなたの秘密鍵がなければ何もできません。

小紅:すごい!早くやれよ。

HTTPS の動作

証明書について

実際の証明書には、ドメイン名情報、有効期間、前述の署名など​​、さらに多くのものが含まれます。

上の図の証明書チェーンと同様に、証明書の有効性は証明書の公開鍵によって検証されます。ルート証明書とは、下図のように事前にシステムに組み込まれる黒板に書かれた公開鍵に相当するもので、システム内のすべてのルート証明書です。

ブラウザは、現在のドメイン名が証明書のドメイン名と一致していること、および証明書が有効であることを確認します。パス ロックが発生し、そうでない場合は危険プロンプトが表示されます。

対称暗号化の鍵

実際のプロセスでは、対称暗号化アルゴリズムのキーは、複数回の送信を経て最終的に 1 つのキーに結合されます. プロセスについては、SSL / TLS の動作原理と詳細なハンドシェイク プロセスを参照してください.

対称暗号化の鍵は、と の3 つの部分client randomを組み合わせて生成されます。server randompremaster secret

練習

Alibaba Cloud を例に取り、プロセス全体を記録します。

Alibaba Cloud の証明書、[証明書の作成] をクリックします。

年間無料20クレジット:

[今すぐ購入] をクリックして、その後の支払いプロセスを完了します。

購入が完了したら、コンソールに戻り、[証明書の作成] をクリックします。ページに申請する追加の証明書が表示されます。次に、証明書の申請をクリックします。

独自のドメイン名を入力し、[Submit for Review] をクリックします。

Alibaba Cloud のドメイン名の場合、DNS次のTXTレコードが。

独自のDNS分析。

次に、電子メール通知を待ちます。

リストを更新すると、証明書が発行されます。

右側の [nginxダウンロード。

ダウンした 2 つのファイルは、.pem証明書.keyと秘密鍵です。

次に、自分のサーバーにログインします. Web サイト構築のチュートリアルに従って、Web サイトの構成が完了していることが前提です。

最初に上記の 2 つのファイルの名前を変更し、任意の方法でサーバーにFTPアップロードでき。

次に、 から自分のサーバーsshにログインしssh -p22 root@你的服务器 ip、アップロードしたばかりのサーバー証明書とキーを の対応する位置nginxに。

mv -f /var/ftp/pub/windliang.pem /etc/nginx/cert/
mv -f /var/ftp/pub/windliang.key /etc/nginx/cert/ 

/var/ftp/pub/windliang.pem/var/ftp/pub/windliang.key独自のファイルアドレスに変更する必要があります

ポートを監視するには、Web サイトnginxの。https443

server {
        listen 443 ssl;   #SSL协议访问端口号为443。此处如未添加ssl,可能会造成Nginx无法启动。
        server_name windliang.wang;  #将localhost修改为您证书绑定的域名,例如:www.example.com。
        root html;
        index index.html index.htm;
        ssl_certificate cert/windliang.pem;   #替换成您证书的文件名。
        ssl_certificate_key cert/windliang.key;   #替换成您证书的密钥文件名。
        ssl_session_timeout 5m;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;  #使用此加密套>
件。
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;   #使用该协议进行配置。
        ssl_prefer_server_ciphers on;
        location / {
                root /root/myblog;   #站点目录。
                index index.html index.htm;
      }
}
server {
    listen 80;
    server_name www.windliang.wang;
    return 301 $scheme://windliang.wang$request_uri;
} 

次の再起動nginx

nginx -s reload 

この時点で、Web サイト証明書を再度開くと、設定が成功します。

## 最後に、すべての人にフロントエンド パッケージを用意します。54冊、2.57Gフロントエンド関連の電子書籍「フロントエンドインタビュー集(回答・分析付き)」、難解・要点解説動画チュートリアル(フルセット)を収録。 **必要なパートナーは、下のカードをクリックして無料で受け取り、共有できます**

おすすめ

転載: blog.csdn.net/qq_53225741/article/details/129771418