[CentOS] SSL/TLS 인증서를 적용한 Web Site 구축하기 기초 [OpenSSL / CSR / Self-Signed Certificate]
Nowhere 와 Now here 의 차이

IT/ㄴ Linux

[CentOS] SSL/TLS 인증서를 적용한 Web Site 구축하기 기초 [OpenSSL / CSR / Self-Signed Certificate]

TIENE 2023. 8. 11. 07:16
반응형

- [Linux] HTTPS 웹사이트 우회하여 접속하기 [bettercap / hstshijack] 에서 HTTPS 관련 공격을 테스트했었다.

- 이제는 직접 SSL/TLS 인증서를 발급하고 Web Server에 적용하는 테스트를 진행한다.


- 인증서 종류

공인 인증서 : 정부 기관에서 승인한 업체에서 발급된 인증서

사설 인증서 : 사설 인증기관에서 발급된 인증서

자체 서명된 인증서 : 운영체제 내에서 발급된 인증서


Please note that while self-signed certificates can provide encryption, they are not validated by a trusted Certificate Authority (CA). For production use, it's recommended to obtain a certificate from a trusted CA to ensure that your users' browsers trust your website's security. Self-signed certificates are more suitable for internal or testing purposes.

자체 서명된 인증서는 암호화 인증을 제공하지만,  신뢰할 수 있는 CA로부터 인증받지 않았다. 실제 사용 환경에서는 사용자의 브라우저가 웹 사이트의 보안성을 확신할 수 있도록 신뢰할 수 있는 CA로부터 인증서를 얻는 것을 권고한다. 자체 서명된 인증서는 내부용 혹은 테스트 목적으로 더 적합하다. # 참고 : ChatGPT

 

[SSL/TLS 인증서를 적용한 Web Site 구축하기 기초]


1. 인증서 생성 패키지 설치

yum -y install mod_ssl

- OpenSSL 패키지를 설치한다.

 

`mod_ssl` is an Apache HTTP Server module that provides SSL/TLS encryption and secure communications capabilities. It allows you to enable secure connections over HTTPS, ensuring that data transmitted between clients (such as web browsers) and your web server is encrypted and secure. This module is a crucial component for implementing SSL/TLS security on your Apache web server.

mod_ssl은 SSL/TLS 암호화와 안전한 통신을 제공하는 Apache HTTP Server 모듈이다.
HTTPS 상의 안전한 연결을 제공하는데, 클라이언트(웹 브라우저)와 웹 서버 사이에 주고 받는 데이터가 암호화되기 때문이다. 이 모듈은 Apache 웹 서버에서 SSL/TLS 보안을 구축할 때 중요한 구성 요소다. # 참고 : ChatGPT

 

 

2. 자체 서명된 인증서(Self-Signed Certificate) 생성

- OpenSSL을 이용해 Self-Signed Certificate를 생성한다.

- 운영체제 내에서 생성되거나, 말 그대로 스스로 인증한 인증서다.

- 위에서 언급한 내용으로 서비스를 하기 위해서는 Verisign과 같은 신뢰할 수 있는 CA 업체에서 인증서를 구매해야한다.

- 개인이 운영하는 Web Site 혹은 Test 목적이라면, Self-Signed Certificate 으로 충분하다.

 

 

- 개인키 (Private Key) 생성

openssl genrsa -out ca.key 2048

openssl OpenSSL 실행 Command
genrsa RSA 개인키를 생성하기 위한 OpenSSL command
-out ca.key 생성될 개인키가 저장된 이름 정의
2048 RSA 키의 bit 길이 지정
키의 길이는 키의 보안에 영향을 끼친다. 길이가 길면 길수록 강력한 보안을 제공하지만, 키의 길이에 따른 처리과정에 소요되는 성능과 시간이 요구된다.

 

- 생성된 개인키를 확인할 수 있다.

 

 

- 인증서 요청 파일 (Certificate Singing Request) 생성

- CSR은 웹서버의 자격증명을 하기 위해 제출하는 파일이다.

- 개인키로 암호화 (48bit ~ 2048bit) 한 후 인증서 신청기관에 요청하는 ASCII파일이다.

- 인증서발급기관은 CSR의 내용을 검토하고 실제 웹서버가 존재하는지 판단하여 CERT 인증서를 발급한다.

-

 

openssl req -new -key ca.key -out ca.csr

openssl OpenSSL 실행 Command
req CSR 관련 Command
-new 새로운 CSR 생성하는 Command
-key ca.key CSR 생성하기 위해 사용될 개인키 정의
인증서에 포함될 공개키와 연관되어 있어야한다.
-out ca.csr 생성될 CSR 파일의 이름 정의

 

- 생성된 인증서 요청 파일을 확인할 수 있다.

 

 

- 자체 서명된 인증서 (Self Signed Certificate) 생성 

openssl x509 -req -days 365 -in ca.csr -signkey ca.key -out ca.crt

openssl OpenSSL 실행 Command
x509 X.509 인증서와 함께 사용되기 위한 Command
-req CSR 함께 동작할 것이라는 옵션
-days 365 인증서가 유효한 기간 정의. 365일동안 유효하다는 의미다.
-in ca.csr  이전에 생성된 CSR 포함된 입력 파일 지정
-signkey ca.key 인증서에 사인하기 위해 사용될 개인키를 지정
키는 CSR 생성하기 위해 사용된 개인키다.
-out ca.crt  생성된 자체 서명된 X.509 인증서가 저장될 파일의 이름 지정

 

- 생성된 자체 서명된 인증서를 확인할 수 있다.

 

 

- 다음 위치에 아래의 Files을 복사한다.

cp ca.crt /etc/pki/tls/certs
cp ca.key /etc/pki/tls/private/ca.key
cp ca.csr /etc/pki/tls/private/ca.csr

 

 

restorecon -RvF /etc/pkiC        CON        

- /etc/pki/* 하위의 모든 폴더나 파일에서 삭제된 구문을 복원한다.

- 문제 발생 시 사용하면 된다.

 

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

- Apache의 SSL 설정을 변경하기 위해 편집기로 열어 아래와 같이 수정한다.

LoadModule ssl_module modules/mod_ssl.so SSL/TLS 사용하기 위해 SSL module 불러오는 설정
Listen 443 Server Port 443으로 HTTPS 통신을 대기 (Listen)
<VirtualHost *:443> HTTPS 요청을 위한 Virtual Host Configuration
ServerName www.example.com` Virtual Host 위한 Server Name 지정
DocumentRoot /var/www/html Virtual Host 위한 Root Directory 지정
SSLEngine on Virtual Host 위한 SSL Enable
SSLCertificateFile` and `SSLCertificateKeyFile 각각 SSL 인증서와 개인키 파일로의 경로를 정의하는 지시자.
SSL/TLS 트래픽의 암호화와 복호화를 위해 사용되는 파일

 

 

3. SSL VirtualHost 추가

- SSL 443 포트를 사용하기 때문에 이를 위한 Virtualhost를 추가한다.

 

vi /etc/httpd/conf/httpd.conf
# SSL Virtual host add
NameVirtualHost *:443

# SSL Virtual host add
<VirtualHost *:443>
    SSLEngine on
    SSLCertificateFile /etc/pki/tls/certs/ca.crt
    SSLCertificateKeyFile /etc/pki/tls/private/ca.key
    ServerAdmin a_gyuuuu@tistory.com
    DocumentRoot /var/www/html
    ServerName www.tiene.vm
    ErrorLog logs/ssl_agyuuuu_com_error_log
    CustomLog logs/ssl_agyuuuu_com_error_log common
</VirtualHost>

- systemctl start httpd로 Web Server를 시작한다.

 

 

4. Web Site 접속하기

- www.tiene.vm으로  입력한 후 결과를 확인했다.

- 정상적으로 출력이 되었다. 하지만, 위에서 힘들게 적용한 SSL 설정이 무색한 결과다.

- HTTP가 아닌 HTTPS를 사용하여 접속해보자

 

 

 

- Win2003은 지원하지 않는 관계로 Linux 에서 접속해보았다.

- HTTPS Protocol을 입력하여 접속하니, 아래와 같은 경고창이 입력되었다.

 

- [고급] - [인증서 보기] 를 눌러서 인증서의 내용을 확인해보았다.

- 위에서 입력했던 항목들이 출력되었다.

- [위험을 감수하고 계속] 을 눌러서 Web Page로 이동한다.

 

- 접속이 완료되었다. 안전하지 않은 연결 은 HTTPS SSL이 적용된 Web Site이지만, 위에서 설정한 것처럼 자체 서명된 인증서가 적용되었다는 의미다.

- 신뢰할 수 있는 CA 기관에서 발급 받지 않은 인증서라는 것이다.

- 지금까지는 HTTPS를 직접 입력하여 접속했다.

- 사실 사용자들은 HTTP 던지, HTTPS 던지 접속만 되면 그만이다. 

- 하지만, HTTP로 접속할 경우 중간자 공격에 취약하기 때문에 강제로 HTTPS로 접속할 수 있도록 설정해야한다.

 

 

5. HTTPS 강제 리디렉션

vi /etc/httpd/conf/httpd.conf

- 아래의 명령어를 추가한다.

#VirualHost
<VirtualHost *:80>
    ServerName www.tiene.vm

    Redirect permanent / https://www.tiene.vm/
</VirtualHost>
Redirect 리다이렉션을 실행하기 위한 지시자
permanent 리다이렉션의 종류로서, 영구적인 리다이렉션 옵션
브라우저와 검색 엔진에게 해당 리다이렉션이 영구적이라고 알려주며, 그에 따라서, 기록을 업데이트해야한다.
/ 리다이렉트 하려는 출발지 URL 경로. HTTP Site Root 경로(홈페이지).
https://www1.tiene.vm 사용자를 리다이렉트하려는 목적 URL이다. HTTPS 버전의 Website이다.

 

systemctl restart httpd

- Main Configuration File을 수정하였으니, 재시작하여 다시 접속해본다.

- 이전에 나왔던 경고창이 나오지 않고 바로 출력되었다.

 

 

* 오타를 내어서 Error가 발생했었다.

Redirect permanent / https://www.tiene.vm/ 에서 https를 빼고 입력했었고, 아래와 같이 거부가 되었다.


 

반응형