Hyper Text Transfer Protocol Secure socket layer
HTTPS 는 SSL 혹은 TLS 라는 알고리즘을 통해 HTTP 통신의 데이터를 암호화하여 전송하는 방법이다. Packet(네트워크 상에서 오가는 모든 data)을 암호화하여 중간자 공격을 방어한다.
SSL - Secure Socket Layer
TLS - Transport Layer Security - 더 발전되고 안전한 버전의 SSL
HTTPS는 certificate, certificate authority, asymmetric key 암호화를 사용한다.
Certificate Authority
인증서를 발급하는 공인된 기관
fun fact: 네이버 웨일 브라우저는 네이버에서 발급한 인증서를 신뢰함.
mkcert -key-file key.pem -cert-file cert.pem localhost 127.0.0.1 ::1
// 127.0.0.1(IPv4)
// ::1(IPv6)
key.pem
- 개인 키
cert.pem
- 인증서
어떠한 문자열에 임의의 연산을 적용하여 다른 문자열로 변환하는 것
SHA256 같은 알고리즘은 공개된 알고리즘이나 decryption 이 매우 오래 걸리므로 상관없음.
비트코인 채굴은 hash 암호를 푸는 과정.
hashing 을 여러번 적용
해시된 값을 다시 한번 해시하는 것.
salt
여러 문자열의 hash 된 값을 정리한 table 을 rainbow table 이라고 한다. 따라서 공개된 알고리즘 특성상 raindow table 을 통해 decrypt 할 수 있으므로, 문자를 추가해서 hashing 하는 것을 salt 라고 한다.
쿠키는 서버가 클라이언트에 저장하는 데이터이다. 서버 -> 클라
개발자도구 -> application 에서 쿠키 볼 수 있음.
서버는 쿠키를 이용하여 데이터를 저장하고 원할 때 데이터를 다시 불러와 사용할 수 있다. 하지만 데이터를 저장한 이후 아무 때나 데이터를 가져올 수 없다. 데이터를 저장한 이후 특정 조건들을 만족한 경우에만 다시 가져올 수 있다.
Domain
- 도메인 일치 여부 확인Path
- 세부 URI 일치 여부 확인 (앞에만 같으면 뒤는 상관없음)MaxAge(초), Expires(date)
- 쿠키 유효기간. 기간 지나면 삭제됨.Secure
- True 일 경우 'HTTPS' 에서만 쿠키 사용가능HttpOnly
- 자바스크립트 접근 가능 여부 (기본 false - 접근가능)SameSite
- 같은 사이트끼리만 쿠키 사용 가능하도록. "CSRF killer"Lax
- Cross-Origin 요청일 때 'GET' 메소드에 대해서만 쿠키 전송Strict
- same-site 인 경우에만 쿠키 전송None
- 항상 쿠키를 보낼 수 있으나 Secure 옵션이 true 일 때만서버가 클라이언트에 쿠키 생성 시: headers
에 Set-Cookie
라는 프로퍼티에 쿠키를 담음
클라가 서버로 쿠키 보낼 시: headers
에 Cookie
라는 프로퍼티에 쿠키를 담음
서버는 클라이언트에 인증정보를 담은 쿠키를 전송하고, 클라이언트는 전달받은 쿠키를 요청과 같이 전송하여 Stateless 한 인터넷 연결을 Stateful 하게 유지할 수 있다.
하지만 기본적으로 쿠키는 오랜 시간 동안 유지될 수 있고, 자바스크립트를 이용해서 쿠키에 접근할 수 있기 때문에 쿠키에 민감한 정보를 담는 것은 위험하다.
이런 인증정보를 탈취하여 서버에 요청을 보낸다면 서버는 누가 요청을 보낸 건지 상관하지 않고 인증된 유저의 요청으로 취급하기 때문에, 개인 유저 정보 같은 민감한 정보에 접근이 가능해진다.
Cross Site Request Forgery
다른 오리진에서 유저가 보내는 요청을 조작하는 것. 서버가 클라이언트를 너무 믿어서 생기는 빈틈.
Public key, private key???
https://www.websecurity.digicert.com/security-topics/what-is-ssl-tls-https
https://www.ssl.com/faqs/what-is-a-certificate-authority/