[Linux (리눅스)/#11 Web service]

SeungWoo·2023년 11월 7일

[Linux(리눅스)]

목록 보기
12/13
post-thumbnail

web 서비스

  • apache
    • 웹 서버
      • 웹 서비서를 제공하는 서버
      • 인터넷만 연결되어 있는 어느 곳에서든 웹서버에 방문 가능
      • 네트워크를 통해 약속된 주소로 요청시 지정된 컨텐츠를 제공
      • 기본적으로 정적인 컨텐츠만 제공
      • 별도의 구성 시 동적인 컨텐츠 제공 가능
    • 웹 서버의 기본적인 동작
      • 웹 브라우저로 Client가 페이지 요청
      • HTTP( Hypertext Transfer Protocol)을 사용하여 웹 브라우저와 웹 서버간 의사소통
      • Clien가 페이지 요청 시 웹 서버는 받은 페이지를 보내줌
  • 정적 웹 서버 동작 방식
  1. 클라이언트 즉, 웹 브라우저를 통해 80번 포트로 웹 서버에 연결
  2. 사용자 문서 (index.html)를 요청
  3. 웹 서버가 클라이언트가 요청한 파일을 시스템에서 검색
  4. 웹 서버가 요청한 파일을 읽음
  5. 웹 서버가 파일을 클라이언트의 웹 브라우저에게 제
  • 동적 웹 서버 동작 방식
  1. 클라이언트 즉, 웹 브라우저를 통해 80번 포트로 웹 서버에 연결
  2. 사용자 문서 동적인 페이지를 표현하는 php 프로그램 요청
  3. 웹 서버가 php 프로그램을 실행시킨 후 클라이언트가 요청한 매개변수 넘겨줌
  4. 웹 서버가 php 프로그램으로부터 생성된 결과를 읽어드림
  5. php 프로그램으로부터의 결과를 웹 서버는 클라이언트의 브라우저에 전송
  • Apache 특징
    • 매우 뛰어난 성능과 기능을 가지고 있는 공개형 웹 서버 프로그램
    • 다양한 플랫폼에서 동작할 수 있도록 강력하고 유연하게 설계
    • 보조적 프로그램 다양
    • 공개된 형태로 개발
    • 다양한 상황에 따른 서비스 지원
    • 동적 공유 객체 지원
    • 모듕 사용으로 기능 추가가 용이
    • 유연한 설정
  • 주용 디렉토리
/var/www/웹 페이지 콘텐츠 기본 디렉토리 위치
/etc/httpd/conf웹 서버 주 설정 파일인 http.conf 파일 위치
/etc/httpd/conf.d/웹 서버의 추가 설정 파일 위치
/etc/httpd/conf.modules.d/웹 서버와 함께 설치된 모듈 설정 관련 파일 위치
/usr/share/httpd테스트 페이지, 에러 페이지 등 기본 컨텐츠 위치
/usr/share/doc/httpd웹 서버 관련 문서 파일 위치
  • Apache 구성

    • /etc/httpd/conf/httpd.conf
    • 키/값 구성 지시문과 HTML 유사 < Blockname parameter > 블록 2부분으로 구성
    • 블록 외부의 키/값 구성은 전체 서버 구성에 영향
    • 블록 내부의 지시문은 지정된 구성이나 설정한 요구 조건이 충족될 때만 적용
    • /etc/httpd/conf/httpd.conf
  • AllowOverride

    • .htaccess 파일에 포함된 설정항목의 사용 여부를 결정
    • .htaccess 파일은 각 디렉토리에 생성되어 디렉토리의 개별 설정을 지정하는 용도로 사용
    • .htaccess 파일의 설정을 선택적으로 사용하려면 지시어 그룹을 지정
  • Require

    • 인증된 사용자가 권한을 부여받았는지 확인하는 지시어

    Virtual Host(가상 호스트)

  • 가상 호스트

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

    • 기본 구성 내에 < VirtualHost >블록을 사용해서 구성 가능
    • 편리한 관리를 위해 해/etc/httpd/conf/httpd.conf 내에 정의하지 않고 /usr/share/doc/httpd-2.4.6/ 디렉토리 내의 템플릿 파일로 구성
    • 가상 호스트 구성 템플릿 파일인 /usr/share/doc/httpd-2.4.6/httpd-vhosts.conf 을 이용
    • 해당 파일을 /etc/httpd/conf.d/ 디렉토리 내에 이름을 바꾸어서 복사

https

  • HTTPS (HTTP Secure)
    • HTTP protocol의 암호화된 버전
    • 클라이언트와 서버 간의 모든 커뮤니케이션을 암호화 하기 위하여 SSL 이나 TLS을 사용
      • SSL( Secure Socket Layer )
        • 넷스케이프사에서 개발한 인터넷 보안 프로토콜
      • TLS( Transport Layer Security )
        • SSL이 표준화 되면서 바뀐 이름
  • HTTPS 암호화 방식
  1. 클라이언트 → 서버로 랜덤 데이터와 사용 가능한 암호화 방식을 보낸다.
  2. 서버 → 클라이언트로 랜덤 데이터, 사용할 암호화 방식과 SSL 인증서를 보낸다.
  3. 클라이언트는 서버에게 받은 인증서의 CA가 자신이 들고 있는 CA 리스트에 있는지 확인하고, 있다면 CA의
    공개키로 복호화한다. 이는 곧 CA 비밀키에 의해 암호화됐다는 것이므로 인증서의 신원을 보증해준다.
    (공개키 암호화 방식)
  4. 클라이언트는 자기가 보낸 랜덤 데이터와 서버로부터 받은 랜덤 데이터를 조합하여 임시 키 (pre master
    secret key)를 만든다.
  5. 만들어진 임시 키를 인증서의 공개키로 암호화하여 서버에게 보낸다.
  6. 서버는 자신이 들고 있던 비밀키로 임시 키를 복호화한다.
  7. 이로써 클라이언트와 서버는 동일한 임시 키를 공유하게 되는데, 일련의 과정을 거쳐 master secret 값을
    만들고 세션 키를 생성한다.
  8. 이렇게 만들어진 세션 키로 암호화된 데이터를 주고받는다. (대칭키 암호화 방식)
  9. 세션이 종료되면 클라이언트와 서버 모두 세션 키를 폐기한다
  • 인증서 생성
    • 개인키 생성 -> csr 파일 생성( 서명 요구 ) -> crt 파일 생성( 인증서 )
    • 개인키 생성
      • openssl genrsa -out keyfile명 key_length
    • CSR 생성
      • CSR(Certificate Signing Request)은 서버 인증서를 발급받기 위해 필요한 서명 요구
      • openssl req -new -key 생성_keyfile -out csr파일명
    • CRT 생성
      • CRT는 인증서(Certificate)를 나타내는 CERT의 약자로 인증서는 시스템에서 ID를 확인하고 이후에 Secure Sockets Layer/전송 계층 보안(SSL/TLS) 프로토콜을 사용하여 다른 시스템에 대한 암호화된 네트워크 연결을 설정할 수 있도록 하는 디지털 객체임
      • openssl x509 -req -signkey 생성keyfile -in 생성_csr파일명 -out crt파일명
  • 실습
 web 서비스 실습

가상 호스트

dnf -y install httpd

- vhost0
cd /etc/httpd/conf.d/

vi 00-vhost.conf

<VirtualHost *:80>
    DocumentRoot /var/www/html0
    ServerName vhost0.test.example.com
    ServerAlias vhost0
</VirtualHost>

<Directory /var/www/html0>
    AllowOverride None
    Require all granted
</Directory>

:wq

mkdir /var/www/html0

echo vhost0 > /var/www/html0/index.html

--------------------------------------------

- vhost1

cd /etc/httpd/conf.d/

vi 01-vhost.conf

<VirtualHost *:80>
    DocumentRoot /var/www/html1
    ServerName vhost1.test.example.com
    ServerAlias vhost1
</VirtualHost>

<Directory /var/www/html1>
    AllowOverride None
    Require all granted
</Directory>

:wq

mkdir /var/www/html1

echo vhost1 > /var/www/html1/index.html

-----------------------------------------

vi /etc/hosts

192.168.56.101    server.test.example.com  vhost0.test.example.com vhost0 vhost1.test.example.com vhost1

:wq

systemcl start httpd

firewall-cmd --add-service=http   --permanent 
firewall-cmd --add-port=8080/tcp --permanent
firewall-cmd --reload

curl server.test.example.com
curl vhost0
curl vhost1

===========================================

https 실습

ssl 패키지 설치

yum -y install mod_ssl

openssl genrsa -out private.key 2048
openssl req –new –key private.key –out cert.csr
openssl x509 –req –signkey private.key –in cert.csr –out cert.crt

chmod 600 private.key cert.crt

mv private.key /etc/pki/tls/private/
mv cert.* /etc/pki/tls/certs/

----------------------------------------------------

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

<VirtualHost _default_:443>

DocumentRoot "/var/www/html"                   =>  # 제거
ServerName server.test.example.com:443         =>  # 제거 후에 server.test.example.com:443 으로 변경

ErrorLog logs/ssl_error_log
TransferLog logs/ssl_access_log
LogLevel warn

SSLEngine on

SSLProtocol all -SSLv2 -SSLv3

SSLCipherSuite HIGH:3DES:!aNULL:!MD5:!SEED:!IDEA


SSLCertificateFile /etc/pki/tls/certs/localhost.crt      =>    cert.crt  으로 변경

SSLCertificateKeyFile /etc/pki/tls/private/localhost.key   =>    private.key 로 변경

:wq

----------------------------------------------------------

vi /etc/httpd/conf.d/00-vhost.conf

<VirtualHost *:80>
    DocumentRoot /var/www/html0
    ServerName vhost0.test.example.com
    ServerAlias vhost0
    RewriteEngine On                                                   => 추가
    RewriteCond %{HTTPS} off                                           => 추가
    RewriteRule ^(.*)$https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]     => 추가
</VirtualHost>

<Directory /var/www/html0>
    AllowOverride None
    Require all granted
</Directory>

:wq

----------------------------------------------------------------

vi /etc/httpd/conf.d/01-vhost.conf

<VirtualHost *:80>
    DocumentRoot /var/www/html1
    ServerName vhost1.test.example.com
    ServerAlias vhost1
    RewriteEngine On                                                   => 추가
    RewriteCond %{HTTPS} off                                           => 추가
    RewriteRule ^(.*)$https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]     => 추가
</VirtualHost>

<Directory /var/www/html1>
    AllowOverride None
    Require all granted
</Directory>

:wq

----------------------------------------------------------

systemcl restart httpd

firewall-cmd --add-service=https   --permanent 
firewall-cmd --reload
profile
This is my study archive

0개의 댓글