SSL은 서버와 클라이언트간의 통신을 암호화하는 기술이다. 이를 통해 데이터가 전송되는 동안 도청, 변조, 위조와 같은 보안위협으로부터 보호할 수 있다. SSL 은 일반적으로 웹사이트에서 HTTPS를 통해 구현되며, 사용자와 서버간의 안전한 데이터 교환을 보장하는 중요한 역할을 한다.
그렇다면 왜 SSL을 써야할까?
SSL 을 써야 하는 이유를 몇가지 적어보자면..
데이터보호를 위해
SSL 은 클라이언트와 서버간의 데이터를 암호화한다. 이를 통해 네트웍상에 전송되는 데이터가 해커에게 노출된다 하더라도, 암호화된 상태이기 때문에 해독이 불가능해진다. 예를 들어 웹사이트의 비밀번호, 신용카드 정보 등과 같은 민감한 데이터를 보호하는데 SSL을 필수적이다.
데이터무결성을 위해
SSL 로 암호화되어있기에 변조하는 것이 불가능해진다. 만약 중간에서 데이터를 가로채 수정하려고 한다면, 경고를 보낼 것이다. 즉, 사용자의 정보가 올바르게 전달되었는지 확인할 수 있다.
신뢰를 위해
SSL 인증서를 통해 서버가 신뢰할 수 잇는 곳임을 사용자에게 증명할 수 있다. 웹브라우저는 SSL 인증서를 검증하고, 신뢰할 수 없는 인증서를 사용하는 사이트에 대해 경고메시지를 표시한다. 이는 피싱 사이트 같은 곳으로부터 사용자를 보호하는 역할을 한다.
SSL의 작동원리
SSL은 원래 1990년대에 개발되었지만, 여러 보안 취약점이 발견되었다. 그래서 SSL의 발전된 버전인 TLS(전송 계층 보안, Transport Layer Security)가 등장하였다. 현재는 TLS가 SSL을 대체하고 있으며, 대부분의 SSL 구현은 사실 TLS를 사용한다. 그럼에도 불구하고, 많은 사람들은 여전히 ‘SSL’이라는 용어를 TLS와 혼용하여 사용하고 있다.
SSL의 중요성
현대의 인터넷 환경에서 SSL은 단순히 선택 사항이 아니라 필수 사항이다. 다음과 같은 이유로 SSL을 사용하는 것이 중요하다:
- 검색 엔진 최적화(SEO) : 구글과 같은 검색 엔진은 SSL을 사용하는 사이트에 대해 더 높은 순위를 부여한다. 이는 사용자에게 더 안전한 사이트를 제공하기 위한 조치이다.
- 사용자 신뢰 : 브라우저 주소창에서 보이는 자물쇠 아이콘은 사용자가 해당 웹사이트가 안전하다는 신호로 받아들이며, 이는 사용자 신뢰도를 높이는 데 기여한다.
- 규제 준수 : 많은 법적 규제, 특히 금융 및 의료 정보와 관련된 규제에서는 데이터를 암호화할 것을 요구한다. SSL을 사용하지 않으면 이러한 규제를 위반할 수 있다.
내 웹사이트의 SSL 점수는?!
아무튼 SSL 을 적용하고 나서 내 웹사이트에 SSL 이 수준높은 보안을 요구하며 설정되었는지에 대해 궁금증이 생긴다면 다음 주소에 가서 검사를 해볼 수 있다.
https://www.ssllabs.com/ssltest/
도메인 정보를 입력하고 검사를 실행하면 조금의 시간이 흐른뒤에 다음과 같은 결과를 보게된다.
아마 다양한 등급이 표시될텐데 여기서 높은 레이팅의 등급을 받고 싶다면...
모질라재단에서 제공하는 ssl 설정 추천
https://ssl-config.mozilla.org/
위 주소에 들어가서 현재 사용중인 웹서버의 종류와 버전 등을 입력 후, 추천되는 설정을 그대로 따라하면 높은 점수의 SSL 보안 셋팅을 할 수 있다.
# generated 2024-09-06, Mozilla Guideline v5.7, nginx 1.27.1, OpenSSL 1.1.1k, intermediate configuration, no OCSP
# https://ssl-config.mozilla.org/#server=nginx&version=1.27.1&config=intermediate&openssl=1.1.1k&ocsp=false&guideline=5.7
server {
listen 80 default_server;
listen [::]:80 default_server;
location / {
return 301 https://$host$request_uri;
}
}
server {
listen 443 ssl;
listen [::]:443 ssl;
http2 on;
ssl_certificate /path/to/signed_cert_plus_intermediates;
ssl_certificate_key /path/to/private_key;
ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m; # about 40000 sessions
ssl_session_tickets off;
# curl https://ssl-config.mozilla.org/ffdhe2048.txt > /path/to/dhparam
ssl_dhparam /path/to/dhparam;
# intermediate configuration
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305;
ssl_prefer_server_ciphers off;
# HSTS (ngx_http_headers_module is required) (63072000 seconds)
add_header Strict-Transport-Security "max-age=63072000" always;
}
예시는 nginx 로 적어보았다. 위의 설정처럼 셋팅하고나면 이 블로그 처럼 A+ 등급의 SSL 보안 셋팅이 가능해질 것이다.
ps. ssl_dhparam 부분의 curl 다운로드도 서버의 환경에 맞추어 작업해주어야 한다.. (설마 path/to 그대로 적지는 않으리라...)