SSL이란
웹을 개발하면 기본적으로 회원을 관리하고 로그인하는 부분을 개발하기 마련이다.
웹서핑을 하다보면 브라우저에 자물쇠표시가 되어있는 경우를 종종 보게된다. 해당 웹사이트는 SSL 이라는 보안 프로토콜을 사용한다는 표시다.
SSL은 Secure Socket Layer이라는 약자로 보안 소켓 레이어이다.
보통 443포트를 사용하며 https:// 를 사용한다.
앞으로 웹개발을 하다보면 이런 https:// 를 사용하는 많은 웹사이트를 보게 될것이고,
또한 SSL기반으로 개발을 할 수도 있다.
아직 SSL의 개념을 잘 모르므로 SSL에 대한 간단하게 개념을 이해해 보도록하겠다.
SSL은 Netscape사에서 웹서버와 웹브라우저간의 보안을 위해 만들어졌으며, 공개키/개인키 대칭키 기반으로 사용한다.
공개키/개인키는 많이 들어봤듯이, 공개키로 암호화하고 공개키와 매칭되는 개인키로만 복화할 수 있다. 따라서 공개키는 누구든지 알아도 상관없고 개인키는 복호화해야 하는 대상만 알 수 있도록 잘 보관해야 한다.
공개키/개인키는 계산하는데 복잡하고 시간복잡도가 높으므로 보통 모든 전송을 공개키/개인키 암호화기법을 이용하여 전송하는것이 아니라, 전송할것들은 대칭키를 이용하여 암호화하고, 대칭키만을 공개키/개인키로 암호화하여 전송한다.
이런 과정을 통해 암호화한다해도 대상 사이트가 만약에 가짜사이트 또는 대상이 해커라면 사용자의 정보가 노출될수 있다. 이 때문에 인증서라는것이 있다.
https로 통신하는 웹사이트를 이용하다보면 웹브라우저에 자물쇠 표시가 있는데 해당 자물쇠를 눌러보면 보통 인증서가 있다. 이 인증서는 신뢰할수 있는 제3자 인증기관에서 발급받을 수 있으며 이 인증서에는 인증서의 해당 사이트의 공개키와 사이트의 정보들이 있다. 인증서가 전송될떄는 인증기관의 제공하는 개인키로 암호화하여 전송된다.
인증서 또한 만약 가짜사이트 또는 해커가 인위적으로 만들었다면 사용자의 정보가 노출이 될수 있는데 이를 막기 위해 인증기관의 공개키를 브라우저에게 알려주고 브라우저에서는 해당 사이트에서 제공하는 공개키가 아닌 브라우저의 공개키를 사용하기 때문에 대상이 인증기관인지 아닌지 판별할 수 있다.
이렇게하여 SSL의 통신을 사용한다.
간단하게 요약하자면
- 사이트에서 인증기관(CA: Certificate Authority)에 인증요청
- 인증기관에서 검증후에 사이트의 공개키와 정보를 인증기관의 개인키로 암호화, 인증기관의 공개키는 브라우저에 제공
- 사용자가 사이트로 접속 요청시 사이트는 인증서 전송
- 사용자는 브라우저에 내장된 공개키로 인증서를 복호화 -> 사이트의 공개키로 대칭키를 암호화하여 전송
- 사이트는 전송받은 암호화된 대칭키를 사이트의 개인키로 복호화 -> 사용자, 사이트 같은 대칭키 획득
- 전송시 해당 대칭키로 암호화하여 전송
SSL통신을 하는 사이트의 SSL 보안등급을 분석해주는 사이트 : https://www.ssllabs.com/ssltest/analyze.html?d=[SSL 사용하는 url]
ex: https://www.ssllabs.com/ssltest/analyze.html?d=id.payco.com
각 인증서에는 만료기간이 있으며, 인증서의 만료되기 전에 갱신을 해야한다.
차후에 인증서는 어디에 저장하고, 어떻게 갱신을 하는지 공부하도록 하겠다.
참고한 사이트 : https://wiki.kldp.org/HOWTO/html/SSL-Certificates-HOWTO/x70.html http://minix.tistory.com/397#recentTrackback