[SK shieldus Rookies 16기][클라우드기반 시스템 운영 및 구축] 암호화, SSL/TLS, HTTPS 구성 실습

Jina·2024년 1월 8일
0

SK shieldus Rookies 16기

목록 보기
52/59
post-thumbnail
post-custom-banner

1. 대칭키 암호화 VS 비대칭 암호화

1.1. 대칭키 암호화

  • 동일한 키로 암호화와 복호화
  • 알고리즘 종류 : DES, 3DES, AES, Twofish

1.2. 비대칭 암호화

  • 서로 다른 키로 암호화와 복호화
    • Public Key(공개키) = 공개키
    • Private Key(개인키) = 발행 주체만 갖는 키
  • 알고리즘 종류 : RSA, ECC
  • 고려해야할 부분 : 키를 생성해서 반드시 배포해줘야 한다. 일반적으로 네이버에서는 공개키를 인증서로 전달한다.

💡 크롬에서 인증서 확인하는 방법

1.3. 암호화의 역할

  1. 기밀성 (Confidentiality) : 인가받은 사람만 접근할 수 있는지
  2. 신뢰성 (Authenticity) : 정보의 출처 또는 사용자 자격 증명을 신뢰할 수 있는지
  3. 무결성 (Integrity) : 정보가 조작되지 않았음을 보장하는지
    ⇒ Key를 이용한 암호화 기술로서 해결

1.4. 대칭키 암호화 실습

       (1) 공유된 대칭키를 사용하여 데이터 암호화 
A ---- (2) B의 대칭키를 사용하여 암호화된 정보 전송 ----> B
       (3) B는 자신의 대칭키로 암호화된 정보를 복호화       
$ echo 'This is th plain text' > P1.txt
$ ls P1.txt
$ cat P1.txt

암호화

# openssl enc -e -암호화 알고리즘 -salt값 사용여부 -in 암호화할 파일명 -out P2.bin
$ openssl enc -e -des- salt -in P1.txt -out P2.bin

복호화

# $ openssl enc 
$ openssl enc -d -des3 -in P2.bin -out P3.txt

1.5. 비대칭 암호화 실습

A <----------- (1) B의 공개키를 얻는다 ------------ B
A ----(2) B의 공개키를 사용하여 암호화된 정보 전송 ----> B
	  (3) B는 자신의 개인키로 암호화된 정보를 복호화
  • 공개키로 암호화 / 개인키로 복호화 ⇒ 기밀성
  • 개인키로 암호화 / 공개키로 복호화 ⇒ 신뢰성(송신자 인증)
    • 개인키로 암호화하는 것을 전자서명 라고 한다.

Private Key 생성

# RSA로 개인키 생성, 키의 길이는 2048bit (1024는 안전 X 주로 2048) 
$ openssl genrsa -out private.pem 2048

개인키를 만들면 이 키를 수신자에게 메일이나 USB로 전달하면 된다.
비대칭키 암호화 방식에서는 개인키를 가진 인가자만이 데이터를 열람할 수 있다. == 기밀성 보장

Public Key 생성

개인키-공개키는 하나의 세트이다.
private 개인키에 대한 공개키이다.

$ openssl rsa -in private.pem -out public.pem -outfrom PEM -pubout

평문을 공개키로 암호화

$ openssl rsautl -encrypt -inkey pulic.pem -pubin -in P1.txt -out P4.ssl

파일이 암호화 됐는지 확인

$ cat P5.txt

개인키로 복호화

$ openssl rsautl -decrypt -inkey private.pem -in P4.ssl -out P5.txt

파일이 복호화 됐는지 확인

$ ls -l
$ cat P5.txt

3. 암호화 알고리즘 VS 해시 알고리즘

  • 암호화 알고리즘 (양방향성) : DES, 3DES, RSA
  • 해시 알고리즘 (단방향성) : HD, SHA

3.1. 해시

하나의 문자열을 이를 상징하는 더 짧은 길이의 값이나 키로 변환하는 것

💡 오픈소스 파일들은 해시값을 공개하게 되어있다. 원본과 다운로드 받은 파일이 동일한지 비교해서 파일이 변조됐는지 확인 후 설치하도록 하기 위해서

3.2. 해시 알고리즘 순서

(1) A는 전달할 원본 데이터의 해시값 + 개인키 암호 ⇒ 전자서명
(2) A --------- B에게 데이터 전송 ---------> B
(3) B는 A의 공용키로 전자서명을 복호화 ⇒ 원본의 Digest와 복호화한 Digest를 비교하여 원본 확인

💡 개인 대 개인인 경우 해시 알고리즘을 사용하게 되면 송신자와 수신자가 어떤 해시 알고리즘을 사용하고, 어떻게 전송할지 협의해야한다. 기업의 경우 네이버 같이 큰 사이트는 인증서로 공개키, 해시 알고리즘(전자서명)을 포함시킨다.

💡 원본파일을 해시로 만들면 용량이 줄어든다. 왜? 일정한 패턴의 문자열로 바뀌기 때문에

4. SSL/TLS

  • 실제 인증서 루트 발급 기관 : CA
  • 공인인증서 발급 대리기관 : 은행, 증권사

4.1. 자체 발급 인증서

  • 발급 대상과 발급자가 동일한 경우 자체 발급 인증서라고 한다.
  • 자체 인증은 최상위 인증서 발급 기관(CA)만 가능하다.
  • 자체 발급 인증서는 유효성 검사 X

⇒ 자체 발급 인증서를 사용하려면 신뢰할 수 있는 루트 인증 기관에 인증서를 Import 해야한다.

4.2. 인증서 오류


오류가 발생하는 이유는 다음과 같다.

  1. 인증서의 유효기간이 지난 경우
  2. 인증서의 유효성 검사에 실패한 경우
  3. 인증서의 유효성 검사를 할 수 없는 경우
  4. 인증서 자체에 문제가 있는 경우

CA전자서명(개인키)는
Web서버의 공개키는
1. 인증기관(CA)에서 웹 브라우저에게 인증서(CA공개키)를 배포한다.
2. 사용자가 웹 브라우저를 설치하면 인증서(CA공개키)도 함께 설치된다.
3. 웹 서버에서 키(개인키, 공개키)를 생성한다.
4. 웹 서버가 인증기관에게 인증요청서(공개키)를 제출한다.
5. 인증기관에서 웹 서버가 제출한 인증요청을 심사한다.
6. 인증기관이 웹 서버가 도메인 이름으로 인증서(전자서명)를 발급해준다.
7. 웹 서버가 클라이언트에게 Web 서버 공개키와 CA 전자서명을 제출한다.
8. 클라이언트가 갖고 있는 CA 인증서로 Web서버가 제공한 공개키와 CA 전자서명의 신뢰를 확인한다.
9. 암호화된 데이터를 전송한다.
⇒ 이런 일련의 프로세스 절차 자체, 복합 보안 시스템 환경을 PKI 라고 한다.

SSL에서
대칭키 : 데이터 암호화
비대칭키 : 공개키(대칭키를 암호화 시키기 위함)
⇒ 대칭키를 안전하게 사용하기 위해 비대칭키를 사용한다.

HTTPS : 웹 클라이언트와 웹 서버 가이에 웹 문서를 암호화

5. HTTPS 구성 실습

  • 시나리오
    1. 웹 서버(HTTP) 설치
    2. 환경설정
    3. 방화벽 활성화
    4. 서비스 활성화
  • 인증서 생성
    1. 키 생성
    2. 인증요청서 (*.csr)
    3. 인증서 (*.crt)

5.1. HTTP Server 구성

1. httpd 설치 확인

# httpd 설치확인
$ rpm -qa | grep httpd

# httpd 버전확인
$ httpd -v

# 오픈소스 SSL 설치 확인
$ rpm -qa | grep openssl

2. 인증서 작업을 위한 설정 준비

# httpd에 모듈있는지 확인
$ ls /etc/httpd/modules/mod_ssl.so

# 모듈 없으면 설치
$ yum -y install mod_ssl

3. 환경 설정 확인 후 index.html(홈페이지 작성)

/etc/httpd/conf/httpd.conf ⇒ http 환경 설정 파일
/var/www/html/index.html ⇒ 홈페이지 파일

$ cd /etc/httpd/conf
$ ls httpd.conf
$ nano httpd.conf

$ cd /var/www/html
$ nano index.html
<html>
  <head>
  	<title>Hello World</title>
  <head>
  <body>
  	<h1>Hello World!</h1>
  </body>
</html>

4. 방화벽 설정하기

# 80번 포트 개방 후 활성화 
$ iptables –I INPUT –m state --state NEW,ESTABLISHED –p tcp --dport 80 -j ACCEPT

# iptables 설정 저장
$ service iptables save

# iptables 서비스 시작
$ service iptables start

5. 웹 서비스 활성화

# httpd 서비스 시작
$ service httpd start 

6. 클라이언트 확인

192.168.10.30 또는 www.open.net 으로 접속

7. Win10에서 hosts 파일 수정

$ cd C:\\Windows\System32\drivers\etc
$ notepad hosts

8. Win10에서 접속 확인

5.2. HTTPS Server 구성

1. 개인키 생성

$ cd /etc/pki/tls/certs
$ openssl genrsa -out www.open.net.key 2048

2. 인증요청서(.csr) 생성

$ openssl req -new -key www.open.net.key -out www.open.net.csr

여기서 잘못되면 처음부터 다시 해야한다.

3. 개인키와 인증요청서(.csr)를 이용해 인증서(.crt) 생성

$ openssl x509 -in www.open.net.csr -out www.open.net.crt -req -signkey www.open.net.key -days 365 

인증서 확인

/etc/pki/tls/certs/www.open.net.crt
/etc/pki/tls/certs/www.open.net.csr
/etc/pki/tls/certs/www.open.net.key

4. httpd-ssl.conf 파일에 인증서(.crt)와 인증키 맵핑

ssl.conf 파일 존재하는지 확인

$ nano ssl.conf

Server Certificate에 /etc/pki/tls/certs/www.open.net.crt
Server Private Key에 /etc/pki/tls/certs/www.open.net.key

5. 방화벽 설정

$ iptables -I INPUT -m state --state NEW,ESTABLISHED -p tcp --dport 443 -j ACCEPT

$ service iptables restart
$ service httpd restart

6. Win10에서 확인

자체 발급 인증서기 때문에 유효성 검사를 할 수 없어서 인증서 오류 화면이 나타났다.

엣지 브라우저에서 자체적으로 발급받은 인증서를 확인할 수 있다.

7. 인증서 설치

인증서 내보내기

인증서 설치

설치된 인증서 확인

인터넷 익스플로러로 확인하면 인증서 오류 없이 페이지가 뜨는 것을 확인할 수 있다.

profile
공부 기록
post-custom-banner

0개의 댓글