[TIL 21. 리눅스(2) WEB]

Juhee Fred Lee·2023년 11월 7일
0

TIL

목록 보기
24/24

HTTP

  1. 가상 호스트 (Virtual Hosts)

    1. 한 시스템에서 여러 개의 도메인과 호스트 이름을 구분하여 웹 서비스 가능
    2. 연결된 서버의 IP 주소와 클라이언트가 요청한 호스트 이름의 조합에 따라 다양한 구성 설정 사용 가능
    3. 이름 기반의 가상 호스팅
      1. 네입서버가 각 호스트명이 올바른 IP 주소로 대응하도록 가상 호스트 설정
      2. 하나의 IP 주소를 가지고 여러 호스트에 대해서 웹 서비스 제공
    4. IP 기반의 가상 호스팅
      1. 하나의 아파치 웹 서버에서 물리적인 네트워크 카드에 여러 개의 IP 할당
      2. 각 호스트들이 서로 다른 IP 주소를 이용할 수 있도록 하는 방식
  2. 가상 호스트 구성

    1. 기본 구성 내에 <virtualHost> 블록을 사용해서 구성 사능

    2. 편리한 관리를 위해 /etc/httpd/conf/httpd.conf 내에 정의하지 않고 /usr/share/doc/httpd-2.4.6/ 디렉토리 내의 템플릿 파일로 구성

    3. 가상 호스트 구성 템플릿 파일인 /usr/share/doc/httpd-2.4.6/httpd-vhosts.conf을 활용하여 설정

    4. 해당 파일을 /etc/httpd/conf.d/ 디렉토리 내에 이름을 바꾸어서 복사

    5. 와일드카드 및 우선 순위

      1. 지시문의 IP 주소 부분은 default 및 * 둘 중 하나와 바꿀 수 있음
      2. httpd가 먼저 명시된 IP 주소 중 설정파일에 일치하는 부분 확인
      3. 일치하는 부분이 없으면 와일드 카드를 포함하여 확인
      4. 그래도 일치하는 가상 호스트가 없으면 기본 서버 구성(httpd.conf) 사용
      5. ServerName 또는 ServerAlias 값이 일치하는 가상 호스트를 찾지 못하고 요청이 들어온 IP/포트 조합에 대해 여러 개의 가상호스트가 존재한다면 구성 파일에 첫 번째로 정의된 가상 호스트가 표시(00-default.conf)
      6. 여러 개의 가상 호스트 설정 파일을 생성 할 때에는 "숫자-이름.conf" 형식으로 생성하는 것이 관리하기 편리함.
  3. 실습

    1. http 설치

      1. dnf -y install httpd 명령어로 http 설치

    2. 가상 호스트 구성

      1. ``cp **/usr/share/doc/httpd-2.4.6/httpd-vhosts.conf /etc/httpd/conf.d/00-vhost.conf +** vim etc/httpd/conf.d/00-vhost.conf명령어로 구성 파일 작성

      2. mkdir /var/www/(지정경로명) 생성 및 index파일 추가

    3. 호스트 설정

      1. vim /etc/hosts 명령어로 호스트 추가
    4. 시스템 구동

      1. systemctl 명령어로 httpd, firewall 활성화

      2. firewall-cmd —add-service=http —permanent firewall-cmd —reload 명령어로 방화벽 설정

    5. 실행결과

HTTPS

  1. HTTPS: HTTP protocol의 암호화된 버전, 클라이언트와 서버 간의 모든 커뮤니케이션을 암호화 하기 위하여 SSL 이나 TLS 을 사용한다.

    1. SSL (Secure Socket Layer): 넷스케이프사에서 개발한 인터넷 보안 프로토콜
    2. TLS (Transport Layer Security):SSL 이 표준화 되면서 바뀐 이름
  2. HTTPS 암호화 방식

    1. 클라이언트 → 서버로 랜덤 데이터와 사용 가능한 암호화 방식을 보낸다.

    2. 서버 → 클라이언트로 랜덤 데이터, 사용할 암호화 방식과 SSL 인증서를 보낸다.

    3. 클라이언트는 서버에게 받은 인증서의 CA가 자신이 들고 있는 CA 리스트에 있는지 확인하고, 있다면 CA의공개키로 복호화한다. 이는 곧 CA 비밀키에 의해 암호화됐다는 것이므로 인증서의 신원을 보증해준다. (공개키 암호화 방식)

    4. 클라이언트는 자기가 보낸 랜덤 데이터와 서버로부터 받은 랜덤 데이터를 조합하여 임시 키 (pre master secret key)를 만든다.

    5. 만들어진 임시 키를 인증서의 공개키로 암호화하여 서버에게 보낸다.

    6. 서버는 자신이 들고 있던 비밀키로 임시 키를 복호화한다.

    7. 이로써 클라이언트와 서버는 동일한 임시 키를 공유하게 되는데, 일련의 과정을 거쳐 master secret 값을 만들고 세션 키를 생성한다.

    8. 이렇게 만들어진 세션 키로 암호화된 데이터를 주고받는다. (대칭키 암호화 방식)

    9. 세션이 종료되면 클라이언트와 서버 모두 세션 키를 폐기한다.

    10. 도식

      출처: NOBREAK

  3. 인증서 생성

    1. 개인키 생성 -> csr 파일 생성(서명 요구) -> crt 파일 생성(인증서)
    2. 개인키 생성
      1. openssl genrsa -out keyfile명 key_length
        • out : 키 이름 지정
        • key_length
        • 키의 길이 지정
        • 기본값 512 ( 512 / 768 / 1024 / 2048)
    3. CSR 생성
      1. CSR(Certificate Signing Request)은 서버 인증서를 발급받기 위해 필요한 서명 요구
      2. CSR에는 사용자의 정보를 입력해야 함
      3. CA(Certificate Authority)로부터 인증서를 발급받으려면 이 CSR을 작성하고 제출해야 서명된 인증서를 발급받을 수 있음
      4. CA의 인증이 필요하지 않으면 자필 서명 인증서(Self-Signed Certificate)를 생성하여 사용할 수있음
      5. openssl req -new -key 생성_keyfile -out csr파일명
        • key : 이미 생성한 개인키 파일
        • out : 생성할 csr 파일
    4. CRT 생성
      1. CRT는 인증서(Certificate)를 나타내는 CERT의 약자로 인증서는 시스템에서 ID를 확인하고 이후에 Secure Sockets Layer/전송 계층 보안(SSL/TLS) 프로토콜을 사용하여 다른 시스템에 대한 암호화된 네트워크 연결을 설정할 수 있도록 하는 디지털 객체임
      2. 인증서는 퍼블릭 키 인프라(PKI)로 알려진 암호화 시스템 내에서 사용함
      3. 양쪽 모두가 인증 기관으로 알려진 타사를 신뢰하는 경우, PKI는 한쪽에서 인증서를 사용하여 다른 쪽의 자격 증명을 설정할 수 있는 방법을 제공
      4. 인증서는 네트워크 통신을 보호하고 인터넷을 통한 웹 사이트 및 프라이빗 네트워크의 리소스에 대한 아이덴티티를 설정하는 역할을 함.
      5. openssl x509 -req -signkey 생성_keyfile -in 생성_csr파일명 -out crt_파일명
        • x509 : x509 서브커맨드는 X.509 표준을 따르는 인증서를 생성
        • -req : CSR을 사용한다는 의미
        • -signkey : 이미 생성된 키를 지정
        • -in : 이미 생성된 CSR 파일을 지정
    5. 설정
      1. 생성된 개인키 와 CRT 파일을 사용, CSR 파일은 HTTPS 설정에서 사용되지 않음
      2. 개인키와 CRT 파일을 /etc/pki/tls/ 로 복사
      3. 권한과 SELinux 컨텍스트 확인
  4. SSL/TLS 설정

    1. Apache 웹 서버에서 HTTPS를 사용하기 위해서는 SSL/TLS를 지원하는 모듈이 필요

    2. mod_ssl 패키지 설치: dnf -y install mod_ssl

    3. 패키지를 설치하게 되면 SSL/TLS 관련 설정을 저장하고 있는/etc/httpd/conf.d/ssl.conf 파일 생성

    4. ssl.conf 설정

      1. SSLProtocol: SSLProtocol 을 모두 (all) 사용할 수 있지만 SSLv3, TLSv1, TLSv1.1 버전은 사용하지 않음

      2. SSLCipherSuite: SSL 암호화 제품군 설정으로 https://ssl-config.mozilla.org/ 접속해서 Apache의 버전과 OpenSSL의 버전을 입력하면 내 서버에 알맞은 SSLCipherSuite 값을 알 수 있음

      3. SSLCertificateFile: 생성한 CRT 파일의 위치 지정

      4. SSLCertificateKeyFile: 생성한 개인키의 위치 지정

      5. 기존 http 주소를 https로 리다이렉팅하도록 설정 /etc/httpd/conf.d/(설정파일)

profile
공릉동에 살며 백엔드를 공부하는 감자입니다.

0개의 댓글