Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Network] 18. SSL (또는 TLS) 가 어떻게 동작하는지 말씀해주세요. #64

Open
zbqmgldjfh opened this issue Nov 8, 2022 · 1 comment
Labels
NETWORK 네트워크 질문

Comments

@zbqmgldjfh
Copy link
Collaborator

SSL (또는 TLS) 가 어떻게 동작하는지 말씀해주세요.(연결방식)

키워드

SSL, TLS, Network

@zbqmgldjfh zbqmgldjfh added the NETWORK 네트워크 질문 label Nov 8, 2022
@zbqmgldjfh
Copy link
Collaborator Author

zbqmgldjfh commented Nov 8, 2022

SSL 에는 ‘악수, 전송, 세션종료’ 총 3단계가 있습니다.

image

1. 악수 단계

클라이언트가 서버에 접속합니다. 이 단계를 Client Hello 라고 부릅니다.
이때 클라이언트 측에서 랜덤 데이터를 생성하고, 클라이언트가 지원하는 암호화 방식들을 서버에 알려준다.

서버는 Client Hello의 응답으로 Server Hello를 보내게 됩니다. 이때 서버의 인증서가 함께 전달되죠!
이 단계에서는 서버 측에서 랜덤 데이터를 생성하고 전달하며, 클라이언트가 전달한 암호화 방식중 하나를 선택하여 클라이언트에게 전달한다.

클라이언트는 서버의 인증서가 CA로부터 발급 받은 것 인지 자신의 CA리스트를 통해 확인하고, 자신의 리스트에 있다면 CA로부터 받은 공개키를 통해 인증서를 복호화 한다.
!!!!!!!이때 복호화에 성공했다면 CA의 개인키로 암호호된 문서임이 증명된것 입니다!!!!!!

클라이언트는 서버로부터 받은 랜덤 데이터와 클라이언트가 생성한 랜덤 데이터를 조합해서 pre master secret라는 키를 생성하는데,
이 키는 데이터를 주고 받을 때 암호화하기 위해서 사용됩니다. (대칭키 방식이라 노출되면 안된다)

그럼 이 pre master secret 값을 어떻게 안전하게 서버에 전달할까?
이 때 사용하는 방법이 바로 공개키 방식이다. 서버의 공개키로 pre master secre값을 암호화해서 서버로 전송하면 서버는 자신의 비공개키로 안전하게 복호화 할 수 있다. 그럼 서버의 공개키를 어떻게 구할 수 있을까? 서버로부터 받은 인증서 안에 들어 있다. 이서버의 공개키를 이용해서 pre master secret 값을 암호화한 후에 서버로 전송하면 안전하게 전송할 수 있다.

이를 받은 서버는 자신의 비밀키로 복호화 하여 pre master secret 을 확인하고,이를 통해 session key를 생성한다.
이 session key 값을 이용해서 서버와 클라이언트는 데이터를 대칭키 방식으로 암호화 한 후에 주고 받습니다.

2. 전송 단계:

데이터를 상대방에게 전송하기 전에 session key 값을 이용해서 대칭키 방식으로 암호화 한다.
암호화된 정보는 상대방에게 전송될 것이고, 상대방도 세션키 값을 알고 있기 때문에 암호를 복호화 할 수 있다.

3. 세션 종료:

데이터의 전송이 끝나면 SSL 통신이 끝났음을 서로에게 알려준다.
이 때 통신에서 사용한 대칭키인 세션키를 폐기한다.

출처

https://lbm93.tistory.com/18

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
NETWORK 네트워크 질문
Projects
None yet
Development

No branches or pull requests

1 participant