행위

SSL

조무위키

Secure Socket Layer[편집]

HTTPS를 할 때 필요한 것. 443번 포트를 사용한다. HTTPS는 SSL 위에 HTTP를 얹어놓은 형태라고 보면 된다. 그 말은 SSL 위에는 다른 프로토콜도 올라갈 수 있다. FTPS처럼..

SSL은 넷스케이프에서 처음 나왔는데 이게 IETF에 의해 표준이 되면서 현재는 TLS(Transport Layer Security)가 정식 명칭이 되었다. 현재는 TLS 1.3까지 나왔고, 1.0과 1.1은 이미 뚫린 상태여서 지원이 중단되었다.

그렇지만 아직도 관용적으로 SSL이라고 많이 부른다.

웹서핑할 때 패킷을 암호화 전송해서 해킹으로부터 막아준다.

공개키 암호화를 이용한 방식으로 먼저 서버와 클라이언트 간의 연결을 성립한 후 보안 연결을 성립한다. 먼저 클라이언트에서 ClientHello라는 패킷을 서버에 보내고, 이를 서버가 응답해서 ServerHello를 보내고 인증서를 보내 준다. 이 인증서는 x.509라는 건데 그러면 클라이언트에서 인증서가 어떤 기관이 사인했고 기한이 유효한지 확인을 한다. 이 인증서 자체는 누구나 만들 수 있다. OpenSSL이라는 프로그램으로 너도 1분 만에 만들 수 있다. 그렇기 때문에 이상한 놈이 사인한 인증서는 기본적으로 신뢰하지 않고 빠꾸를 먹인다. 신뢰된 놈들이 만들어 준것만 기본적으로 인정해준다. 그래서 인증서를 발급해 주는 기관의 목록을 미리 클라이언트에 심어놓는데 그런 기관 발 인증서는 바로 통과를 시켜주고 그렇지 않으면 경고창을 보게 된다. 브라우저 개발사들은 영 미덥다고 생각하면 바로 퇴출시킬 정도로 인증서 문제에 굉장히 민감하게 반응한다. 부정 발급이라도 한게 들통나면 그날로 퇴출당한다. 중국의 WoSign, StartCom도 부정발급한 게 들켜서 바로 퇴출당했고, 한국도 정부기관이 만들었던 GPKI가 제3자 인증을 제대로 안 받았다가 사실상 퇴출당한 사례가 있었다.

인증서를 발급하는 기관으로 전세계적으로는 Sectigo, Thawte[1], DigiCert가 유명하다. 한국의 경우 위의 GPKI가 있었지만 빠꾸먹었고, 근래에 네이버 클라우드 플랫폼(NCP)이 진출해서 발급해 주고 있다. 인증서도 메이저 웹 브라우저에 심어져 있다.

아무튼 클라이언트가 인증서 확인을 하고 유효하면 클라이언트는 인증서에 딸려온 공개키를 이용해 pre-master key를 암호화해서 서버로 보낸다.

그 다음 서버가 갖고 있는 비밀키(private key)를 이용해 복호화하고 이걸 통해 master key를 만든다. 여기서 다시 세션 키라는 세션에서 사용할 대칭키를 만든다. 마찬가지로 클라이언트도 pre-master key를 갖고 있기 때문에 똑같은 대칭키를 만들 수 있다. 그렇게 되면 이제부터 대칭키로 암호화할 것으로 약속하는 메시지를 상호 전송하고 Finished 메시지를 통해 연결이 성립이 되는 것이다.

왜 결국 대칭키를 쓰게 되냐면 공개키 방식은 계산량이 월등히 많아 오버헤드가 오기 쉽기 때문이다. 그래서 똥컴 같은 경우는 보안 연결만 했다 하면 저 핸드셰이킹 때문에 좆같이 느려지는 일이 있을 수 있지만, 그건 옛날 이야기고 요즘은 가속 회로가 다 있어서 별로 없다고 보면 된다.

여담으로 ClientHello 자체는 평문으로 되어 있는데, 저걸 이용해서 검열을 하는 수가 있다. 그래서 나온 것이 Encrypted ClientHello(ECH)이다. 하지만 아직 논의중인 거라 몇몇 사이트에서만 지원하며, 브라우저 지원 자체는 과거 파이어폭스만 지원했던 ESNI (Encrypted Server Name Indication)보다 많이 지원해 Edge와 크롬도 지원한다.

하지 않으면 패킷 털려서 개인정보 그냥 날아가거나 스팸전화, 스팸메일 오는 수가 있다. 실제로 WireShark라는 패킷 분석 프로그램으로 카페에서 패킷을 잡아보면 다른 사람들이 보내는 암호화되지 않은 패킷도 고스란히 다 볼 수 있다.

만약 히토미가 SSL을 하지 않았다면, 히토미 볼 생각은 그냥 접어두는 것이 좋다.

디키는 SSL을 쓰지 않아서 디키를 하고 있는 너의 개인정보가 그대로 새 나가고 있다. 하지만 나중에는 적용이 됐다. 애초에 디시가 2019년 즈음까지 TLS를 안 썼다.

요즘은 99퍼센트의 사이트가 이 TLS를 적용하고 있고 브라우저 설정에 따라서는 경고창을 띄워버리는 경우도 있다. 아예 HSTS라고 강제로 HTTPS 연결을 하게 시도하는 기술도 있다.

무료 SSL[편집]

정확히는 TLS의 방식 상 인증서가 있어야 하는데 사실 좀 비싸다. 서브도메인에 사용할 수 있는 와일드카드 인증서는 최소가 몇만원인데다 기관에서는 더 확실하게 신원을 증명하는 EV 인증서를 받아야 하는데 이건 뭐.. 안드로메다로 간다. 게다가 보통 인증서는 유효기간이 1년이기 때문에 이 짓을 매년 해줘야 한다.

하지만 Let's Encrypt라는 Electronic Frontier Foundation이라는 미국의 비영리단체에서 무료로 DV 인증서를 발급해준다.

구글, 페북, 모질라 등의 미국 대기업에서 후원하는 비영리단체에서 하는 거라 무료 치고 괜찮다. 대신 90일짜리만 나와서 귀찮겠지만, 이걸 또 자동화해주는 ACME라는 게 있고 심지어 표준으로 지정되어 있다. 웹 서버 설정을 보면 이걸 이용해서 자동으로 갱신하게 할 수 있다. 또 도메인이 필수로 필요하다. 그냥 IP를 암호화한다고 하면 빠꾸먹는다.

그대신 무료라서 인증서 해킹당해도 배상금 없다.

무료 쓰고 싶으면 렛츠 인크립트 쓰고, 해킹 배상금 원하면 유료 쓰자.

미국 보안 업체인 클라우드플레어도 무료 SSL을 제공하며, ZeroSSL이라는 것도 있다. 다만 후자의 경우 조금만 고급 옵션을 원해도 돈을 내야 한다.

단 클라우드플레어는 종단간 암호화가 아닌 클라이언트와 네임서버간의 암호화를 지원하기 때문에 조금 불안한 느낌은 있다.

각주[편집]

  1. 인터넷 초창기부터 있었던 오래된 기업으로 창업자인 마크 셔틀워스가 이 회사를 DigiCert에 매각하고 그 돈으로 우주여행 한 번 갔다온 다음 우분투를 만드는 캐노니컬을 창업했다.