HTTP, HTTPS, SSL, TLS 등 개념
쉽게 풀어 말하자면,
웹에서 서버와 클라이언트가 정보를 주고받을 수 있도록 하는 전송 규약이 HTTP이다.
그런데, HTTP로 통신 시 데이터를 중간에 감청하거나 변조하는 보안 문제가 발생하게 되었다. 이에 서버-클라이언트 간의 통신을 암호화하여 송수신 함으로써 보안 문제를 해결하기 위해 나온 전송 규약이 HTTPS이다(HTTP의 암호화된 버전).
HTTPS 통신을 위해서는 디지털 인증서와 TLS라는 기술이 필요하다.
디지털 인증서란, 암호화 키쌍을 저장한 파일이다. 공개키가 담긴 인증서와, 개인키 파일로 구성되며, 이를 사용하여 통신 내용을 암호화/복호화 할 수 있다.
디지털 인증서는 개인이 만들 수도 있지만, 이로는 통신 내용을 암호화 할 수 있을 뿐, 내가 나임을 입증할 수가 없다.(예를 들면, 내가 진짜 '우리은행' 사이트가 맞고 가짜 우리은행이 아니라는 것을 입증을 할 수가 없음)
이에, 진짜 내가 맞다는 것을 입증하기 위해 공인된 인증기관(CA; Certificate Authority)로부터 인증서를 발급받는다.(제 3자가 확인/보장하는 것. 비용을 지불하고..) 이것이 SSL 인증서이다.
SSL 인증서에는 암호화 통신을 위한 공개키와, 사이트 정보 및 소유자 정보, 인증서의 만료일, 인증서 발행 기관(CA)의 정보가 들어 있기 때문에 SSL 인증서가 설치된 사이트를 믿고 통신을 할 수 있게 된다. 한국에서는 개인정보를 취급하는 사이트에는 SSL 인증서를 필수로 적용하도록 법으로 강제되어 있다.
또한 SSL 인증서로 암호화 통신을 할 수 있게 해주는 기술이 TLS이다(SSL은 TLS의 구 명칭). 일단은 이런게 있구나, 정도만 알고 넘어가자.
SSL 인증서
브라우저 또는 사용자의 컴퓨터와 서버 또는 웹사이트 간에 암호화된 연결을 수립하는 데 사용되는 디지털 인증서
인증서에 포함되는 내용
암호화 통신을 위한 공개키, 사이트 정보 및 소유자 정보, 인증서의 만료일, 인증서 발행 기관(CA)의 정보, 암호화 통신을 복호화 하기 위한 개인키
기능
1. 정보 유출 방지
통신 내용을 암호화하여, 통신 내용이 공격자에게 노출되는 것을 방지한다.
2. 정보 위변조 방지
통신 내용을 암호화하여, 내용의 악의적인 변경을 방지할 수 있다.
3. 위조사이트 방지(Phishing 방지)
인증서 발급기관(CA)에서 사이트 소유자를 확인하기에, 위조 사이트가 아닌 정상적인 사이트임을 신뢰할 수 있다.
서버에 SSL 인증서 설치하기
1. SSL 인증서 구매
SSL 인증서를 판매하는 곳은 많이 있다.(Sectigo, Symantec, Digicert 등) 국내에서는 대표적으로 "Cafe24의 보안서버 SSL 인증서" 구매를 통해 Sectigo SSL 인증서를 구매할 수 있다.
2. 서버에 SSL 인증서 설치
이하는 Cafe24에서 보안서버 SSL 인증서를 구매한 경우 + Apache 웹서버를 운영하는 경우를 가정하여 설명한다.
Case 1. Cafe24에서 웹호스팅을 받고 있는 경우
: 무료 설치가 된다.
Case 2. 웹 호스팅이 아닌 다른 호스팅 서비스를 이용하거나, 타사에서 호스팅을 하는 경우
인증서를 다운받아서 본인의 서버에 직접 올려주어야 한다. 과정은 아래와 같다.
1) 인증서 다운로드
나의 서비스 관리 > 인증서 관리 > 인증서 받기 메뉴에서 인증서 설치에 필요한 파일들을 다운로드 한다.
설치에 필요한 파일은 개인키, 인증서, 중개자 인증서(인증서 발행 기관의 인증서)이다.
- ssl.key : 개인키
- ssl.crt : 인증서
- chain_ssl.crt : 중개자 인증서
2) 다운로드한 인증서를 서버에 복사
서버에 폴더를 만들어, 다운로드한 인증서를 해당 위치에 복사한다.
예) etc/pki/tls
Tip! 개인키 비밀번호 제거
개인키에 비밀번호가 걸려 있는 경우 Apache 웹 서버를 실행할 때마다 비밀번호를 입력해 주어야 한다. 자동으로 서버를 재시작해야 하는 경우가 있다면 그때마다 수동으로 비밀번호를 입력해 줄 수 없으니.. 개인키에 걸린 비밀번호를 제거한 키파일을 만들어 올려 놓으면 편하다.
다만, 개인키 파일에 비밀번호가 사라진 만큼 키파일이 노출되지 않도록 보안에 신경써야 한다.
[root@www]# openssl rsa -in ssl.key -out ssl_nopass.key
Enter pass phrase for ssl.key: [비밀번호 입력]
writing RSA key
[root@www]# [완료]
Tip! 인증서 만료 날짜 확인
openssl x509 -in server.crt -noout -dates
3) httpd.conf 파일을 아래와 같이 수정
NameVirtualHost 127.0.0.1:443
<VirtualHost 127.0.0.1:443>
SSLEngine on
# 본인의 인증서가 저장된 경로 및 파일 설정
SSLCertificateFile /etc/pki/tls/ssl.crt
SSLCertificateKeyFile /etc/pki/tls/ssl_nopass.key
SSLCertificateChainFile /etc/pki/tls/chain_ssl.crt
</VirtualHost>
# NameVirtualHost 127.0.0.1:443와 VirtualHost의 아이피 주소 127.0.0.1을 본인의 아이피 주소로 변경해서 사용
3. http를 https로 리다이렉션 설정
혹시 http로 접속해오는 사람들이 있는 경우를 대비하여, http로 접속 시 https로 리다이렉트 하도록 설정해준다.
1) 아파치 모듈 중 mod_rewrite 모듈 활성화
CentOS 7에서는 mod_rewirte가 기본적으로 활성화 되어 있다. 혹시 안되어 있는 경우, 아래와 같이 활성화 한다.
# 아래 명령어로 00-base.conf 파일을 연다
# vi /etc/httpd/conf.modules.d/00-base.conf
파일이 열리면 다음 줄을 추가하거나, 주석 처리를 제거한다.
LoadModule rewrite_module modules/mod_rewrite.so
2) httpd.conf 파일에 리다이렉션 룰을 추가 (아래 내용을 추가)
<Directory "${SRVROOT}/htdocs/www">
<IfModule mod_rewrite.c>
# for SSL redirect http to https
RewriteCond %{HTTPS} != on
RewriteRule ^(.*)$ https://%{HTTP_HOST} /$1 [R,L]
</IfModule>
</Directory>
4. Apache 재시작
apache 설정을 바꾸어 주었으므로, 재시작하여 반영한다.
5. https로 접속이 되는지 확인 및 링크 수정
http를 https로 바꾸어 접속이 되는지 확인한다.
또한, 웹사이트 내에서 링크가 걸려 있는 경우, 링크 경로의 http를 https로 모두 바꾸어준다.
용어 정의
HTTP (Hypertext Transfer Protocol)
웹상에서 정보를 주고받을 수 있는 어플리케이션 레이어 프로토콜(전송 규약) 이다. 주로 HTML 문서를 주고받는데 사용된다.
HTTP는 클라이언트와 서버 사이에 이루어지는 요청/응답(request/response) 프로토콜이다. 예를 들면, 클라이언트인 웹 브라우저가 HTTP를 통하여 서버로부터 웹페이지(HTML)나 그림 정보를 요청하면, 서버는 이 요청에 응답하여 필요한 정보를 해당 사용자에게 전달하게 된다. 이 정보가 모니터와 같은 출력 장치를 통해 사용자에게 나타나는 것이다. HTTP를 통해 전달되는 자료는 http:로 시작하는 URL(인터넷 주소)로 조회할 수 있다.
출처 : https://ko.wikipedia.org/wiki/HTTP
HTTPS (HTTP Secure)
HTTPS (HTTP Secure) 는 HTTP protocol의 암호화된 버전이다. 이것은 대개 클라이언트와 서버 간의 모든 커뮤니케이션을 암호화 하기 위하여 SSL 이나 TLS을 사용한다. 이 커넥션은 클라이언트가 민감한 정보를 서버와 안전하게 주고받도록 해준다. 예를들면 금융 활동 이나 온라인 쇼핑이 있을 수 있다.
출처 : https://developer.mozilla.org/ko/docs/Glossary/https
SSL (Secure Sockets Layer)
Secure Sockets Layer(SSL)는 클라이언트와 서버 간의 안전한 링크를 통해 송수신되는 모든 데이터를 안전하게 보장하는 과거의 보안 표준 기술이었다. SSL 버전 3.0은 Netscape가 1999년에 발표했으며 현재에는 Transport Layer Security (TLS) 로 대체되었다.
TLS (Transport Layer Security) 전송 계층 보안
SSL의 새로운 명칭. 컴퓨터 네트워크상에서 통신 보안을 제공하기 위해 설계된 암호 규약이다.
이메일, 웹 브라우징, 메세징, 그리고 다른 프로토콜들의 감청을 통한 정보의 변형을 방지한다. SSL과 TLS 모두 네트워크 상에서 보안을 제공하는 cryptographic 프로토콜을 사용한 클라이언트 / 서버 프로토콜이다. 서버와 클라이언트가 TLS로 통신을 할때, 어떠한 제 3자도 메세지를 변형시키거나 감청할 수 없도록 한다.
출처 :
https://developer.mozilla.org/ko/docs/Glossary/TLS
https://en.wikipedia.org/wiki/Transport_Layer_Security
'Web' 카테고리의 다른 글
[인코딩] 웹사이트 인코딩 문제 (0) | 2023.02.15 |
---|---|
[Google Analytics] 구글 애널리틱스 트래픽 소스(Traffic source) 정의 (0) | 2021.12.07 |