본문 바로가기

리눅스(Linux)/네트워크, 보안

[리눅스] 웹서버에 자체서명된 인증서 발급하기(+ Redirection을 통해 https 자동 전환 설정)

반응형

# 자체서명된 인증서란?

더보기

# 자체서명된 인증서

자체 서명된 TLS/SSL 인증서는 공개적으로 신뢰할 수 있는 인증 기관(CA)이 아니라 웹사이트를 담당하는 개발자 또는 회사에서 서명한 것입니다. 공개적으로 신뢰할 수 있는 CA에서 서명한 것이 아니기 때문에 일반적으로 공개 애플리케이션 및 웹사이트에 대해 안전하지 않은 것으로 간주됩니다.

‘자체 서명된 인증서’라는 표현은 일반적으로 루트 또는 중간 인증서에 연결되지 않고 독립형으로 생성된 TLS/SSL 인증서를 나타냅니다. 이는 다른 X.509 디지털 서명 인증서, 예를 들면 S/MIME코드 서명 및 문서 서명에도 적용될 수 있습니다.

자체 서명된 TLS/SSL 인증서는 사이트의 인증서가 신뢰할 수 있는 CA에서 발급되지 않았으므로 연결의 보안이 보장되지 않는다는 경고를 표시합니다. 자체 서명된 인증서는 일반적으로 테스트 환경이나 위험이 낮은 내부 네트워크에서만 사용됩니다. 혹은 테스트 환경에서 안전하며 공개 CA에서 인증서가 발급되기를 기다리는 동안 사용할 수 있습니다. 

자체 서명된 TLS/SSL 인증서는 자체 비공개 키로 서명되며 중간 또는 루트 CA에 연결되지 않습니다. 자체 서명된 인증서는 서명이 필요한 웹사이트의 유지 관리를 담당하는 회사 또는 개발자가 생성, 발급 및 서명합니다. 자체 서명된 TLS/SSL 인증서는 무료로 생성할 수 있어서 내부적인 웹사이트의 인증서 비용을 줄이는 방법은 될 수 있지만 공용 웹사이트 및 애플리케이션에는 결코 좋은 선택이 아닙니다.

 

* 공개 CA의 역할은 인증서에 포함된 정보의 유효성, 특히 TLS/SSL의 경우 인증서와 연결된 도메인 이름의 소유권 및/또는 제어 권한을 보장하는 것입니다. 따라서 자체 서명된 인증서를 사용하면 유효한 기관에서 발급하지 않은 자격증명을 사용하는 것이나 마찬가지입니다.

 

# X.509 디지털 서명 인증서

암호학에서 공개키 인증서와 인증 알고리즘의 표준. (인증서를 만드는 표준)

공개 키 인증서를 인코딩하고 교환하기 위한 표준 형식.

 

X.509 인증서는 TLS(Transport Layer Security), SSL(Secure Sockets Layer), PKI(Public Key Infrastructure) 및 디지털 서명 등 다양한 보안 프로토콜에서 널리 사용됩니다. 이들은 디지털 통신의 진실성과 무결성을 보장하고 인터넷을 통한 안전한 데이터 전송을 가능하게 하는 데 중요한 역할을 합니다. 인증 기관(CA)을 포함한 공개 키 인프라(PKI) 시스템은 X.509 디지털 인증서를 발급, 관리 및 해지할 책임이 있습니다.

 

X.509 인증서는 사용자, 컴퓨터, 서비스 또는 디바이스를 나타내는 디지털 문서입니다. CA(인증 기관), 하위 CA 또는 등록 기관에서 X.509 인증서를 발급합니다. 인증서에는 인증서 주체의 공개 키가 포함됩니다. 안전하게 저장해야 하는 주체의 프라이빗 키는 여기에 포함되지 않습니다.  RFC 5280 은 해당 필드 및 확장을 포함하여 공개 키 인증서를 문서화합니다. 공개 키 인증서는 디지털 서명되며 일반적으로 다음 정보를 포함합니다.

  • 인증서 주체에 대한 정보
  • 주체의 프라이빗 키에 해당하는 공개 키
  • 발급 CA에 대한 정보
  • 지원되는 암호화 및/또는 디지털 서명 알고리즘
  • 인증서의 해지 및 유효성 검사 상태를 확인하기 위한 정보

 

# 인증서 발급의 필요성

기업이 인터넷을 통해 액세스할 수 있는 애플리케이션, 기계 및 장치 간의 연결을 보호하는 데는 TLS/SSL 프로토콜이 사용됩니다(단, SSL의 이름 자체는 아직 널리 사용되고 있지만 지원이 중단된 것으로 간주됩니다). 이러한 프로토콜은 신뢰할 수 있는 공개 인증 기관(CA)에서 서명한 TLS/SSL 인증서를 사용합니다. TLS/SSL 인증서 및 TLS/SSL 프로토콜은 데이터를 암호화하고 통신 당사자를 인증하여 공개 웹사이트에 대한 변조 및 악의적인 공격으로부터 데이터를 보호합니다.

 

# 실습

## 인증서 발급

1. yum -y install httpd mod_ssl    # mod_ssl : 자체인증서 만드는 프로그램
2. mkdir -p /etc/ssl/private    # /ssl/private > 디렉토리 이름은 아무거나 만들어도 됨.
3. cd /etc/ssl/private
4. openssl req -x509 -nodes -newkey rsa:2048 -keyout tecmint.local.key -out tecmint.local.crt
#x509 규칙으로 새로운 키를 만들어서 rsa:2048(공개키 48비트를 써라) req(요청한다)
# -out 내보내라. tecmint.local.crt(인증서를) tecmint.local.key(개인키)
ls
tecmint.local.crt  tecmint.local.key

# cat tecmint.local.crt
# cat tecmint.local.key

개인키와 인증서

## 웹서버에 적용

5. echo ssl site > /var/www/html/index.html   # 웹서버 화면에 띄울 내용

6. vim /etc/httpd/conf.d/ssl.conf    #보안전용(443)
맨 밑줄 붙여넣기
####################################
<VirtualHost *:443> 
ServerAdmin admin@naver.com
ServerName www.tecmint.local 
ServerAlias tecmint.local 
DocumentRoot /var/www/html     # index.html 위치(웹서버 화면에 띄울 내용)
SSLEngine on 
SSLCertificateFile /etc/ssl/private/tecmint.local.crt 	  # 인증서 위치
SSLCertificateKeyFile /etc/ssl/private/tecmint.local.key  # 개인키 위치
</VirtualHost>
####################################저장

7. systemctl start httpd
systemctl restart httpd

8. httpd -t 문법검사

인증서 없다 뜸.?
https 붙여서 해보기 > advanced 클릭
자체서명 인증서 발급

 

## Redirection 리다이렉션 (https를 쓰지 않아도 자동으로 https 전환 설정)

- www.naver.com  => http://192.168.1.20/

- HTTP:80 => https:// 443 자동으로 전환

9. HTTP 리디렉션 이용해서 http > https 전환 되도록 설정
vim /etc/htttpd/conf/httpd.conf       # 80
마지막 라인에 붙여넣기
####################################
#VirualHost 
<VirtualHost *:80>
    ServerName www.tecmint.local
    ServerAlias tecmint.local
    Redirect permanent / https://www.tecmint.local/   # http로 들어오면 https로 자동변환(도메인)
</VirtualHost>
####################################저장 

# 번외 
# Redirect permanent / https://192.168.1.10/    # http로 들어오면 https로 자동변환(ip)

httpd -t 문법 검사  # 오류 없을 시 정상작동

10.  systemctl restart httpd
www.tecmint.local > https 리디렉션

httpd.conf
https를 쓰지 않아도 자동으로  https 붙음

 


 

오늘은 자체서명된 인증서를 활용한 웹구성에 대해 알아보았습니다. 보안상으로는 자체서명된 인증서보다 공인인증서가 훨씬 안전하겠지만, 공인인증서나 사설인증서 외에 이런식으로 자체서명된 인증서를 발급할 수도 있습니다. 더불어 리디렉션 기능을 넣어 https를 굳이 입력하지 않아도 자동으로 연결시켜주는 것까지 진행해보았습니다. 그럼 다음 시간에 뵙겠습니다. 

반응형