第14週HTTPS対称鍵非対称鍵

4337 ワード

🌈 HTTPS


HTTPは非暗号化でデータを伝送するため、サーバとクライアント間の通信を容易に傍受することができる.例えば、ログインのためにサーバにパスワードを送信したり、重要な機密ファイルを閲覧している間に悪意のある傍受やデータ改ざんが発生したりします.それを守っているのはHTTPSです.
HTTPSは、SSLまたはTLSアルゴリズムを用いてHTTP要求によるHTTP通信中のコンテンツを암호화하여 데이터를 전송する方法である.
HTTPSプロトコルの1つの特徴は、暗号化されたデータを交換し、中間のインターネットリクエストが盗まれても、その内容が読めないことです.コンテンツは暗号化されて伝送されるため、正しい鍵で復号するまで、何のコンテンツなのか分からない.
HTTPSプロトコルのもう1つの特徴は、ブラウザが応答とともに伝達される証明書情報を表示できることです.
ブラウザは、証明書に証明書が発行されたCA情報を表示し、サーバーへの接続が安全ではないことを示す警告ウィンドウを画面に表示します.
ブラウザは、証明書のドメインとデータを提供するプロバイダのドメインを比較できるため、証明書のドメイン情報とデータプロバイダのドメイン情報は、異なる「仲介者攻撃」を検出し、ユーザーとユーザーのデータをセキュリティ上の脅威から保護することができます.

用語の整理


  • SSL:セキュリティソケット層(Secure Sockets Layer,SSL)
    :SSLは、Webサイトとブラウザ(または2台のサーバ)間で伝送されるデータを暗号化することで、インターネット接続のセキュリティを保護する標準的な技術です.これにより、ハッカーが個人情報や金融情報など、伝送されたすべての情報を閲覧したり盗んだりすることを防止することができます.

  • TLS:伝送層安全(Transport Layer Security,TLS)
    :TLSは最新の技術で、より強力なSSLバージョンです.しかし、SSLはより一般的な用語であるため、セキュリティ証明書は依然としてSSLと呼ばれている.

  • HTTPS:ハイパーテキストプロトコルセキュリティ
    :HTTPSがSSL/TLS証明書を使用してWebサイトを保護する場合、HTTPSはURLウィンドウに表示されます.

  • 証明書
    :クライアントが接続するサーバが信頼できるサーバであることを確認します.
    :SSL通信用の公開鍵をクライアントに提供する.
    :ブラウザでは、証明書のドメインとデータを提供するプロバイダのドメインを比較できます.したがって、証明書のドメイン情報とデータプロバイダのドメイン情報は、異なる「仲介者攻撃」を検出し、ユーザーとユーザーのデータをセキュリティ上の脅威から保護できます.

    中間でハッカーが要求を盗む攻撃が発生すると、証明書のドメインと応答のドメインが異なるため、データを提供するサーバではないことが明らかになります.
    つまり、自分が全く異なるデータプロバイダであることに気づきます.

  • CA
    : Certificate Authority
    :認証証明書を発行する機関
    :各ブラウザには信頼できるCAがあります.

  • SSL証明書の内容
    : 1. サービス情報(証明書を発行するCA、サービスのドメインなど)
    : 2. サーバ側公開鍵(公開鍵コンテンツ、公開鍵の暗号化方法)

  • たいしょうキー
    :対称鍵とは、同じ鍵を使用して暗号化と復号化を同時に行う暗号化技術を指す.

  • ひたいしょうキー
    :A鍵暗号化を使用してB鍵を使用して復号することができ、B鍵暗号化を使用してA鍵を使用して復号することができる.
    :2つの鍵のうちの1つを비공개키(秘密鍵、秘密鍵、秘密鍵とも呼ばれる)と指定し、もう1つを공개키(公開鍵)と指定します.비공개키는 자신만이 가지고공개키를 타인에게 제공があります.公開鍵を提供する他の人は、公開鍵を使用して情報を暗号化する.暗号化された情報を秘密鍵を持っている人に送信します.秘密鍵の所有者は、この鍵を使用して暗号化された情報を復号する.この過程で公開鍵が漏れても公開鍵が分からなければ情報を解読することができないので安全である.公開鍵は暗号化できるが、復号化できないからだ.
  • 璻SSLの行為方式



    HTTPSは、인증서CA、および비대칭 키 암호화 방식を使用する.

    生活コードSSL

    🌈 ローカル証明書の作成


    mkcertというプログラムを使用して、ローカライズで信頼できる証明書を作成します.

    取付辯mkcert


    ubuntu mkcertの作成

    $ sudo apt install libnss3-tools
    $ wget -O mkcert https://github.com/FiloSottile/mkcert/releases/download/v1.4.3/mkcert-v1.4.3-linux-amd64
    $ chmod +x mkcert
    $ sudo cp mkcert /usr/local/bin/

    macos mkcertの作成

    $ brew install mkcert
    
    # firefox를 사용할 경우 필요에 따라 설치해주세요.
    $ brew install nss

    作成証明書


    認証機関としてローカルに追加

    $ mkcert -install

    localhostを表すローカル環境の証明書を生成

    $ mkcert -key-file key.pem -cert-file cert.pem localhost 127.0.0.1 ::1
    オプションとして追加されたlocalhost、127.0.0.1(IPv 4)、および:1(IPv 6)で使用可能な証明書が完了しました.cert.pem, key.pemというファイルが生成されたことを確認できます.

    ここで提供されるkeyおよびcertは、クッキー、セッション、およびトークンスプレーで引き続き使用されます.
    証明書には公開鍵と証明書発行機関の署名が含まれているため、鍵を公開することができます.pemの場合、gitにコミットするのではなく、パスワードとして処理する秘密鍵です.

    椃HTTPSサーバーの作成

    const https = require('https');
    const fs = require('fs');
    
    https
      .createServer(
        {
          key: fs.readFileSync(__dirname + '/key.pem', 'utf-8'),
          cert: fs.readFileSync(__dirname + '/cert.pem', 'utf-8'),
        },
        function (req, res) {
          res.write('Congrats! You made https server now :)');
          res.end();
        }
      )
      .listen(3001);
    サーバ実行後の接続https://localhost:3001道。