기존 HTTP에 인증서와 비대칭 키를 통해 보안기능을 추가한 버전
요청 데이터를 암호화 -> 지정 키로 추가적인 복호화가 필요
비대칭 키 암호화
공개 키 제공(Hand Shake) -> 비밀 키 생성(비대칭 키) -> 상호 키 검증
- 대칭 키 방식: 공통의 비밀키로 암호화 및 복호화
- 비대칭 키 방식: 공개 키로 암호화 -> 개인 키로 복호화
비대칭 키를 공유할 때 대칭 키 방식을 쓴다
인증서
응답 도메인과 인증 도메인을 비교
CA
신원을 보증하는 제 3자, 공인 인증서 발급 기관SSL(TLS) 프로토콜 과정
서버가 클라이언트에게 비밀키로 암호화된 인증서 전달 ->
클라이언트가 내장된 CA리스트에서 검색 ->
CA 공개키로 복호화(위조 인증서라면 공개키가 맞지 않을것)
JAVA 인증서 형식에는 PKCS12, JKS 가 있다.
Mkcert - 로컬 개발을위한 SSL 인증서 생성 도구 이걸로 PKCS12를 생성해보자
우분투의 리눅스 가상환경이 너무 불편해서
Chocolatey를 사용해 보았다.. 이제 파워셀에서 choco 명령어로 실행한다
mkcert를 설치하자!
choco install mkcert CA
mkcert -pkcs12 localhost - PKCS12 인증서 생성
위에서 부터 인증서 경로, 타입, 비밀번호
https로 실행 성공!
패스워드를 암호화하는 기술
- Plain Text 저장(금기)
- 해시(Hash) 알고리즘
- MD5(Message Digest 5)
- SHA(Secure Hash Algorithm)
Rainbow Attack에 대한 대응책
키 스트레칭(다이제스트-해시 처리 번복)
솔트(Salt)
이 외에 PBKDF2, bcrypt, scrypt...
클라이언트에 데이터를 저장하여 동기적으로 Stateless 한것을 보완
이러한 상태 정보는 일반적으로 세션, 캐시, 변수 값 등을 포함한다
Cross-Origin과 Cross-Site
Cross-Origin은 도메인(하위도메인 포함), 프로토콜, 포트를 기준으로 구분
Cross-Site와 same-site여부는 eTLD+1을 기준으로 구분(탑레벨도메인+하위도메인)
도메인, 프로토콜, 포트가 달라도 eTLD+1가 같다면 same-site
사용자가 인증에 성공한 상태
클라이언트가 정보를 제공하여 세션(인증)이 되면
서버는 세션을 저장하고 세션아이디를 제공(쿠키에 저장)하여 권한 부여
이후 요청정보가 아닌 제공한 세션아이디를 확인하여 DB 업데이트
이를 통해 접속상태를 서버가 가짐(stateful)
로그아웃 시 서버의 세션 정보를 삭제하고 클라이언트의 쿠키를 갱신
데이터베이스에서 임의의 SQL 문을 실행할 수 있도록 명령어를 삽입하는 공격 유형
1. 입력(요청) 값 검증
화이트리스트 방식의 키워드 사용
기본 정책이 모두 차단인 상황에서 예외적으로 접근이 가능한 대상을 지정하는 방식
2. Prepared Statement 구문 사용
사용자의 입력을 SQL 문으로부터 분리
입력값을 넣기전 미리 컴파일하여 단순 텍스트로 인식하게 함
3. Error Message 노출 금지
Error Message를 통한 테이블이나 열 등 데이터베이스 유출을 막기 위해
에러가 발생한 SQL 문과 에러 내용이 클라이언트에 노출되지 않도록 별도의 에러 핸들링을 설정
- CSRF토큰 사용
폼 요청시 미리 제공한 고유한 CSRF 토큰은 함께 제출
토큰과 세션에 저장된 CSRF토큰을 비교
- Same-site cookie 사용
일치하는 도메인을 가진 쿠키를 사용하여 요청처리