- 목적
- 암호화
- 비대칭키와 대칭키 방식을 혼용하여 사용
- 인증서
- 서버의 신원 보증 (이를 보증할 수 있는 제 3자를 CA라고 함)
인증서가 CA의 비밀키로 암호화되어 CA의 공개키로 복호화 가능하다.
- mkcert 라는 프로그램을 이용하여 로컬환경에서 신뢰할 수 있는 인증서 만들 수 있다.(PKCS12형식만 지원)
- 윈도우 사용자 설치 (Ubuntu)
$ 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/
- 인증서 생성
- 로컬을 인증된 발급기관으로 추가
$ mkcert -install
- CA가 생성되고 설치되면 PKCS12 형식 인증서를 생성 가능
$ mkcert -pkcs12 localhost
- 생성된 인증서 (우분투 파일) 를 애플리케이션 resource 폴더로 이동
- application.properties 에 관련 설정 추가
server.ssl.key-store=classpath:localhost.p12 # -> 인증서 경로 server.ssl.key-store-type=PKCS12 # -> 인증서 형식 server.ssl.key-store-password=changeit # -> 인증서 비밀번호 //비밀번호인 changeit은 비밀번호를 설정하지 않았을 때의 기본값 //인증서 비밀번호는 인증서를 생성할 때 설정하거나 생성 후 변경 가능
- 애플리케이션 실행
암호화해야 하는 값에 어떤 별도의 값 을 추가하여 결과를 변형하는 것
암호화만 해놓는다면 해시된 결과가 늘 동일함.
해시된 값과 원래 값을 테이블(레인보우테이블)로 만들어서 decoding 하는 경우도 생김
원본값에 임의로 약속된 별도의 문자열을 추가하여 해시 진행시 기존 해시값과 전혀 다른 해시값이 반환되어 알고리즘이 노출되어도 원본 값을 보호할 수 있도록 하는 안전 장치
기존 : 암호화 하려는 값 -> 해시값
salt사용 : 암호화 하려는 값 + salt용 값 -> 해시값
Salt 사용시 주의사항
- shiftBy 메서드 : 인자로 문자열과 숫자 전달 -> 입력받은 숫자의 값만큼 알파벳 순서를 건너뛴 문자열로 변환하여 새로운 문자열 반환
서버에서 클라이언트에 데이터를 저장하는 방법의 하나
서버가 클라이언트에 데이터를 저장할 수 있다.
데이터를 저장한 이후 특정 조건들이 만족하는 경우에만 다시 가져올 수 있다. (쿠키 옵션)
localhost.com
같이 쿠키 옵션에서 도메인 정보가 존재하면 클라이언트에서는 쿠키의 도메인 옵션과 서버의 도메인이 일치해야만 쿠키 전송 가능/users/login
같이true
로 설정 시 HTTPS
프로토콜 이용하는 경우에만 쿠키 전송 가능true
설정 시, 자바스크립트에서는 쿠키에 접근 불가false
( XSS 공격에 취약해짐 )same-site
인 경우에만 쿠키 전송 가능로그인 시 성공했다면 서버는 인증에 성공했다고 판단, 다음번에 인증을 필요로 하는 작업을 요청 시 매번 로그인할 필요가 없다.
인증에 따라 리로스의 접근 권한이 달라진다.
사용자가 인증에 성공한 상태는 세션이라고 한다.
- 로그아웃
쿠키는 세션아이디, 인증 성공에 대한 증명을 갖고 있으므로 탈취될 경우 서버는 해당 요청이 인증된 사용자의 요청이라고 판단.
- 서버 : 세션 정보를 삭제
- 클라이언트 : 쿠키를 갱신해야함.
서버가 클라이언트의 쿠키 임의 삭제는 불가 ,대신 set-cookie로 클라이언트에게 쿠키 전송 시 세션 아이디 키 값을 무효한 값으로 갱신 가능
- 대응 방안
- 입력(요청) 값 검증
화이트리스트 방식으로 해당 키워드가 들어오면 다른 값으로 치환아여 대응
- 화이트리스트 : 기본 정책이 모두 차단인 상황에서 예외적으로 접근이 가능한 대상을 지정하는 방식 또는 지정된 대상
- prepared Statement 구문 사용
구문 사용시 사용자의 입력이 SQL문으로 분리되어 방어 가능, 사용자의 입력 값을 단순 텍스트로 인식- Error Message 노출 금지
에러가 발생한 SQL문과 에러 내용이 클라이언트에 노출되지 않도록 별도의 에러 핸들링 필요
- CSRF 공격 조건
- 쿠키를 사용한 로그인
- 예측할 수 있는 요청/parameter를 가지고 있어야 함
- CSRF 방지
- CSRF 토큰 사용하기
서버측에서 CSRF 공격에 보호하기 위한 문자열을 유저의 브라우저와 웹 앱에만 제공.- Same-site cookie 사용
같은 도메인에서만 세션/쿠키를 사용할 수 있음.