TIL[認証/セキュリティ]ベース
9964 ワード
HTTPS (HTTP + Secure)
HTTPSはHTTPプロトコルの内容を暗号化し,補完性を高めた.既存のHTTPは,リクエストの内容を見たい人がいれば,そのまま調べることができる.これにより、重要な情報が露出しやすくなります.
しかし、HTTPSは要求されたコンテンツを暗号化するため、情報が漏洩しても正しい鍵がなければ、どのようなコンテンツなのか分からないため、データプロバイダの身元を保証することができる.
認証の重要な理由の1つは、データ・プロバイダのアイデンティティを確保することです.
HTTPS特性
CA (Certificate Authority)
非対称鍵暗号化(公開鍵暗号化)
鍵Aで暗号化=>鍵Bでのみ復号できます!
Hand Shakeは互いに検証し、サーバはクライアントの公開鍵のペアを渡す.
クライアントは、転送された鍵を使用して、サーバと鍵を作成する情報を暗号化して転送します.
クライアントと同様に、サーバは任意の数の情報を暗号化して渡すことができます.
クライアントとサーバは、作成および交換された情報に基づいて鍵を生成します.
クライアントは,それぞれ生成した鍵に基づいてテキストにデータを作成する秘密鍵を用いて暗号化して転送する.
サーバも作成した秘密鍵を使用して復号し、クライアントに再暗号化して転送します.
クライアントが同じコンテンツのデータの復号に成功した場合、鍵は正常に作成されました.(HTTPS接続成功)
HTTPS専用証明書の発行
mkcert
という名前のプログラムを使用して、ローカル環境で信頼できる証明書を発行できます.Ubuntu
$ sudo apt install libnss3-tools
$ wget -0 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$ brew install mkcert
$brew install nss
証明書の生成$ mkcert -install
認証機関としてローカルに追加$ mkcert -key-file key.pem -cert-file cert.pem localhost 127.0.0.1 ::1
ローカル環境の証明書の作成=>
cert.pem
、key.pem
ファイルを生成します.(key.pemの場合は秘密鍵でgitには提出されず、パスワードのように扱われます)
HTTPSサーバーの作成
node.js 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);
express.使用const https = require('https');
const fs = require('fs');
const express = require('express');
const app = express();
https
.createServer(
{
key: fs.readFileSync(__dirname + '/key.pem', 'utf-8'),
cert: fs.readFileSync(__dirname + '/cert.pem', 'utf-8'),
},
app.use('/', (req, res) => {
res.send('Congrats! You made https server now :)');
})
)
.listen(3001);
暗号化(Encryption)
アルゴリズムを使用して情報を管理するプロセスでは、情報を所有している人以外に理解できないように、情報のセットを任意の方法で別のセットに変換します.
Hashing
任意の演算を任意の文字列に適用し、他の文字列に変換します.
鉄の法則
1.すべての値についてハッシュ値を計算するのにあまり時間がかかりません.
2.ハッシュ値はできるだけ避け、すべての値に一意のハッシュ値があります.
3.小さな単位変更でも、全く異なるハッシュ値が必要です.
Salt
暗号化が必要な値に「個別の値」を追加することで、結果を変更します.
(ハッシュ値と元の値をテーブル生成して符号化するとリスクが生じる)
Salt:(暗号化する値)+(Salt)=>(ハッシュ値)
Saltを使用する際の注意事項
1.Saltは、各ユーザーとパスワードに一意の値を指定する必要があります.
2.ユーザーアカウントを作成し、パスワードを変更する場合は、新しい任意のSaltを使用して復号する必要があります.
3.二度と使用しない.
4.DBのユーザテーブルに一緒に保存する必要があります.
Cookie
HTTPは無状態で、どのように情報を維持しますか?=>クッキー
Webサイトにアクセスすると、サーバがクライアントに送信する小さなデータ
ドメインにCookieが存在する場合、Webブラウザはドメインにhttpリクエストを発行すると同時にドメインにCookieを送信します.
これらのクッキーの特性により、サーバは、認証情報を含むクッキーをクライアントに送信することができ、クライアントは、要求のように受信したクッキーを送信することができ、無状態のインターネット接続を維持することができる.
しかし、Cookieは長時間保持され、JSでアクセスできるため、Cookieに敏感になるリスクがあります.
Cookie伝達方法
Cookieオプション
Expiresの
Reference
この問題について(TIL[認証/セキュリティ]ベース), 我々は、より多くの情報をここで見つけました https://velog.io/@steel_hyuk___2/TIL-인증-보안テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol