SSL & TLS

메론보이·2024년 6월 9일

리눅스

목록 보기
16/17

웹 보안을 위한 SSL과 TLS의 개념 및 설정 방법

안녕하세요! 오늘은 웹 보안을 강화하기 위해 필수적인 SSL과 TLS 인증에 대해 알아보겠습니다. SSL(보안 소켓 계층)과 TLS(전송 계층 보안)는 인터넷을 통해 전송되는 데이터의 기밀성과 무결성을 보장하기 위한 암호화 프로토콜입니다. 이 글에서는 SSL과 TLS의 개념, 차이점, 작동 원리, 그리고 리눅스 RHEL에서 TLS 인증서를 설치하고 사용하는 방법에 대해 자세히 알아보겠습니다.

SSL과 TLS의 개념과 정의

SSL이란?
SSL(Secure Sockets Layer)은 인터넷을 통해 전송되는 데이터를 암호화하여 보호하는 초기의 프로토콜입니다. 데이터의 기밀성과 무결성을 보장하기 위해 설계되었습니다.

TLS란?
TLS(Transport Layer Security)는 SSL의 후속 버전으로, 보안성을 강화한 프로토콜입니다. 현재 대부분의 웹 애플리케이션에서 TLS를 사용하고 있습니다.

SSL/TLS 인증서란?
SSL/TLS 인증서는 웹 서버와 브라우저 간의 안전한 연결을 보장하는 디지털 인증서입니다. 신뢰할 수 있는 인증 기관(CA, Certificate Authority)에 의해 발급되며, 서버의 신원을 확인하고, 서버와 클라이언트 간의 데이터 전송을 암호화하여 데이터 유출이나 변조를 방지합니다.

SSL과 TLS의 차이점

  1. 개발 및 표준화

    • SSL: Netscape에 의해 개발되었으며, SSL 2.0과 3.0이 가장 널리 알려진 버전입니다. SSL 2.0은 심각한 보안 결함 때문에 빠르게 사용이 중단되었고, SSL 3.0도 현재는 보안 취약성 때문에 사용이 권장되지 않습니다.
    • TLS: IETF(Internet Engineering Task Force)에 의해 표준화된 프로토콜로, SSL 3.0의 후속 버전입니다. TLS 1.0이 SSL 3.0을 대체하며 등장했고, 이후 TLS 1.1, 1.2, 1.3 등의 버전이 출시되었습니다.
  2. 암호화 알고리즘

    • SSL: RC4, MD5 등 초기 암호화 알고리즘을 사용했습니다. 이들 알고리즘은 현재 보안상의 이유로 권장되지 않습니다.
    • TLS: AES, SHA-256 등 더 강력하고 안전한 암호화 알고리즘을 사용합니다.
  3. 보안 기능

    • SSL: SSL 3.0까지는 여러 보안 취약점이 존재하며, 일부는 구조적인 문제로 인해 완벽하게 해결되지 않았습니다.
    • TLS: TLS는 SSL의 보안 취약점을 보완하였으며, 더 안전한 핸드셰이크 프로세스와 암호화 방법을 제공합니다. TLS 1.2와 1.3은 특히 보안과 성능 측면에서 큰 개선이 있었습니다.
  4. 프로토콜 버전

    • SSL: 더 이상 업데이트되지 않으며, 대부분의 최신 시스템에서는 SSL을 비활성화하고 TLS를 사용하도록 설정되어 있습니다.
    • TLS: 현재도 활발히 사용되며 최신 버전은 TLS 1.3입니다.

TLS의 보완점과 강점

  1. 향상된 보안

    • 암호화 강도: TLS는 더 강력한 암호화 알고리즘을 지원합니다. 예를 들어, AES(Advanced Encryption Standard)와 SHA-256(Secure Hash Algorithm 256-bit)를 사용하여 더 높은 수준의 보안을 제공합니다.
    • 핸드셰이크 과정: TLS는 초기 핸드셰이크 과정에서 사용하는 키 교환 방식과 인증 과정을 강화하여 중간자 공격(Man-in-the-Middle)을 방지합니다.
  2. 성능 개선

    • 프로토콜 최적화: TLS 1.3은 핸드셰이크 과정을 단순화하여 성능을 향상시켰습니다. TLS 1.2까지는 핸드셰이크 과정이 여러 단계로 구성되어 있었지만, TLS 1.3은 이를 줄여 연결 시간을 단축시켰습니다.
  3. 보안 취약점 보완

    • 업데이트된 표준: TLS는 정기적으로 업데이트되어 새로운 보안 위협에 대응합니다. SSL 3.0과 비교했을 때, TLS 1.2와 1.3은 많은 보안 취약점이 수정되었습니다.
    • PFS(Perfect Forward Secrecy): TLS는 PFS를 지원하여 개별 세션 키가 유출되더라도 다른 세션의 암호화 통신이 안전하게 유지되도록 합니다.
  4. 널리 사용되는 표준

    • 광범위한 채택: TLS는 현재 대부분의 웹 서버와 클라이언트에서 사용되는 표준입니다. HTTPS를 사용하는 모든 웹사이트는 TLS를 통해 데이터를 암호화합니다.

리눅스 RHEL에서 SSL/TLS 설정 및 사용 방법

1. SSL/TLS 인증서 생성

먼저 SSL/TLS 인증서 요청 파일(CSR)을 생성합니다.

openssl req -new -newkey rsa:2048 -nodes -keyout yourdomain.key -out yourdomain.csr

이 명령은 개인 키 파일(yourdomain.key)과 인증서 요청 파일(yourdomain.csr)을 생성합니다. CSR 파일을 신뢰할 수 있는 인증 기관에 제출하여 인증서를 발급받습니다.

2. Apache 웹 서버에 SSL/TLS 설정

Apache의 SSL 모듈을 활성화합니다.

sudo yum install mod_ssl

Apache 설정 파일을 수정하여 SSL/TLS 인증서를 사용하도록 합니다.

sudo vi /etc/httpd/conf.d/ssl.conf

ssl.conf 파일에서 다음과 같이 설정합니다.

<VirtualHost *:443>
    ServerAdmin admin@yourdomain.com
    DocumentRoot /var/www/html
    ServerName yourdomain.com

    SSLEngine on
    SSLCertificateFile /etc/httpd/ssl/yourdomain.crt
    SSLCertificateKeyFile /etc/httpd/ssl/yourdomain.key
    SSLCertificateChainFile /etc/httpd/ssl/yourdomain-ca.crt

    <Directory /var/www/html>
        AllowOverride All
    </Directory>
</VirtualHost>

Apache TLS 설정 파일의 각 명령어 개념과 설명

1. <VirtualHost *:443>

  • 개념: VirtualHost는 Apache 웹 서버에서 특정 도메인이나 IP 주소에 대해 별도의 설정을 적용할 수 있도록 하는 컨테이너입니다. *:443은 모든 IP 주소에서 443 포트(HTTPS)를 통해 들어오는 요청을 처리하겠다는 의미입니다.
  • 언제 쓰는가: HTTPS를 통해 들어오는 요청을 처리할 때 사용합니다.
  • 정보 입력: 포트 번호와 IP 주소를 지정합니다. *는 모든 IP 주소를 의미합니다.

2. ServerAdmin admin@yourdomain.com

  • 개념: 이 설정은 서버 관리자 이메일 주소를 지정합니다.
  • 언제 쓰는가: 서버에 문제가 발생했을 때 사용자에게 보여지는 에러 페이지에 서버 관리자 이메일 주소를 표시할 때 사용합니다.
  • 정보 입력: 서버 관리자의 이메일 주소를 입력합니다.

3. DocumentRoot /var/www/html

  • 개념: DocumentRoot는 웹 서버가 제공할 웹 파일들이 위치하는 디렉토리를 지정합니다.
  • 언제 쓰는가: 특정 도메인의 루트 디렉토리를 설정할 때 사용합니다.
  • 정보 입력: 웹 파일들이 위치한 디렉토리 경로를 입력합니다.

4. ServerName yourdomain.com

  • 개념: ServerName은 특정 도메인 이름을 지정합니다.
  • 언제 쓰는가: VirtualHost가 해당 도메인에 대한 요청을 처리하도록 할 때 사용합니다.
  • 정보 입력: 처리할 도메인 이름을 입력합니다.

5. SSLEngine on

  • 개념: SSLEngine은 SSL/TLS 암호화를 활성화하는 설정입니다.
  • 언제 쓰는가: HTTPS를 통해 데이터를 암호화할 때 사용합니다.
  • 정보 입력: on 또는 off 값을 입력하여 SSL/TLS 암호화를 활성화 또는 비활성화합니다.

6. SSLCertificateFile /etc/httpd/ssl/yourdomain.crt

  • 개념: SSLCertificateFile은 서버의 SSL/TLS 인증서를 지정하는 설정입니다.
  • 언제 쓰는가: 서버 인증서를 설정할 때 사용합니다.
  • 정보 입력: 인증서 파일의 경로를 입력합니다.

7. SSLCertificateKeyFile /etc/httpd/ssl/yourdomain.key

  • 개념: SSLCertificateKeyFile은 서버의 SSL/TLS 개인 키를 지정하는 설정입니다.
  • 언제 쓰는가: 서버가 인증서에 서명하고 암호화를 설정할 수 있도록 개인 키를 설정할 때 사용합니다.
  • 정보 입력: 개인 키 파일의 경로를 입력합니다.

8. SSLCertificateChainFile /etc/httpd/ssl/yourdomain-ca.crt

  • 개념: SSLCertificateChainFile은 서버의 체인 인증서 파일을 지정하는 설정입니다. 체인 인증서는 중간 인증 기관의 인증서로, 최종 사용자 인증서와 루트 인증서 사이를 연결합니다.
  • 언제 쓰는가: 중간 인증 기관이 있는 경우 체인 인증서를 설정할 때 사용합니다.
  • 정보 입력: 체인 인증서 파일의 경로를 입력합니다.

9. <Directory /var/www/html>

  • 개념: Directory 디렉티브는 특정 디렉토리의 설정을 지정합니다.
  • 언제 쓰는가: 특정 디렉토리의 접근 권한이나 기타 설정을 지정할 때 사용합니다.
  • 정보 입력: 설정을 적용할 디렉토리 경로를 입력합니다.

10. AllowOverride All

  • 개념: AllowOverride는 .htaccess 파일을 통해 허용할 설정을 지정합니다.
  • 언제 쓰는가: .htaccess 파일을 통해 특정 디렉토리의 설정을 덮어쓸 수 있도록 허용할 때 사용합니다.
  • 정보 입력: 허용할 설정의 종류를 입력합니다. 예를 들어, All은 모든 설정을 덮어쓸 수 있도록 허용합니다.

작동 원리

이 설정 파일은 Apache 웹 서버가 HTTPS를 통해 들어오는 요청을 처리하도록 구성하는 방법을 설명합니다. HTTPS 요청이 들어오면 서버는 TLS 인증서를 사용하여 클라이언트와 안전한 연결을 설정하고, 암호화된 데이터를 주고받습니다.

  1. 클라이언트가 https://yourdomain.com에 접속하면 443 포트로 요청이 들어옵니다.
  2. Apache는 해당 요청을 받아 VirtualHost 설정에 따라 처리합니다.
  3. SSL/TLS 암호화가 활성화되고, 서버는 클라이언트에게 인증서를 제공합니다.
  4. 클라이언트는 인증서를 검증하고, 세션 키를 생성하여 암호화된 연결을 설정합니다.
  5. 이후 클라이언트와 서버는 공유된 세션 키를 사용하여 암호화된 데이터를 주고받습니다.

이 과정을 통해 클라이언트와 서버 간의 데이터 전송이 안전하게 이루어지며, 중간에서 데이터가 유출되거나 변조되는 것을 방지합니다.
3. Apache 서버 재시작

설정을 저장한 후 Apache 서버를 재시작합니다.

sudo systemctl restart httpd

결론

SSL과 TLS는 모두 데이터 암호화와 보안을 위해 사용되지만, TLS는 SSL의 여러 보안 취약점을 보완하고 성능을 향상시킨 프로토콜입니다. 리눅스 RHEL에서 SSL/TLS 인증서를 설정하는 방법을 잘 이해하고 적용하면 웹 서비스의 보안을 크게 강화할 수 있습니다. 최신 웹 서비스와 애플리케이션은 TLS를 사용하여 더 안전하고 빠른 데이터 통신을 제공합니다.

더 많은 정보가 필요하거나 도움이 필요하다면 댓글로 남겨주세요. 감사합니다!

0개의 댓글