서버 운영/APM 서버 구축

[Ubuntu 20.04 - Apache2 서버]자체서명 SSL/TLS 인증서를 이용한 https:// 프로토콜 연결 구축

씨실과 날실 2020. 11. 12. 09:00

 

[관련 게시물]

2020/11/10 - [서버 운영/APM 서버 구축] - [Ubuntu 20.04 - Apache2 서버] 가상호스트(VirtualHost) 설정

2020/11/12 - [서버 운영/APM 서버 구축] - [Ubuntu 20.04 - Apache2 서버]자체서명 SSL/TLS 인증서를 이용한 https:// 프로토콜 연결 구축

2020/11/14 - [서버 운영/APM 서버 구축] - http:// 연결을 https:// 연결로 자동 리디렉션(Redirection)

 


 

Ubuntu 20.04 LTS에서 APM 설치

2020/09/14 - [서버 운영/APM 서버 구축] - 우분투(Ubuntu) 20.04에서 APM 설치 - 아파치(Apache2 설치

2020/09/16 - [서버 운영/APM 서버 구축] - 우분투(Ubuntu) 20.04에서 APM 설치 - 마리아DB(MariaDB) 10.3 설치

2020/09/18 - [서버 운영/APM 서버 구축] - 우분투(Ubuntu) 20.04에서 APM 설치 - 마리아DB(MariaDB) 10.5 설치

2020/09/20 - [서버 운영/APM 서버 구축] - 우분투(Ubuntu) 20.04에서 APM 설치 - PHP 7.4 설치

2020/09/22 - [서버 운영/APM 서버 구축] - 우분투(Ubuntu) 20.04에서 APM 설치 - APM 설치 후 방화벽 설정

2020/09/24 - [서버 운영/APM 서버 구축] - MariaDB 10.4 이후의 계정 인증 관련 변화(unix_socket, mysql_native_password 인증 / 계정, 암호 및 전역 권한 정보 저장 테이블 변경 등)

2020/09/26 - [서버 운영/APM 서버 구축] - 우분투 20.04 APM 서버 기본 환경 파일 설정 - apache2.conf 기본 설정

2020/09/28 - [서버 운영/APM 서버 구축] - 우분투 20.04 APM 서버 기본 환경 파일 설정 - php.ini 기본 설정

 

Ubuntu 20.04에서 설치한 Apache2 서버 주요 설정 파일 원문

2020/09/30 - [서버 운영/APM 서버 구축] - 우분투 20.04 APM 서버 주요 환경 파일 목록

2020/10/05 - [서버 운영/APM 서버 구축] - 우분투 20.04 APM 서버 주요 환경 파일 원문 - Apache2

2020/10/07 - [서버 운영/APM 서버 구축] - 우분투 20.04 APM 서버 주요 환경 파일 원문 - PHP 7.4 - php.ini

Ubuntu 20.04에서 설치한 Apache2 서버 주요 설정 파일 내 지시어 설명

2020/10/09 - [서버 운영/APM 서버 구축] - [Ubuntu 20.04 - Apache2 서버] apache2.conf의 기본값에 사용된 지시어 설명

2020/10/11 - [서버 운영/APM 서버 구축] - [Ubuntu 20.04 - Apache2 서버] ports.conf 의 기본값에 사용된 지시어 설명

2020/10/13 - [서버 운영/APM 서버 구축] - [Ubuntu 20.04 - Apache2 서버] envvars의 기본값에 사용된 지시어 설명

2020/10/15 - [서버 운영/APM 서버 구축] - [Ubuntu 20.04 - Apache2 서버] security.conf의 기본값에 사용된 지시어 설명

2020/10/17 - [서버 운영/APM 서버 구축] - [Ubuntu 20.04 - Apache2 서버] 000-default.conf의 기본값에 사용된 지시어 설명

2020/10/19 - [서버 운영/APM 서버 구축] - [Ubuntu 20.04 - Apache2 서버] default-ssl.conf의 기본값에 사용된 지시어 설명


Ubuntu 20.04에서 phpMyAdmin 설치 및 설정

2021.02.20 - [서버 운영/APM 서버 구축] - 우분투 20.04에서 phpMyAdmin 설치 01 - 저장소 설치

2021.03.15 - [서버 운영/APM 서버 구축] - 우분투 20.04에서 phpMyAdmin 설치 02 - Apache 서버 관리자를 위한수동 설치(버전 5.1.0 기준)

2021.03.17 - [서버 운영/APM 서버 구축] - 우분투 20.04에서 phpMyAdmin 설치 03 - 보안강화 작업

2021.03.19 - [서버 운영/APM 서버 구축] - phpMyAdmin 설치 04 - 웹호스팅 사용자를 위한 수동 설치(버전 5.1.0 기준)

2021.03.21 - [서버 운영/APM 서버 구축] - phpMyAdmin 설치 05 - setup 페이지를 통한 구성 파일 생성

Ubuntu 18.04 LTS에서 APM 설치

2018/11/09 - [서버 운영/APM 서버 구축] - Apache 서버 설치

2018/11/14 - [서버 운영/APM 서버 구축] - MariaDB 설치

2018/11/16 - [서버 운영/APM 서버 구축] - MariaDB 업그레이드 1

2018/11/16 - [서버 운영/APM 서버 구축] - MariaDB 업그레이드 2 - ERROR 1524 (HY000): Plugin 'unix_socket' is not loaded

2018/11/16 - [서버 운영/APM 서버 구축] - MariaDB 업그레이드 3

2018/11/19 - [서버 운영/APM 서버 구축] - PHP7 설치

2018/11/21 - [서버 운영/APM 서버 구축] - 서버 환경 파일 수정 - php.ini, apache2.conf

 

Ubuntu 18.04 LTS에서 MariaDB 백업 및 업그레이드

2019/01/15 - [서버 운영/APM 서버 구축] - MariaDB & MySQL 백업과 복원 - Nextcloud 14

2019/06/27 - [서버 운영/APM 서버 구축] - MariaDB 업그레이드 (Upgrading from MariaDB 10.3 to MariaDB 10.4)

 

Ubuntu 18.04 LTS에서 PHP 버전 전환

2019/07/05 - [서버 운영/APM 서버 구축] - Apache와 Shell에서 PHP 버전 전환하기(How to Switch between Multiple PHP Version)

 

Ubuntu 18.04 LTS에서 phpmyadmin 설치 및 운용

2018/11/23 - [서버 운영/APM 서버 구축] - phpmyadmin 설치 - APT 패키지 관리자를 통한 설치

2019/06/18 - [서버 운영/APM 서버 구축] - APT 패키지 관리자를 통해 설치한 phpMyAdmin 업그레이드 방법(업그레이드 버전 4.9.0.1)

2019/07/01 - [서버 운영/APM 서버 구축] - phpMyAdmin 수동 설치 01 - 일반 설치

2019/07/03 - [서버 운영/APM 서버 구축] - phpMyAdmin 수동 설치 02 - 심볼릭 링크를 이용한 보안 접속

2019/06/16 - [서버 운영/APM 서버 구축] - phpMyAdmin 4.6.6deb5와 PHP 7.2 간 호환성 문제 해결 - Warning in ./libraries/sql.lib.php#613

 

XAMPP 설치 및 운용

2019/04/20 - [서버 운영/서버 구축 꾸러미] - XAMPP에 대하여(버전 7.1.28 / 7.2.17 / 7.3.4)

2019/04/22 - [서버 운영/서버 구축 꾸러미] - XAMPP for Windows 7.3.4 인스톨러 설치

2019/04/25 - [서버 운영/서버 구축 꾸러미] - XAMPP for Windows 설정

2019/06/03 - [서버 운영/서버 구축 꾸러미] - XAMPP 포터블(portable) 사용법

2019/06/05 - [서버 운영/서버 구축 꾸러미] - XAMPP for Linux 4.3.5 설치 및 사용법

 

서버 운영을 위한 관련 연재글

2018/11/07 - [리눅스/Ubuntu] - 방화벽 설정 - ufw

2018/11/12 - [서버 운영/버추얼박스(VirtualBox)] - 가상머신(Virtualbox) 내 서버 외부접속

2019/01/05 - [미디어위키/미디어위키 설치 및 관리] - 호스트 컴퓨터에서 가상머신 내 미디어위키 접속 및 작업을 위한 버추얼박스 포트포워딩 설정

2019/03/15 - [서버 운영/APM 서버 구축] - PHP 7.3으로의 업그레이드 및 사용 연기 권장 안내 - PHP Notice: compact(): Undefined variable:

 

 

SSL 인증서에 대하여

2020/11/10 - [서버 운영/APM 서버 구축] - [Ubuntu 20.04 - Apache2 서버] 가상호스트(VirtualHost) 설정

위 링크의 글에서 간단하게 가상호스트 웹사이트를 구축하여 웹브라우저로 접속해보았는데 이것은 이전 세대의 인터넷 통신 기술인 http(HyperText Transfer Protocol) 통신 규약을 바탕으로 정보를 주고 받는 것입니다.

그러나 날로 해킹 등 각종 보안 위험이 늘어나고 그 피해 역시 막대해지면서 통신의 보안성을 강화한 새로운 통신 규약이 필요해졌습니다. 이를 해결하기 위해 고안된 것이 바로 https(HyperText Transfer Protocol Secure = HTTP over Secure Socket Layer(SSL), HTTP over Transport Layer Security(TLS))입니다. 따라서 현재는 개인정보를 다루는 대부분의 웹사이트는 이 https 통신 규약을 준수하여 구축되고 있습니다.

그런데 https 통신 규약을 사용하기 위해서는 웹서버 측에서 SSL 인증서라는 것을 설치해야 합니다.

 

SSL(Secure Sockets Layer) 인증서는 클라이언트의 웹브라우저와 웹서버 간의 암호화된 통신을 구현하기 위해 고안된 표준 보안 통신 기술입니다.

이 인증서의 역할을 쉽게 풀어 설명한다면 제3자에 의한 정보의 누출 또는 훼손 없이, 클라이언트와 서버 두 당사자 간만의 '사적인' 대화가 가능하도록 해주는 기술입니다.

이 인증서의 기능은 크게 둘로 나눌 수 있습니다.

웹사이트의 신원 정보 공개

클라이언트와 서버 간 오고 가는 데이터 정보의 암호화

https와 SSL 인증서에 대한 보다 자세한 설명은 아래 링크를 참고하시기 바랍니다.

https://opentutorials.org/course/228/4894

 

본래 SSL 인증서를 서버에 설치하기 위해서는 자기 소유의 도메인과 자기가 관리하는 서버가 존재해야 합니다. 그러나 현재 제게는 이 둘 모두 존재하지 않으므로 로컬 서버에서 자가 서명 인증서를 사용해 보안 서버를 구축하는 과정을 알아보도록 하겠습니다.

제 글을 통해 SSL 인증서 사용법을 개략적이나마 아신 다음 추후 여러분들이 보안 서버를 구축할 일이 있을 때 이 글을 통해 얻은 내용을 바탕으로  SSL 인증서 발급에서부터 적용까지의 실제 과정을 다른 유능한 분들의 글을 찾아 읽어 보시면 좀더 쉽게 이해할 수 있으실 것입니다.

 

인증서 생성/발급 과정

자가서명 인증서 발급 과정

서버용 개인키(Privacy Key) 생성

인증 서명 요청서(CSR - Certificate Signing Request) 생성

인증기관(CA - Certificate Authority)에 인증 서명 요청서(CSR) 제출

인증 서명 요청서(CSR)을 이용해 인증서 발급

 


 

 

인증서 생성 전 준비 작업

OpenSSL 패키지 준비

OpenSSL 설치

 

study@study-VirtualBox:~$ sudo apt install openssl
패키지 목록을 읽는 중입니다... 완료
의존성 트리를 만드는 중입니다       
상태 정보를 읽는 중입니다... 완료
제안하는 패키지:
  ca-certificates
다음 새 패키지를 설치할 것입니다:
  openssl
0개 업그레이드, 1개 새로 설치, 0개 제거 및 0개 업그레이드 안 함.
621 k바이트 아카이브를 받아야 합니다.
이 작업 후 1,287 k바이트의 디스크 공간을 더 사용하게 됩니다.
받기:1 http://mirror.kakao.com/ubuntu focal/main amd64 openssl amd64 1.1.1f-1ubuntu2 [621 kB]
내려받기 621 k바이트, 소요시간 0초 (5,129 k바이트/초)
Selecting previously unselected package openssl.
(데이터베이스 읽는중 ...현재 199044개의 파일과 디렉터리가 설치되어 있습니다.)
Preparing to unpack .../openssl_1.1.1f-1ubuntu2_amd64.deb ...
Unpacking openssl (1.1.1f-1ubuntu2) ...
openssl (1.1.1f-1ubuntu2) 설정하는 중입니다 ...
Processing triggers for man-db (2.9.1-1) ...
study@study-VirtualBox:~$ 

유명 리눅스 배포판을 사용하신다면 대부분 OpenSSL 패키지가 자동으로 함께 설치되어 있을 것입니다. 혹여 설치되어 있지 않다면 각 배포판별 기본 저장소를 통해 해당 패키지를 설치해주시면 됩니다.

 

 

OpenSSL 버전 확인

 

study@study-VirtualBox:~$ openssl version
OpenSSL 1.1.1f  31 Mar 2020
study@study-VirtualBox:~$ 

OpenSSL 버전을 확인합니다.

https://www.openssl.org/

OpenSSL 공식사이트에서는 이 글이 공개된 일자 기준으로 OpenSSL 1.1.1h가 공개되었으며 다음 메이저 버전인 OpenSSL 3.0이 개발 중입니다.

그러나 가능하시면 각 배포판별 공식 저장소에서 제공하는 버전의 OpenSSL을 사용하시기 바랍니다.

 


 

인증서 작업 디렉터리 생성

 

study@study-VirtualBox:~$ sudo mkdir -pv /etc/ssl/ssc
[sudo] study의 암호: 
mkdir: '/etc/ssl/ssc' 디렉터리를 생성함
study@study-VirtualBox:~$ cd /etc/ssl/ssc
study@study-VirtualBox:/etc/ssl/ssc$ 

인증서를 관리할 디렉터리를 만들어줍니다.

어떤 곳에 만들든  큰 문제는 없습니다만 가능하면 리눅스 파일 시스템 계층 구조 표준(FHS)의 사양과 원칙을 지켜 적절한 곳에 생성해주시는 것을 권장합니다.

2020/09/09 - [리눅스/공통] - 리눅스 디렉터리 구조, 파일시스템 계층구조 표준(FHS - Filesystem Hierarchy Standard)

일반적으로 관리의 편리를 위해 아래에 나열된 위치들에 생성하곤 합니다.

/etc/apche2/

/etc/ssl/

/etc/apche2/는 Apache2 서버의 환경 설정 디렉터리로 Apache2가 설치될 때 자동으로 생성됩니다.

/etc/ssl/은 OpenSSL 패키지가 설치될 때 자동으로 구성되는 디렉터리입니다.

여기서는 /etc/ssl/ 디렉터리 아래 ssc라는 하위 디렉터리를 생성해 그 안에서 관리하도록 하겠습니다. ssc는 SSC(Self Signed Cerificate)를 의미합니다.

 

서버키와 자체서명 인증서 생성

 

study@study-VirtualBox:/etc/ssl/ssc$ sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout virtualhost01.net.key -out virtualhost01.net.key.crt
[sudo] study의 암호: 
Generating a RSA private key
.......................+++++
........................................................................................+++++
writing new private key to 'virtualhost01.net.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:KR
State or Province Name (full name) [Some-State]:Seoul
Locality Name (eg, city) []:Gangnam-gu
Organization Name (eg, company) [Internet Widgits Pty Ltd]:wnw1005
Organizational Unit Name (eg, section) []:operating department
Common Name (e.g. server FQDN or YOUR name) []:virtualhost01.net
Email Address []:admin@virtualhost01.net
study@study-VirtualBox:/etc/ssl/ssc$ 

본래 자체 서명 인증키는 여러 단계를 거쳐 생성하는 것이 정규적인 흐름입니다.

Root CA 인증서 생성 (CA 서버의 개인키 생성)

CA RSA키 생성

개인키 권한 설정

CSR(Certificate Sinning Request - 인증서 서명 요청) 파일 생성

자가 서명 인증서 생성

서버 SSL 인증서 생성

호스트 서버 RSA 키 생성

개인키 암호 제거

권한 설정

CSR 파일 생성

SSL 인증서 발급

물론 위 과정을 모두 숙지하고 사용자가 원하는대로 응용할 줄 안다면 더할 나위 없이 좋을 것입니다.

https://www.lesstif.com/system-admin/openssl-root-ca-ssl-6979614.html

만약 자세한 과정에 대해 공부하고 싶다면 위 링크를 참고하시기 바랍니다.

그러나 자가서명 인증서만을 필요로 하는 경우 이 모든 과정을 일일이 거치기에는 번잡스러운 것이 사실입니다. 이 과정을 필요한 최소한의 작업만을 수행하여 극히 단순화하도록 합시다.

 

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout virtualhost01.net.key -out virtualhost01.net.key.crt

 

req

req 명령은 주로 PKCS #10 형식으로 인증서 요청을 만들고 처리합니다. 예를 들어 루트 CA로 사용할 자체 서명된 인증서를 추가로 만들 수 있습니다.

-x509

x.509는 암호학에서 공개키 인증서와 인증 알고리즘의 표준 가운데 공개키 기반(PKI)의 ITU-T 표준을 일컫습니다.

OpenSSL에서 이 옵션을 사용한다는 것은 인증서 요청(CSR) 대신 자체 서명된 인증서를 출력합니다. 일반적으로 테스트 인증서 또는 자체 서명된 루트 CA를 생성하는 데 사용됩니다.

-nodes

개인키를 생성 시 암호화하지 않습니다.

-days 365

해당 인증서의 유효 기간을 설정합니다. 이 옵션을 지정하지 않으면 기본값으로 30일이 지정됩니다.

-newkey rsa:2048

새 인증서 요청과 새 개인키를 생성합니다. 뒤이어 오는 인수는 쌍점(:)으로 구별되어 전자는 암호 알고리즘이고, 후자는 비트수입니다.

즉, rsa:2048는 RSA 알고리즘으로 2048비트 수의 RSA 키를 생성합니다.

-keyout virtualhost01.net.key

새로 생성된 개인키를 사용할 파일을 지정합니다.

-out virtualhost01.net.key.crt

기본적으로 기록할 출력 파일 이름 또는 표준 출력을 지정합니다.

여기서는 생성될 SSL 인증서 파일의 이름을 지정합니다.

 

 

study@study-VirtualBox:/etc/ssl/ssc$ ls -l
합계 8
-rw------- 1 root root 1704 10월 17 11:15 virtualhost01.net.key
-rw-r--r-- 1 root root 1513 10월 17 11:17 virtualhost01.net.key.crt
study@study-VirtualBox:/etc/ssl/ssc$ 

여기 서버 SSL 인증서 개인키 파일(.key)과 인증서 파일(.crt) 이 두 개가 생성되었습니다.

확장자가 key인 파일은 SSLCertificateKeyFile

확장자가 crt인 파일은 SSLCertificateFile과 SSLCertificateChainFile

 


SSL 인증서 파일 포맷 변환 예시

study@study-VirtualBox:/etc/ssl/ssc$ sudo openssl rsa -in virtualhost01.net.key -text > virtualhost01.net.key.pem
bash: virtualhost01.net.key.pem: 허가 거부
study@study-VirtualBox:/etc/ssl/ssc$ sudo su
[sudo] study의 암호: 
root@study-VirtualBox:/etc/ssl/ssc# openssl rsa -in virtualhost01.net.key -text > virtualhost01.net.key.pem
writing RSA key
root@study-VirtualBox:/etc/ssl/ssc# openssl x509 -inform PEM -in virtualhost01.net.key.crt > virtualhost01.net.key.crt.pem
root@study-VirtualBox:/etc/ssl/ssc# exit
exit
study@study-VirtualBox:/etc/ssl/ssc$ ls
virtualhost01.net.key      virtualhost01.net.key.crt.pem
virtualhost01.net.key.crt  virtualhost01.net.key.pem
study@study-VirtualBox:/etc/ssl/ssc$ 

 

인증서 디렉터리와 파일 소유권 및 권한 조정을 통한 보안 설정

 

tudy@study-VirtualBox:/etc/ssl/ssc$ sudo chown -R root:root /etc/ssl/ssc
study@study-VirtualBox:/etc/ssl/ssc$ sudo chmod 600 /etc/ssl/ssc/*.*
study@study-VirtualBox:/etc/ssl/ssc$ sudo chmod 700 /etc/ssl/ssc
study@study-VirtualBox:/etc/ssl/ssc$ 

이제 인증서가 존재하는 디렉터리와 그 안에 위치한 개인키 및 인증서 파일의 소유권 및 권한 조정을 해줍니다.

 

 

study@study-VirtualBox:/etc/ssl/ssc$ sudo ls -l 합계 8 -rw------- 1 root root 1704 10월 17 11:15 virtualhost01.net.key -rw------- 1 root root 1513 10월 17 11:17 virtualhost01.net.key.crt study@study-VirtualBox:/etc/ssl/ssc$

파일의 퍼미션 조정이 잘 되었는지 확인해봅니다.

 


 

 

방화벽 설정

이제 웹서버의 방화벽을 설정할 차례입니다.

우분투의 경우 기본 방화벽 설정 패키지가 ufw입니다.

2018/11/07 - [리눅스/Ubuntu] - 방화벽 설정 - ufw

2018/10/27 - [리눅스/리눅스 패키지] - 리눅스 필수 설치 패키지 - gufw

ufw 패키지를 이용한 방화벽 설정 방법은 위 링크를 참고하시기 바랍니다

 

 

study@study-VirtualBox:~$ sudo ufw status
[sudo] study의 암호: 
상태: 활성

목적                         동작          출발
--                         --          --
Apache                     ALLOW       Anywhere                  
Apache (v6)                ALLOW       Anywhere (v6)             

study@study-VirtualBox:~$ 

 

sudo ufw status 명령을 이용해 방화벽 규칙을 확인합니다.

목적 열의 Apache와 Apache (v6)는 서버가 Apache를 사용하는 경우 ufw에서 Apache 서버가 주로 사용하는 포트를 손쉽게 관리하기 위해 따로 지정한 별명입니다.

즉 특정 포트와 프로토콜을 일일이 지정하지 않고 별명을 지정함으로써 동일한 효과를 내도록 고안되어 있습니다.  

 

 

study@study-VirtualBox:~$ sudo ufw status verbose
상태: 활성
로깅: on (low)
기본 설정: deny (내부로 들어옴), allow (외부로 나감), disabled (라우팅 된)
새 프로필: skip

목적                         동작          출발
--                         --          --
80/tcp (Apache)            ALLOW IN    Anywhere                  
80/tcp (Apache (v6))       ALLOW IN    Anywhere (v6)             

study@study-VirtualBox:~$ 

ufw status verbose 명령을 실행하면 포트 번호와 프로토콜을 확인할 수 있습니다.

일반적으로 80번 포트를 열어 웹서버의 통신 창구로 이용합니다. 그러나 SSL 보안 통신을 이용하려면 일반적으로 443번을 개방합니다.

웹서버 일반 통신 포트 번호 80과 SSL 보안 통신 포트 번호 443은 전통적으로 사용되는 포트 번호입니다. 그러나 보안 등의 이유로 통신 포트를 바꾸는 경우가 있습니다. 옐 들어 웹서버 일반 통신 포트를 8000번이나 8080번으로 수정하는 것이 그 예입니다.

 

 

study@study-VirtualBox:~$ sudo ufw delete allow Apache
규칙이 삭제되었습니다
규칙이 삭제되었습니다 (v6)
study@study-VirtualBox:~$

먼저 기존 규칙을 삭제해줍니다. Apache 관련 규칙이 모두 삭제 됩니다.

 

 

 

study@study-VirtualBox:~$ sudo ufw status numbered
상태: 활성

     목적                         동작          출발
     --                         --          --
[ 1] Apache                     ALLOW IN    Anywhere                  
[ 2] Apache (v6)                ALLOW IN    Anywhere (v6)             

study@study-VirtualBox:~$

Apache 규칙은 v4와 v6 두 IP 주소 체계를 동시에 설정합니다. 그러나 둘 중 하나의 주소 체계만 삭제하고자 하는 경우 sudo ufw status numbered 명령을 실행하여 각 규칙에 할당된 번호를 확인한 다음 아래와 같이 특정 번호만 지정하여 삭제할 수 있습니다.

 

 

 

study@study-VirtualBox:~$ sudo ufw delete 1
삭제합니다:
 allow Apache
이 작업과 함께 진행하시겠습니까(y|n)? y
규칙이 삭제되었습니다
study@study-VirtualBox:~$ sudo ufw status
상태: 활성

목적                         동작          출발
--                         --          --
Apache (v6)                ALLOW       Anywhere (v6)             

study@study-VirtualBox:~$ 

위 예시에서는 v4 IP 주소 체계의 규칙만 삭제되었음을 확인할 수 있습니다.

할당된 번호를 통한 ufw 명령 수행은 한 번에 하나만 가능합니다.

즉, 현재 ufw 버전에서는 둘 이상의 규칙을 동시에 처리할 수 없습니다.

 

 

 

study@study-VirtualBox:~$ sudo ufw allow "Apache Full"
규칙이 추가되었습니다
규칙이 추가되었습니다 (v6)
study@study-VirtualBox:~$ sudo ufw status
상태: 활성

목적                         동작          출발
--                         --          --
Apache Full                ALLOW       Anywhere                  
Apache Full (v6)           ALLOW       Anywhere (v6)             

study@study-VirtualBox:~$ sudo ufw status verbose
상태: 활성
로깅: on (low)
기본 설정: deny (내부로 들어옴), allow (외부로 나감), disabled (라우팅 된)
새 프로필: skip

목적                         동작          출발
--                         --          --
80,443/tcp (Apache Full)   ALLOW IN    Anywhere                  
80,443/tcp (Apache Full (v6)) ALLOW IN    Anywhere (v6)             

study@study-VirtualBox:~$ 

별명 Apache Full은 위에서 보듯 일반 통신 포트 80번과 보안 통신 포트 443을 동시에 처리합니다.

 


 

 

 

Apache2 서버 설정

Apache2 SSL 모듈 활성화

 

study@study-VirtualBox:~$ sudo a2enmod ssl
[sudo] study의 암호: 
Considering dependency setenvif for ssl:
Module setenvif already enabled
Considering dependency mime for ssl:
Module mime already enabled
Considering dependency socache_shmcb for ssl:
Enabling module socache_shmcb.
Enabling module ssl.
See /usr/share/doc/apache2/README.Debian.gz on how to configure SSL and create self-signed certificates.
To activate the new configuration, you need to run:
  systemctl restart apache2
study@study-VirtualBox:~$ 

Apache2 서버를 설치한 직후에는 SSL 모듈이 비활성화되어 있습니다.

따아서 위와 같은 방법으로 SSL 모듈을 활성화해주어야 합니다.

a2enmod

a2enmod는 인수로 지정한 모듈을 활성화시키는 명령입니다.

이 명령은 /etc/apache2/mods-available 디렉터리에 존재하는 모듈들 중 지정한 모듈 관련 파일에 대한 심볼릭 링크를  /etc/apache2/mods-enabled 디렉터리에 생성하는 것입니다.

a2dismod

활성화된 모듈을 비활성화하고자 한다면  'a2dismod 모듈명' 명령을 사용하시면 됩니다.

 

 

study@study-VirtualBox:~$ sudo systemctl restart apache2
study@study-VirtualBox:~$ 

활성화시킨 모듈을 바로 적용하기 위해서는 위 명령을 실행하여 Apache 서버를 재시작해주어야 합니다.

 

 

 

study@study-VirtualBox:~$ sudo a2enmod ssl
Considering dependency setenvif for ssl:
Module setenvif already enabled
Considering dependency mime for ssl:
Module mime already enabled
Considering dependency socache_shmcb for ssl:
Module socache_shmcb already enabled
Module ssl already enabled
study@study-VirtualBox:~$ 

만약 이미 활성화되어 있는데 활성화 명령을 사용하면 위와 같이 출력됩니다.

 

가상호스트에 SSL 구문 추가

 

study@study-VirtualBox:~$ cd /etc/apache2/sites-available
study@study-VirtualBox:/etc/apache2/sites-available$ ls
000-default.conf  default-ssl.conf  virtualhost01.net.conf
study@study-VirtualBox:/etc/apache2/sites-available$ 

 

2020/11/10 - [서버 운영/APM 서버 구축] - [Ubuntu 20.04 - Apache2 서버] 가상호스트(VirtualHost) 설정

지난 포스팅에서 보듯 가상호스트 서버 설정 파일을 생성해 활성화했었습니다.

지난 포스팅 때 생성한 가상호스트 서버 설정 파일을 열어 봅시다.

 

<VirtualHost *:80>
    # ServerAdmin webmaster@virtualhost01.net
    ServerName www.virtualhost01.net
    ServerAlias virtualhost01.net
    DocumentRoot /var/www/html/virtualhost01.net
    DirectoryIndex index.html
    ErrorLog $/virtualhost01.net_error.log
    CustomLog $/virtualhost01.net_access.log combined
</VirtualHost>

<Directory /var/www/html/virtualhost01.net>
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

여기에 SSL 관련 구문을 추가해주어야 합니다.

여기서는 필요한 최소한의 내용만 다루도록 하겠습니다.

 

 

study@study-VirtualBox:/etc/apache2/sites-available$ sudo nano virtualhost01.net.conf

가상호스트 서버 설정 파일을 열어 아래왚 같이 편집해줍니다.

 

<IfModule mod_ssl.c>
    <VirtualHost _default_:443>
        ServerName www.virtualhost01.net
        ServerAlias virtualhost01.net
        DocumentRoot /var/www/html/virtualhost01.net
        DirectoryIndex index.html
        ErrorLog $/ssl-virtualhost01.net_error.log
        CustomLog $/ssl-virtualhost01.net_access.log combined

        LogLevel info ssl:warn

        #Include conf-available/serve-cgi-bin.conf

        SSLEngine on

        SSLCertificateFile /etc/ssl/ssc/virtualhost01.net.key.crt
        SSLCertificateKeyFile /etc/ssl/ssc/virtualhost01.net.key

        #SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire
        <FilesMatch "\.(cgi|shtml|phtml|php)$">
                SSLOptions +StdEnvVars
        </FilesMatch>
        <Directory /usr/lib/cgi-bin>
                SSLOptions +StdEnvVars
        </Directory>

        # BrowserMatch "MSIE [2-6]" \
        #        nokeepalive ssl-unclean-shutdown \
        #        downgrade-1.0 force-response-1.0

    </VirtualHost>
</IfModule>

 

2020/10/19 - [서버 운영/APM 서버 구축] - [Ubuntu 20.04 - Apache2 서버] default-ssl.conf의 기본값에 사용된 지시어 설명

 


 

2020/10/09 - [서버 운영/APM 서버 구축] - [Ubuntu 20.04 - Apache2 서버] apache2.conf의 기본값에 사용된 지시어 설명

2020/10/11 - [서버 운영/APM 서버 구축] - [Ubuntu 20.04 - Apache2 서버] ports.conf 의 기본값에 사용된 지시어 설명

2020/10/13 - [서버 운영/APM 서버 구축] - [Ubuntu 20.04 - Apache2 서버] envvars의 기본값에 사용된 지시어 설명

2020/10/15 - [서버 운영/APM 서버 구축] - [Ubuntu 20.04 - Apache2 서버] security.conf의 기본값에 사용된 지시어 설명

2020/10/17 - [서버 운영/APM 서버 구축] - [Ubuntu 20.04 - Apache2 서버] 000-default.conf의 기본값에 사용된 지시어 설명

2020/10/19 - [서버 운영/APM 서버 구축] - [Ubuntu 20.04 - Apache2 서버] default-ssl.conf의 기본값에 사용된 지시어 설명

보다 자세한 SSL 관련 Apache2 서버 지시어 구문은 위 링크의 글을 참고하시면 됩니다.

 

구문 검사

 

study@study-VirtualBox:/etc/apache2/sites-available$ sudo apache2ctl configtest
Syntax OK
study@study-VirtualBox:/etc/apache2/sites-available$ 

편집 완료 후 저장한 다음 구문에 오류가 없는지 검사해줍니다.

 

설정 재로드

 

 

study@study-VirtualBox:/etc/apache2/sites-available$ sudo systemctl reload apache2
study@study-VirtualBox:/etc/apache2/sites-available$ 

구문에 오류가 없다면 아파치 서버 설정을 재로드해줍니다.

 


 

여기서는 우분투의 기본 웹브라우저 프로그램인 파이어폭스(Firefox)을 통해 사이트에 접속하는 모습을 예시로 듭니다.

구글 크롬 등 타 웹브라우저도 표현 및 진행 양상이 대동소이합니다.

2018/10/30 - [리눅스/리눅스 패키지] - 리눅스 필수 설치 패키지 - 구글 크롬 웹브라우저 - 터미널로 패키지 설치

2018/10/30 - [리눅스/리눅스 패키지] - 리눅스 필수 설치 패키지 - 구글 크롬 웹브라우저 - GUI 설치

2018/10/30 - [리눅스/리눅스 패키지] - 리눅스 필수 설치 패키지 - 구글 크롬 웹브라우저 - gdebi로 .deb 패키지 설치

2018/10/31 - [기타] - 구글 크롬 기본 설정

구글 크롬 브라우저 설치 방법은 위 링크를 참고하시기 바랍니다.

 

https://virtualhost01.net

위와 같이 브라우저 주소창에 가상호스트의 웹사이트 주소를 http 프로토콜이 아닌 https 프로토콜로 접속해줍니다.

 

가상호스트 웹사이트 주소 앞에 https://를 붙여 접속하면 위와 같이 웹브라우저에서 보안 위험 가능성에 대해서 경고하는 안내 페이지가 뜹니다.

더 알아보기를 누르면 아래 그림과 같이 보안 위험 가능성에 대한 보다 자세한 안내가 출력됩니다.

 

 

virtualhost01.net는 유효하지 않은 보안 인증서를 사용합니다.

자기 스스로 서명하였으므로 인증서를 신뢰할 수 없습니다.

오류 코드:  MOZILLA_PKIX_ERROR_SELF_SIGNED_CERT

 

인증서 보기

 

[뒤로 가기(권장)]  [위험을 감수하고 계속 진행]

위와 같은 안내문이 뜹니다. 안내대로 자가서명한 인증서이기 때문에 신뢰하지 못하여 위와 같은 경고를 띄우는 것입니다. 우리가 스스로 생성한 자가서명 인증서이므로 문제는 없습니다.

위 경고는 서명 주체가 제3자가 아닌 도메인 소유자 자기 자신인 문제가 되어 뜬 것이지 보안 인증서 자체에는 기술적 문제가 있어 경고가 뜬 것은 아닙니다.

인증서 보기 링크를 누르면 아래 그림과 같이 인증서의 상세한 내용을 확인할 수 있습니다.

 

 

[위험을 감수하고 계속 진행] 버튼을 누르면 해당 사이트는 보안 예외로 추가되어 이후 접속에서는 위와 같은 경고가 더 이상 뜨지 않고 바로 접속이 가능해집니다.

 

위 그림과 같이 서버에 SSL 인증서가 적용되어 https:// 프로토콜로 웹사이트에 정상적으로 접속되는 것을 확인할 수 있습니다.

 

웹브라우저 주소창의 왼쪽에 자물쇠 모양의 아이콘을 클릭하면 위 그림과 같이 해당 사이트 정보창이 뜹니다. 거기에 안전하지 않은 연결이라는 문구가 보입니다. 이는 자가서명 인증서가 적용된 탓입니다.

[ > ] 버튼을 누르면 아래 그림과 같이 해당 사이트에 대한 연결 보안 정보 창이 표시됩니다.

 

연결 보안 창에서 하단의 자세한 정보 메뉴를 눌러줍니다.

 

그러면 위 그림과 같이 페이지 정보창이 뜹니다. 보안 탭을 눌러봅시다.

 

해당 사이트에 대한 보안 관련 요약 정보가 표시됩니다.

 

이것으로 자체서명 SSL 인증서를 이용한 https:// 프로토콜 연결 구축이 완료되었습니다.

다음에는 웹사이트를 http 프로토콜로 접속하더라도 자동으로 https 프로토콜로 리디렉션되도록 하는 방법에 대해 알아보도록 하겠습니다.

2020/11/14 - [서버 운영/APM 서버 구축] - http:// 연결을 https:// 연결로 자동 리디렉션