상호 인증
SSL/TLS 세션의 서버와 클라이언트가 모두 인증되는 상호 인증도 가능하며 경우에 따라 매우 유용할 수 있습니다. 상호 인증에서는 핸드셰이크 중에 서버가 인증되면 클라이언트에 인증서 요청 메시지를 보냅니다. 클라이언트는 인증을 위해 서버에 인증서를 보내 응답합니다.
- 서버와 클라이언트 세션 마다 고유한 암호키를 공유하는 DES나 RC4와 같은 대칭키 암호화 알고리즘으로 보안을 제공
- 암호키: SSL Handshake Protocol로 결정 (아래에서 설명)
- 서버와 클라이언트는 상호 인증이 이루어진다.
- RSA와 같은 공개키 암호 알고리즘, DSS와 같은 전자서명 알고리즘, X.509 공개키 인증서가 사용된다.
- 메시지 인증 코드를 이용하여 메시지의 무결성 보장
클라이언트 인증
클라이언트 인증서는 Wi-Fi, VPN 및 웹 응용 프로그램과 같은 회사 리소스에 액세스하기 위한 인증 요소로 사용할 수 있습니다.
기존 사용자 이름 / 암호 자격 증명 대신 (또는 추가로) 사용하면 몇 가지 보안 이점을 제공합니다.
배경 지식
공개 키 암호: 사전 마스터 비밀을 암호화
일방향 해시 함수: 의사 난수 생성기를 구성
디지털 서명: 서버나 클라이언트의 인증서를 검증
SSH Handshake Protocol
- Client Hello
- 자신이 사용할 SSL의 버전 정보, Cipher suite list(대칭키 + 공개키 + 해쉬함수), 클라이언트 난수를 생성하여 전달
- ServerHello
- 암호화 방법을 선택하고 서버 난수를 생성하여 클라이언트에게 전송
- Certificate → 여기까지가 단방향 인증(서버 인증)
- CA의 공개키로 이 인증서를 해독하여 서버의 공개키를 획득
- 클라이언트는 클라이언트 난수, 서버 난수를 각각 사용해 PMS(Pre Master Secret, 일종의 난수) 값을 생성
- PMS를 서버의 공개키로 암호화해서 서버에게 보내면 서버는 개인키를 사용해 해당 암호문을 복호화한다.
- 암호문의 복호화가 정상적으로 이루어지면 서버는 클라이언트를 인증할 수 있다.
- CertificateRequest
- 클라이언트에게 인증서를 요구한다.
- Certificate
- 클라이언트 인증서의 개인키로 암호화하고 클라이언트 인증서 공개키를 사용해서 확인한다.
- Certificate Verify
- 클라이언트의 인증서를 서버가 쉽게 확인할 수 있도록 전자서명하여 보낸다.
- 해당 메시지를 통해서 서버는 클라이언트 인증서의 공개키가 유효한지 확인한 후 클라이언트 인증을 마친다.
- Client Key Exchange
- PMS, 대칭 암호화키, 메시지 인증코드 생성에 사용되는 46바이트의 난수, 서버의 공개키로 만든 암호 등이 포함
- PMS, Client 난수, Server 난수 이 세 값을 이용해 암호화키와 메시지 인증 코드용 공유키 생성
- Change Cipher Spec
- 이후에 전송되는 모든 메세지는 서버와 협상된 알고리즘과 키를 이용해 암호화 시키겠다고 서버에 알림
- Finished
- 클라이언트와 서버간의 SSL Handshake 종료
https://www.ssl.com/ko/블로그/상호-TLS로-사용자-및-IoT-장치-인증/
https://zetawiki.com/wiki/Openssl_CA/서버/클라이언트_인증서_생성
https://babbab2.tistory.com/5
https://itsaessak.tistory.com/168
https://m.blog.naver.com/xcripts/70122755291
'OS > Security' 카테고리의 다른 글
[Security]OS 로그인 시도 로그 정리 - CentOS, Windows (0) | 2022.09.25 |
---|