Https
HTTPS
HTTPS는 Hyper Text Transfer Protocol Secure Socket layer의 약자입니다
HTTP 요청을 SSL 또는 TLS라는 알고리즘을 이용해 통신하는 과정에서 내용을 암호화하여 데이터를 전송하는 방법입니다
-
인증서
데이터 제공자 신원 보장
도메인 종속
-
CA
공인 인증서 발급 기관
비대칭 키 암호화로 키 A를 암호화하면 키 B로만 복호화 가능
CA가 발급한 인증서를 이용한 데이터를 제공하는 안전한 서버를 사용할 수 있게 사용자를 유도합니다
kaen@iseonghun-ui-MacBookAir ~ % mkcert -key-file key.pem -cert-file cert.pem localhost 127.0.0.1 ::1
Created a new certificate valid for the following names 📜
- “localhost”
- “127.0.0.1”
- ”::1”
The certificate is at “cert.pem” and the key at “key.pem” ✅
It will expire on 2 November 2023 🗓
HTTPS 서버 작성
// node.js 이용
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.js 이용
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);
Hashing
어떠한 문자열에 ‘임의의 연산’을 적용하여 다른 문자열로 변환하는 것
- 모든 값에 대해 해시 값을 계산하는데 오래 걸리지 않아야 한다
- 최대한 해시 값을 피해야 하며 모든 값은 고유한 해시 값을 가진다
- 아주 작은 단위의 변경이라도 완전히 다른 해시 값을 가져야 한다
![HTTPS%2025f786bf50654c48a1ae87b2e35a768b/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA_2021-08-02%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB_10.24.48.png](HTTPS%2025f786bf50654c48a1ae87b2e35a768b/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA_2021-08-02%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB_10.24.48.png)
Salt
암호화해야 하는 값에 어떤 ‘별도의 값’을 추가하여 결과를 변형하는 것
- 암호화만 해놓는다면 해시된 결과가 늘 동일 해시된 값과 원ㄹ ㅐ값을 테이블(레인보우 테이블)로 만들어서 decoding 해버리는 경우도 생긴다
- 원본값에 임의로 약속된 ‘별도의 문자열’을 추가하여 해시를 진행한다면 기존 해시값과 전혀 다른 해시값이 반환되어 알고리즘이 노출되더라도 원본값을 보호할 수 있도록 하는 안전장치
- 기존: 암호화 하려는 값 ⇒ hash 값 Salt 사용 : 암호화하려는 값 + Salt용 값 ⇒ hash 값
Salt 사용시 주의사항
- Salt는 유저와 패스워드 별로 유일한 값을 가져야 합니다
- 사용자 계정을 생성할 때와 비밀번호를 변경할 때마다 새로운 임의의 Salt를 사용해서 해싱해야 합니다
- Salt는 재사용 금지
- Salt는 DB 유저 테이블에 같이 저장되어야 합니다