Secure Socket Layer
SSL(Secure Socket Layer)은 넷스케이프사에서 전자상거래 등의 보안을 위해 개발하였다. 이후 TLS(Transport Layer Security)라는 이름으로 표준화되었다. SSL은 특히 전송계층(Transport Layer)의 암호화 방식이기 때문에 HTTP 뿐만 아니라 NNTP, FTP, XMPP등 응용계층(Application Layer) 프로토콜의 종류에 상관없이 사용할 수 있는 장점이 있다. 기본적으로 Authentication, Encryption, Integrity를 보장한다.
Transport Layer Security
전송 계층 보안 (영어: Transport Layer Security, TLS), 보안 소켓 레이어 (Secure Socket Layer, SSL)는 암호 규약이다. 그리고 '트랜스포트 레이어 보안'이라는 이름은 '보안 소켓 레이어'가 표준화 되면서 바뀐 이름이다. 이 규약은 인터넷 같이 TCP/IP 네트워크를 사용하는 통신에 적용되며, 통신 과정에서 전송계층 종단간 보안과 데이터 무결성을 확보해준다. 이 규약은 웹 브라우징, 전자 메일, 인스턴트 메신저, voice-over-IP (VoIP) 같은 응용 부분에 적용되고 있다. TLS는 IETF 표준 규약이다. 최종 갱신은 RFC 5246이고, 최종 갱신 버전은 넷스케이프에서 만든 SSL 표준을 바탕으로 했다.
About
TLS는 클라이언트/서버 응용 프로그램이 네트워크로 통신을 하는 과정에서 도청, 간섭, 위조를 방지하기 위해서 설계되었다. 그리고 암호화를 해서 최종단의 인증, 통신 기밀성을 유지시켜준다.
TLS의 3단계 기본 절차:
- 지원 가능한 알고리즘 서로 교환
- 키 교환, 인증
- 대칭키 암호로 암호화하고 메시지 인증
우선 첫 단계에서 서버와 클라이언트는 암호 스위트를 교환한다. 이 단계에서 키 교환와 인증에 사용될 암호화 방법, 메시지 인증 코드(MAC)가 결정된다. 키 교환과 인증 알고리즘은 공개키 방법을 사용하거나 미리 공유된 키(TLS-PSK)를 사용할 수도 있다. 메시지 인증 코드들은 HMAC 해시 함수로 만든다. SSL에서는 비표준 무작위 함수를 사용한다.
일반적인 알고리즘
- 키교환: RSA, Diffie-Hellman, ECDH, SRP, PSK
- 인증: RSA, DSA, ECDSA
- 대칭키 암호: RC4, 트리플 DES, AES, IDEA, DES, Camellia. 옛날 버전 SSL에서는 RC2가 쓰임.
- 해시함수: TLS에서는 HMAC-MD5 또는 HMAC-SHA. SSL에서는 MD5와 SHA. 옛날 버전 SSL에서는 MD2와 MD4가 쓰임
SSL 작동 원리
SSL(Secure Socket Layer) 프로토콜은 처음에 Netscape사에서 웹서버와 브라우저 사이의 보안을 위해 만들었다. SSL은 Certificate Authority(CA)라 불리는 서드 파티로부터 서버와 클라이언트의 인증을 하는데 사용된다. 아래는 SSL이 어떻게 작동하는지에 대한 간단한 과정을 설명한 것이다.
- [웹브라우저] SSL로 암호화된 페이지를 요청하게 된다. (일반적으로 https://가 사용된다)
- [웹서버] Public Key를 인증서와 함께 전송한다.
- [웹브라우저] 인증서가 자신이 신용있다고 판단한 CA(일반적으로 trusted root CA라고 불림)로부터 서명된 것인지 확인한다. (역주:Internet Explorer나 Netscape와 같은 웹브라우저에는 이미 Verisign, Thawte와 같은 널리 알려진 root CA의 인증서가 설치되어 있다) 또한 날짜가 유효한지, 그리고 인증서가 접속하려는 사이트와 관련되어 있는지 확인한다.
- [웹브라우저] Public Key를 사용해서 랜덤 대칭 암호화키(Random symmetric encryption key)를 비릇한 URL, http 데이터들을 암호화해서 전송한다.
- [웹서버] Private Key를 이용해서 랜덤 대칭 암호화키와 URL, http 데이터를 복호화한다.
- [웹서버] 요청받은 URL에 대한 응답을 웹브라우저로부터 받은 랜덤 대칭 암호화키를 이용하여 암호화해서 브라우저로 전송한다.
- [웹브라우저] 대칭 키를 이용해서 http 데이터와 html문서를 복호화하고, 화면에 정보를 뿌려준다.
여기서 간단한 개념 정도는 알아두어야 할 것이다.
Process_of_the_SSL_certificates.jpg
Documentation
- libuv-tls
- https://github.com/deleisha/libuv-tls
See also
- PKI
- RSA
- OpenSSL
- OpenSSL:Example:TLS
- Public key certificate
- Distinguished Name (DN)
- Common Name (CN)
- Hash
- 인증 기관 (Certification Authority; CA)
- 공개키 (Public key infrastructure; PKI)
- 대칭키
- Certbot
- Lets Encrypt
- 전자 서명 (Electronic signature)
- Server Name Indication (SNI; Encrypted SNI; ESNI)
- DNS over HTTPS (DOH)
- Certificate signing request (CSR)
- PyCrypto (Python)
- PyCryptodome (Python)
- stunnel - TLS/SSL을 사용하지 않는 클라이언트 또는 서버에 보안 암호화 연결을 제공
Favorite site
- [추천] 생활코딩: HTTPS와 SSL 인증서 1
- 아파치 환경에서의 SSL 구성하기
- SSL Certificates HOWTO
- [추천] 미닉스의 작은 이야기들: 웹툰03 SSL이란 무엇인가? 1/2
- [추천] 미닉스의 작은 이야기들: 웹툰03 SSL이란 무엇인가? 2/2 2
- [추천] 안전한 SSL/TLS를 운영하기 위해 알아야 하는 것들 3
- IBM Knowledge Center - 암호화 보안 프로토콜: SSL 및 TLS
- TLS, byte by byte - HTTPS(TLS) 호출을 바이트 단위로 살펴보기
- 현재 페이지 자체를 가져오는 액션을 TLS 핸드쉐이킹부터 실제 HTML 바디까지, 모든 데이터에 대해 바이트 단위로 설명을 붙여서 표시
Certification
Encrypt site
- [추천] Lets' Encrypt (무료 인증 사이트)