SSL/TLS, 보안서버 구축하기, https 보안 서버 구현하기, 암호학/암호화 (교육 48일차)

SW·2023년 1월 30일




























############
📌 SSL/TLS 📌
############

SSL은 기존의 TCP/IP에서 응용 계층과 TCP 계층 사이에 보안 계층으로 동작한다.

SSL/TLS가 없는 TCP/IP
L7       [HTTP][SMTP][FTP] 
L4       [   TCP  ]
L3       [   IP   ]
L2       [Ethernet]

SSL/TLS가 있는 TCP/IP
L7       [HTTP][SMTP][FTP] 
SSL/TLS  [SSL Handshake][SSL Change cipher Spec][SSL Alert]
SSL/TLS  [                 SSL Record Layer               ]
L4       [   TCP  ]
L3       [   IP   ]
L2       [Ethernet]

https://namu.wiki/w/TLS



실습> 와이어샤크로 SSL/TLS 패킷 확인하기

1. 와이어샤크 실행
와이어샤크 실행 패킷을 덤프한다.

2. IP 주소 확인
linuxmaster.net
C:\Users\user>nslookup linuxmaster.net
서버: ns.lgtelecom.com
Address: 164.124.101.2

권한 없는 응답:
이름: linuxmaster.net
Address: 45.120.69.175 <-- IP주소 확인

3. 웹사이트 접속
https://linuxmaster.net/ 사이트를 방문한다.

https://linuxmaster.net/
linuxmaster.net에 오신 것을 환영합니다.

4. 패킷 덤프 중지
웹사이트의 페이지가 나오면 패킷 덤프를 중지한다.

5. 패킷 필터
많은 패킷에서 linuxmaster.net 패킷만 확인하기 위해서 display filter 부분에서 아래처럼 필터를 사용한다.
ip.addr == 45.120.69.175 <-- 45.120.69.175 만 확인한다는 의미이다.

https://linuxmaster.net/TLSv1.2_packet.pcapng


실습> 인증서 확인하기

크롬에서 실행한다.

https://linuxmaster.net/

자물쇠를 클릭해서 인증서를 확인한다.

실습> 공인된 인증기관(CA) 확인하기

크롬에서 실행한다.

설정 > 개인 정보 보호 및 보안 > 보안 > 기기 인증서 관리

중간 인증 기관, 신뢰된 루트 인증 기관을 확인한다.

ZeroSSL RSA ...

실습> 보안서버 구축하기 1

보안 서버란 ?
서버에 인증서를 설치해서 웹 데이터를 암호화해서 안전하게 전송하는 서버를 말한다.

http: 평문 통신, 80번 포트
https: 암호화 통신, 인증서, 443번 포트, 자가인증(인증서 오류), 신뢰된 인증기관에서의 인증(오류가 안나지만 비용이 발생한다.)
-자가인증을 통해 발행한 인증서: 연습용/개발 서버에서 사용
-신뢰된 인증기관에서 발행한 인증서: 실제 서버에서 사용

여기서는 연습이므로 자가인증을 통해 발행한 인증서를 생성해서 웹서버에 설치를 한다.

Secure Sockets Layer (SSL)
Transport Layer Security (TLS)

1. DNS 설정
sbs.com 이 200.200.200.3으로 설정되어 있어야 한다.
C:\Users\user>nslookup
기본 서버: ns.dacom.co.kr
Address: 164.124.101.2

> server 200.200.200.3

기본 서버: [200.200.200.3]
Address: 200.200.200.3

> sbs.com

서버: [200.200.200.3]
Address: 200.200.200.3

이름: sbs.com
Address: 200.200.200.3

> exit

검색 -> cmd -> 관리자 권한으로 실행
notepad c:/windows/system32/drivers/etc/hosts
200.200.200.3 sbs.com www.sbs.com
200.200.200.4 kbs.com www.kbs.com

참고로 백신 때문에 hosts 파일이 수정되지 않으면 실습을 하는 동안 잠시 중지하면 된다.

ping test할 때 www.sbs.com이 200.200.200.3 으로 가는지 확인한다.
ping test할 때 www.kbs.com이 200.200.200.4 로 가는지 확인한다.

C:\Windows\system32>ping www.sbs.com

Ping sbs.com [200.200.200.3] 32바이트 데이터 사용:
Control-C
^C
C:\Windows\system32>ping www.kbs.com

Ping kbs.com [200.200.200.4] 32바이트 데이터 사용:
Control-C
^C

2. mod_ssl 패키지 설치
아파치 모듈인 mod_ssl 패키지를 설치한다.
[root@ns1 ~]# yum -y install mod_ssl
[root@ns1 ~]# rpm -q mod_ssl
[root@ns1 ~]# rpm -qi mod_ssl
[root@ns1 ~]# rpm -ql mod_ssl

3. 개인키 생성 및 인증 요청서 생성
req : x.509 인증 요청서 만들기(PKCS # 10 X.509 인증서 서명 요청 (CSR) 관리)
-nodes : 이 옵션을 지정하면 개인키가 생성되면 암호화되지 않는다.(암호화 하면 인증서 쓸 때 계속 암호 넣어줘야 함)
-newkey : 새 인증서 요청과 새 개인 키를 만든다.
rsa : nbits (nbits는 비트 수)는 크기가 nbits 인 RSA 키를 생성한다.
nbits가 생략 된 경우, 즉 -newkey rsa가 지정되면 기본 키 크기인 구성 파일이 사용
-keyout 파일이름 : 새로 생성 된 개인 키를 쓸 파일 이름을 제공한다.(개인키 파일 이름 지정)
-out 파일이름 : 인증서 요청 파일명으로 생성된다.

[root@ns1 ~]# mkdir ssltls; cd ssltls
[root@ns1 ssltls]# openssl req -nodes -newkey rsa:2048 -keyout sbs.key -out sbs.csr
Generating a 2048 bit RSA private key
..........+++
.............................................+++

writing new private key to 'sbs.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) [XX]:
State or Province Name (full name) []:
Locality Name (eg, city) [Default City]:
Organization Name (eg, company) [Default Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

[root@ns1 ssltls]# ll
합계 8
-rw-r--r--. 1 root root 952 1월 30 11:12 sbs.csr
-rw-r--r--. 1 root root 1708 1월 30 11:12 sbs.key

4. 개인 인증서 생성
실제로는 공인된 인증 기관에 sbs.csr 파일을 보내서 인증기관에서 만들어서 보내준 인증서를 사용해야 된다.
여기서는 연습이므로 자체적으로 자가 인증을 이용해서 인증서를 생성한다.
x509 : 인증서 형태의 포맷으로 생성한다.
-days 일수 : 인증서 유효 기간
-in sbs.csr : 생성한 csr 파일을 지정한다.
-signkey 개인키 파일 : 개인키를 사용해서 입력 파일에 자체적으로 서명을 한다.
-out 인증서 파일 : 생성할 인증서를 적는다.

[root@ns1 ssltls]# openssl x509 -req -days 365 -in sbs.csr -signkey sbs.key -out sbs.crt
Signature ok
subject=/C=XX/L=Default City/O=Default Company Ltd
Getting Private key

[root@ns1 ssltls]# ll
합계 12
-rw-r--r--. 1 root root 1103 1월 30 11:18 sbs.crt
-rw-r--r--. 1 root root 952 1월 30 11:12 sbs.csr
-rw-r--r--. 1 root root 1708 1월 30 11:12 sbs.key

5. SELinux 권한 변경 및 파일 이동
SELinux 관련 설정을 변경한다.
chcon -t 옵션을 이용해서 보안문맥의 type을 admin_home_t -> cert_t 로 변경한다.

SELinux On : 사무실 번호키(Permission) + 사무실 열쇠(SELinux)
SELinux Off: 사무실 번호키(Permission)

[root@ns1 ssltls]# ls -Z
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 sbs.crt
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 sbs.csr
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 sbs.key
[root@ns1 ssltls]# ls -Zd /etc/pki/tls
drwxr-xr-x. root root system_u:object_r:cert_t:s0 /etc/pki/tls <-- cert_t

sbs.key, sbs.csr, sbs.crt 파일의 보안문맥(Security Context)을 admin_home_t -> cert_t 로 변경한다.
[root@ns1 ssltls]# chcon -t cert_t sbs*
[root@ns1 ssltls]# ll -Z
-rw-r--r--. root root unconfined_u:object_r:cert_t:s0 sbs.crt <-- admin_home_t -> cert_t
-rw-r--r--. root root unconfined_u:object_r:cert_t:s0 sbs.csr <-- admin_home_t -> cert_t
-rw-r--r--. root root unconfined_u:object_r:cert_t:s0 sbs.key <-- admin_home_t -> cert_t

허가권을 644 -> 600으로 수정한 후 각 디렉터리로 이동시킨다.
[root@ns1 ssltls]# chmod 600 sbs*
[root@ns1 ssltls]# ll
합계 12
-rw-------. 1 root root 1103 1월 30 11:18 sbs.crt
-rw-------. 1 root root 952 1월 30 11:12 sbs.csr
-rw-------. 1 root root 1708 1월 30 11:12 sbs.key

[root@ns1 ssltls]# mv sbs.key /etc/pki/tls/private/
[root@ns1 ssltls]# mv sbs.csr /etc/pki/tls/private/
[root@ns1 ssltls]# mv sbs.crt /etc/pki/tls/certs/

6. 웹서버 SSL 설정
mod_ssl 패키지를 설치하면 /etc/httpd/conf.d/ssl.conf 설정 파일이 생기고 이 파일을 편집한다.
[root@ns1 ssltls]# vi /etc/httpd/conf.d/ssl.conf
#100번 라인을 아래처럼 localhost.crt를 sbs.crt 인증서 파일로 변경한다.
SSLCertificateFile /etc/pki/tls/certs/sbs.crt

#107번 라인을 아래처럼 localhost.key를 sbs.key 개인키 파일로 변경한다.
SSLCertificateKeyFile /etc/pki/tls/private/sbs.key

[root@ns1 ssltls]# vi /etc/httpd/conf/httpd.conf
:
:(생략)
IncludeOptional conf.d/*.conf
#JSP 설정과 가상호스트 설정은 모두 삭제한다.

7. 웹서버 재시작
[root@ns1 ssltls]# httpd -t
Syntax OK
[root@ns1 ssltls]# systemctl restart httpd

[root@ns1 ssltls]# vi /var/www/html/index.html

<!doctype html>
<html>
  <head>
    <meta charset="utf8">
    <title> ::: sbs.com ::: </title>
  </head>
<body>
    Welcome to sbs.com.
</body>
</html>

8. 웹서버 접속
https://200.200.200.3/
https://sbs.com/

Welcome to sbs.com.

실습> 보안서버 구축하기 2

https://200.200.200.4/
https://kbs.com/
kbs.key, kbs.csr, kbs.crt 파일을 생성한다.
200.200.200.4 에서 설정한다.
가상호스트를 모두 삭제한다.

1. DNS 설정
sbs.com 이 200.200.200.4로 설정되어 있어야 한다.
C:\Users\user>nslookup
기본 서버: ns.dacom.co.kr
Address: 164.124.101.2

> server 200.200.200.3

기본 서버: [200.200.200.3]
Address: 200.200.200.3

> kbs.com

서버: [200.200.200.3]
Address: 200.200.200.4

이름: kbs.com
Address: 200.200.200.4

> exit

검색 -> cmd -> 관리자 권한으로 실행
notepad c:/windows/system32/drivers/etc/hosts
200.200.200.3 sbs.com www.sbs.com
200.200.200.4 kbs.com www.kbs.com

참고로 백신 때문에 hosts 파일이 수정되지 않으면 실습을 하는 동안 잠시 중지하면 된다.

ping test할 때 www.sbs.com이 200.200.200.3 으로 가는지 확인한다.
ping test할 때 www.kbs.com이 200.200.200.4 로 가는지 확인한다.

C:\Windows\system32>ping www.sbs.com

Ping sbs.com [200.200.200.3] 32바이트 데이터 사용:
Control-C
^C
C:\Windows\system32>ping www.kbs.com

Ping kbs.com [200.200.200.4] 32바이트 데이터 사용:
Control-C
^C

2. mod_ssl 패키지 설치
아파치 모듈인 mod_ssl 패키지를 설치한다.
[root@ns2 ~]# yum -y install mod_ssl
[root@ns2 ~]# rpm -q mod_ssl
[root@ns2 ~]# rpm -qi mod_ssl
[root@ns2 ~]# rpm -ql mod_ssl

3. 개인키 생성 및 인증 요청서 생성
req : x.509 인증 요청서 만들기(PKCS # 10 X.509 인증서 서명 요청 (CSR) 관리)
-nodes : 이 옵션을 지정하면 개인키가 생성되면 암호화되지 않는다.(암호화 하면 인증서 쓸 때 계속 암호 넣어줘야 함)
-newkey : 새 인증서 요청과 새 개인 키를 만든다.
rsa : nbits (nbits는 비트 수)는 크기가 nbits 인 RSA 키를 생성한다.
nbits가 생략 된 경우, 즉 -newkey rsa가 지정되면 기본 키 크기인 구성 파일이 사용
-keyout 파일이름 : 새로 생성 된 개인 키를 쓸 파일 이름을 제공한다.(개인키 파일 이름 지정)
-out 파일이름 : 인증서 요청 파일명으로 생성된다.

[root@ns1 ~]# mkdir ssltls; cd ssltls
[root@ns1 ssltls]# openssl req -nodes -newkey rsa:2048 -keyout kbs.key -out kbs.csr
Generating a 2048 bit RSA private key
.....+++
........................................+++

writing new private key to 'kbs.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) [XX]:
State or Province Name (full name) []:
Locality Name (eg, city) [Default City]:
Organization Name (eg, company) [Default Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

[root@ns2 ssltls]# ll
합계 8
-rw-r--r--. 1 root root 952 1월 30 12:23 kbs.csr
-rw-r--r--. 1 root root 1704 1월 30 12:23 kbs.key

4. 개인 인증서 생성
실제로는 공인된 인증 기관에 sbs.csr 파일을 보내서 인증기관에서 만들어서 보내준 인증서를 사용해야 된다.
여기서는 연습이므로 자체적으로 자가 인증을 이용해서 인증서를 생성한다.
x509 : 인증서 형태의 포맷으로 생성한다.
-days 일수 : 인증서 유효 기간
-in kbs.csr : 생성한 csr 파일을 지정한다.
-signkey 개인키 파일 : 개인키를 사용해서 입력 파일에 자체적으로 서명을 한다.
-out 인증서 파일 : 생성할 인증서를 적는다.

[root@ns1 ssltls]# openssl x509 -req -days 365 -in kbs.csr -signkey kbs.key -out kbs.crt
Signature ok
subject=/C=XX/L=Default City/O=Default Company Ltd
Getting Private key

[root@ns2 ssltls]# ll
합계 12
-rw-r--r--. 1 root root 1103 1월 30 12:24 kbs.crt <-- 자가 인증을 통해서 생성된 인증서 파일
-rw-r--r--. 1 root root 952 1월 30 12:23 kbs.csr
-rw-r--r--. 1 root root 1704 1월 30 12:23 kbs.key

5. SELinux 권한 변경 및 파일 이동
SELinux 관련 설정을 변경한다.
chcon -t 옵션을 이용해서 보안문맥의 type을 admin_home_t -> cert_t 로 변경한다.

SELinux On : 사무실 번호키(Permission) + 사무실 열쇠(SELinux)
SELinux Off: 사무실 번호키(Permission)

[root@ns1 ssltls]# ls -Z
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 kbs.crt
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 kbs.csr
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 kbs.key

[root@ns1 ssltls]# ls -Zd /etc/pki/tls
drwxr-xr-x. root root system_u:object_r:cert_t:s0 /etc/pki/tls <-- cert_t

kbs.key, kbs.csr, kbs.crt 파일의 보안문맥(Security Context)을 admin_home_t -> cert_t 로 변경한다.
[root@ns1 ssltls]# chcon -t cert_t kbs*
[root@ns1 ssltls]# ll -Z
-rw-r--r--. root root unconfined_u:object_r:cert_t:s0 kbs.crt <-- admin_home_t -> cert_t
-rw-r--r--. root root unconfined_u:object_r:cert_t:s0 kbs.csr <-- admin_home_t -> cert_t
-rw-r--r--. root root unconfined_u:object_r:cert_t:s0 kbs.key <-- admin_home_t -> cert_t

허가권을 644 -> 600으로 수정한 후 각 디렉터리로 이동시킨다.
[root@ns1 ssltls]# chmod 600 kbs*; ll
합계 12
-rw-------. 1 root root 1103 1월 30 12:24 kbs.crt
-rw-------. 1 root root 952 1월 30 12:23 kbs.csr
-rw-------. 1 root root 1704 1월 30 12:23 kbs.key

[root@ns1 ssltls]# mv kbs.key /etc/pki/tls/private/
[root@ns1 ssltls]# mv kbs.crt /etc/pki/tls/certs/

6. 웹서버 SSL 설정
mod_ssl 패키지를 설치하면 /etc/httpd/conf.d/ssl.conf 설정 파일이 생기고 이 파일을 편집한다.
[root@ns1 ssltls]# vi /etc/httpd/conf.d/ssl.conf
#100번 라인을 아래처럼 localhost.crt를 kbs.crt 인증서 파일로 변경한다.
SSLCertificateFile /etc/pki/tls/certs/kbs.crt

#107번 라인을 아래처럼 localhost.key를 kbs.key 개인키 파일로 변경한다.
SSLCertificateKeyFile /etc/pki/tls/private/kbs.key

[root@ns1 ssltls]# vi /etc/httpd/conf/httpd.conf
:
:(생략)
IncludeOptional conf.d/*.conf
#JSP 설정과 가상호스트 설정은 모두 삭제한다.

7. 웹서버 재시작
[root@ns1 ssltls]# httpd -t
Syntax OK
[root@ns1 ssltls]# systemctl restart httpd

[root@ns1 ssltls]# vi /var/www/html/index.html

<!doctype html>
<html>
  <head>
    <meta charset="utf8">
    <title> ::: kbs.com ::: </title>
  </head>
<body>
    Welcome to kbs.com.
</body>
</html>

8. 웹서버 접속
아래 사이트로 https로 접속한다.

https://200.200.200.4/
https://kbs.com/

Welcome to kbs.com.


실습> 보안서버 구축하기 3

sbs.com 에 대한 정보를 CSR 파일에 정확하게 넣어준다.
sbs.com 에 대한 가상호스트를 설정한다.

1. DNS 설정
위에서 설정했기 때문에 이 부분은 Skip 한다.

2. mod_ssl 패키지 설치
아파치 모듈인 mod_ssl 패키지를 설치하지만 위에서 설정을 했기 때문에 이 부분도 Skip 한다.
[root@ns1 ~]# yum -y install mod_ssl

3. 개인키 생성 및 인증 요청서 생성
req : x.509 인증 요청서 만들기(PKCS # 10 X.509 인증서 서명 요청 (CSR) 관리)
-nodes : 이 옵션을 지정하면 개인키가 생성되면 암호화되지 않는다.(암호화 하면 인증서 쓸 때 계속 암호 넣어줘야 함)
-newkey : 새 인증서 요청과 새 개인 키를 만든다.
rsa : nbits (nbits는 비트 수)는 크기가 nbits 인 RSA 키를 생성한다.
nbits가 생략 된 경우, 즉 -newkey rsa가 지정되면 기본 키 크기인 구성 파일이 사용
-keyout 파일이름 : 새로 생성 된 개인 키를 쓸 파일 이름을 제공한다.(개인키 파일 이름 지정)
-out 파일이름 : 인증서 요청 파일명으로 생성된다.

[root@ns1 ~]# mkdir ssltls; cd ssltls
[root@ns1 ssltls]# openssl req -nodes -newkey rsa:2048 -keyout sbs.key -out sbs.csr
Generating a 2048 bit RSA private key
............+++
.......+++

writing new private key to 'sbs.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) [XX]:kr
State or Province Name (full name) []:seoul
Locality Name (eg, city) [Default City]:gangnam
Organization Name (eg, company) [Default Company Ltd]:kh
Organizational Unit Name (eg, section) []:security team
Common Name (eg, your name or your server's hostname) []:www.sbs.com <-- https://www.sbs.com/
Email Address []:webmaster@sbs.com <-- 인증기관에서 인증서를 만들면 보내주는 관리자 메일

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

[root@ns1 ssltls]# ll
합계 8
-rw-r--r--. 1 root root 1054 1월 30 12:45 sbs.csr
-rw-r--r--. 1 root root 1704 1월 30 12:45 sbs.key

4. 개인 인증서 생성
실제로는 공인된 인증 기관에 sbs.csr 파일을 보내서 인증기관에서 만들어서 보내준 인증서를 사용해야 된다.
여기서는 연습이므로 자체적으로 자가 인증을 이용해서 인증서를 생성한다.
x509 : 인증서 형태의 포맷으로 생성한다.
-days 일수 : 인증서 유효 기간
-in sbs.csr : 생성한 csr 파일을 지정한다.
-signkey 개인키 파일 : 개인키를 사용해서 입력 파일에 자체적으로 서명을 한다.
-out 인증서 파일 : 생성할 인증서를 적는다.

[root@ns1 ssltls]# openssl x509 -req -days 365 -in sbs.csr -signkey sbs.key -out sbs.crt
Signature ok
subject=/C=XX/L=Default City/O=Default Company Ltd
Getting Private key

[root@ns1 ssltls]# ll
합계 12
-rw-r--r--. 1 root root 1306 1월 30 12:49 sbs.crt
-rw-r--r--. 1 root root 1054 1월 30 12:45 sbs.csr
-rw-r--r--. 1 root root 1704 1월 30 12:45 sbs.key

5. SELinux 권한 변경 및 파일 이동
SELinux 관련 설정을 변경한다.
chcon -t 옵션을 이용해서 보안문맥의 type을 admin_home_t -> cert_t 로 변경한다.

SELinux On : 사무실 번호키(Permission) + 사무실 열쇠(SELinux)
SELinux Off: 사무실 번호키(Permission)

[root@ns1 ssltls]# ls -Z
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 sbs.crt
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 sbs.csr
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 sbs.key
[root@ns1 ssltls]# ls -Zd /etc/pki/tls
drwxr-xr-x. root root system_u:object_r:cert_t:s0 /etc/pki/tls <-- cert_t

sbs.key, sbs.csr, sbs.crt 파일의 보안문맥(Security Context)을 admin_home_t -> cert_t 로 변경한다.
[root@ns1 ssltls]# chcon -t cert_t sbs*
[root@ns1 ssltls]# ll -Z
-rw-r--r--. root root unconfined_u:object_r:cert_t:s0 sbs.crt <-- admin_home_t -> cert_t
-rw-r--r--. root root unconfined_u:object_r:cert_t:s0 sbs.csr <-- admin_home_t -> cert_t
-rw-r--r--. root root unconfined_u:object_r:cert_t:s0 sbs.key <-- admin_home_t -> cert_t

허가권을 644 -> 600으로 수정한 후 각 디렉터리로 이동시킨다.
[root@ns1 ssltls]# chmod 600 sbs*
[root@ns1 ssltls]# ll
합계 12
-rw-------. 1 root root 1103 1월 30 11:18 sbs.crt
-rw-------. 1 root root 952 1월 30 11:12 sbs.csr
-rw-------. 1 root root 1708 1월 30 11:12 sbs.key

[root@ns1 ssltls]# mv sbs.key /etc/pki/tls/private/
[root@ns1 ssltls]# mv sbs.csr /etc/pki/tls/private/
[root@ns1 ssltls]# mv sbs.crt /etc/pki/tls/certs/

6. 웹서버 SSL 설정
mod_ssl 패키지를 설치하면 /etc/httpd/conf.d/ssl.conf 설정 파일이 생기고 이 파일을 편집한다.
[root@ns1 ssltls]# vi /etc/httpd/conf.d/ssl.conf
#100번 라인을 아래처럼 localhost.crt를 sbs.crt 인증서 파일로 변경한다.
SSLCertificateFile /etc/pki/tls/certs/sbs.crt

#107번 라인을 아래처럼 localhost.key를 sbs.key 개인키 파일로 변경한다.
SSLCertificateKeyFile /etc/pki/tls/private/sbs.key

[root@ns1 ssltls]# vi /etc/httpd/conf/httpd.conf
:
:(생략)
IncludeOptional conf.d/*.conf
#sbs.com

<VirtualHost *:443>
    SSLEngine on
    SSLCertificateFile    "/etc/pki/tls/certs/sbs.crt"
    SSLCertificateKeyFile "/etc/pki/tls/private/sbs.key"
    DocumentRoot          "/var/www/html/"
    ServerName            "sbs.com"
    ServerAlias           "www.sbs.com"
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot          "/var/www/html"
    ServerName            "sbs.com"
    ServerAlias           "www.sbs.com"
</VirtualHost>

7. 웹서버 재시작
[root@ns1 ssltls]# httpd -t
Syntax OK
[root@ns1 ssltls]# systemctl restart httpd

[root@ns1 ssltls]# vi /var/www/html/index.html

<!doctype html>
<html>
  <head>
    <meta charset="utf8">
    <title> ::: sbs.com ::: </title>
  </head>
<body>
    Welcome to sbs.com.
</body>
</html>

8. 웹서버 접속

https://www.sbs.com/

Welcome to sbs.com.

실습> 보안서버 구축하기 4

kbs.com 에 대한 정보를 CSR 파일에 정확하게 넣어준다.
kbs.com 에 대한 가상호스트를 설정한다.

1. DNS 설정
위에서 설정했기 때문에 이 부분은 Skip 한다.

2. mod_ssl 패키지 설치
아파치 모듈인 mod_ssl 패키지를 설치하지만 위에서 설정을 했기 때문에 이 부분도 Skip 한다.
[root@ns2 ~]# yum -y install mod_ssl

3. 개인키 생성 및 인증 요청서 생성
req : x.509 인증 요청서 만들기(PKCS # 10 X.509 인증서 서명 요청 (CSR) 관리)
-nodes : 이 옵션을 지정하면 개인키가 생성되면 암호화되지 않는다.(암호화 하면 인증서 쓸 때 계속 암호 넣어줘야 함)
-newkey : 새 인증서 요청과 새 개인 키를 만든다.
rsa : nbits (nbits는 비트 수)는 크기가 nbits 인 RSA 키를 생성한다.
nbits가 생략 된 경우, 즉 -newkey rsa가 지정되면 기본 키 크기인 구성 파일이 사용
-keyout 파일이름 : 새로 생성 된 개인 키를 쓸 파일 이름을 제공한다.(개인키 파일 이름 지정)
-out 파일이름 : 인증서 요청 파일명으로 생성된다.

[root@ns2 ~]# mkdir ssltls; cd ssltls
[root@ns2 ssltls]# openssl req -nodes -newkey rsa:2048 -keyout kbs.key -out kbs.csr
Generating a 2048 bit RSA private key
............+++
.......+++

writing new private key to 'kbs.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) [XX]:kr
State or Province Name (full name) []:seoul
Locality Name (eg, city) [Default City]:gangnam
Organization Name (eg, company) [Default Company Ltd]:kh
Organizational Unit Name (eg, section) []:security team
Common Name (eg, your name or your server's hostname) []:www.kbs.com <-- https://www.kbs.com/
Email Address []:webmaster@sbs.com <-- 인증기관에서 인증서를 만들면 보내주는 관리자 메일

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

[root@ns1 ssltls]# ll
합계 8
-rw-r--r--. 1 root root 1054 1월 30 12:45 kbs.csr
-rw-r--r--. 1 root root 1704 1월 30 12:45 kbs.key

4. 개인 인증서 생성
실제로는 공인된 인증 기관에 kbs.csr 파일을 보내서 인증기관에서 만들어서 보내준 인증서를 사용해야 된다.
여기서는 연습이므로 자체적으로 자가 인증을 이용해서 인증서를 생성한다.
x509 : 인증서 형태의 포맷으로 생성한다.
-days 일수 : 인증서 유효 기간
-in sbs.csr : 생성한 csr 파일을 지정한다.
-signkey 개인키 파일 : 개인키를 사용해서 입력 파일에 자체적으로 서명을 한다.
-out 인증서 파일 : 생성할 인증서를 적는다.

[root@ns1 ssltls]# openssl x509 -req -days 365 -in kbs.csr -signkey kbs.key -out kbs.crt
Signature ok
subject=/C=XX/L=Default City/O=Default Company Ltd
Getting Private key

[root@ns1 ssltls]# ll
합계 12
-rw-r--r--. 1 root root 1306 1월 30 12:49 kbs.crt
-rw-r--r--. 1 root root 1054 1월 30 12:45 kbs.csr
-rw-r--r--. 1 root root 1704 1월 30 12:45 kbs.key

5. SELinux 권한 변경 및 파일 이동
SELinux 관련 설정을 변경한다.
chcon -t 옵션을 이용해서 보안문맥의 type을 admin_home_t -> cert_t 로 변경한다.

SELinux On : 사무실 번호키(Permission) + 사무실 열쇠(SELinux)
SELinux Off: 사무실 번호키(Permission)

[root@ns1 ssltls]# ls -Z
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 kbs.crt
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 kbs.csr
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 kbs.key
[root@ns1 ssltls]# ls -Zd /etc/pki/tls
drwxr-xr-x. root root system_u:object_r:cert_t:s0 /etc/pki/tls <-- cert_t

sbs.key, sbs.csr, sbs.crt 파일의 보안문맥(Security Context)을 admin_home_t -> cert_t 로 변경한다.
[root@ns1 ssltls]# chcon -t cert_t sbs*
[root@ns1 ssltls]# ll -Z
-rw-r--r--. root root unconfined_u:object_r:cert_t:s0 kbs.crt <-- admin_home_t -> cert_t
-rw-r--r--. root root unconfined_u:object_r:cert_t:s0 kbs.csr <-- admin_home_t -> cert_t
-rw-r--r--. root root unconfined_u:object_r:cert_t:s0 kbs.key <-- admin_home_t -> cert_t

허가권을 644 -> 600으로 수정한 후 각 디렉터리로 이동시킨다.
[root@ns1 ssltls]# chmod 600 sbs*
[root@ns1 ssltls]# ll
합계 12
-rw-------. 1 root root 1103 1월 30 11:18 kbs.crt
-rw-------. 1 root root 952 1월 30 11:12 kbs.csr
-rw-------. 1 root root 1708 1월 30 11:12 kbs.key

[root@ns1 ssltls]# mv kbs.key /etc/pki/tls/private/
[root@ns1 ssltls]# mv kbs.csr /etc/pki/tls/private/
[root@ns1 ssltls]# mv kbs.crt /etc/pki/tls/certs/

6. 웹서버 SSL 설정
mod_ssl 패키지를 설치하면 /etc/httpd/conf.d/ssl.conf 설정 파일이 생기고 이 파일을 편집한다.
[root@ns1 ssltls]# vi /etc/httpd/conf.d/ssl.conf
#100번 라인을 아래처럼 localhost.crt를 kbs.crt 인증서 파일로 변경한다.
SSLCertificateFile /etc/pki/tls/certs/kbs.crt

#107번 라인을 아래처럼 localhost.key를 kbs.key 개인키 파일로 변경한다.
SSLCertificateKeyFile /etc/pki/tls/private/kbs.key

[root@ns1 ssltls]# vi /etc/httpd/conf/httpd.conf
:
:(생략)
IncludeOptional conf.d/*.conf
#sbs.com

<VirtualHost *:443>
    SSLEngine on
    SSLCertificateFile    "/etc/pki/tls/certs/kbs.crt"
    SSLCertificateKeyFile "/etc/pki/tls/private/kbs.key"
    DocumentRoot          "/var/www/html/"
    ServerName            "kbs.com"
    ServerAlias           "www.kbs.com"
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot          "/var/www/html"
    ServerName            "kbs.com"
    ServerAlias           "www.kbs.com"
</VirtualHost>

7. 웹서버 재시작
[root@ns2 ssltls]# httpd -t
Syntax OK
[root@ns2 ssltls]# systemctl restart httpd

[root@ns2 ssltls]# vi /var/www/html/index.html

<!doctype html>
<html>
  <head>
    <meta charset="utf8">
    <title> ::: kbs.com ::: </title>
  </head>
<body>
    Welcome to kbs.com.
</body>
</html>

실습> https 보안 서버 구현하기

보안 서버 IP주소: 200.200.200.5
도메인명: ssltest.linuxmaster.net
CSR 파일명: ssltest.csr
KEY 파일명: ssltest.key
CRT 파일명: ssltest.crt
인증서 유효기간: 2년
RSA bit수: 4096

접속 URL: https://ssltest.linuxmaster.net/
웹문서 디렉터리: /var/www/html

1. 네트워크 설정
[root@ssltest ~]# nmtui
[root@ssltest ~]# systemctl restart network
[root@ssltest ~]# hostname
ssltest.linuxmaster.net
[root@ssltest ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:50:56:35:85:8c brd ff:ff:ff:ff:ff:ff
inet 200.200.200.5/24 brd 200.200.200.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet6 fe80::17a9:6a9d:b04a:593d/64 scope link tentative noprefixroute
valid_lft forever preferred_lft forever
[root@ssltest ~]# ip r
default via 200.200.200.2 dev ens33 proto static metric 100
200.200.200.0/24 dev ens33 proto kernel scope link src 200.200.200.5 metric 100

2. 방화벽 설정
firewalld를 중지하기 iptables-services 를 설치하고 활성화 한다.
[root@ssltest ~]# systemctl stop firewalld
[root@ssltest ~]# systemctl disable firewalld
[root@ssltest ~]# yum -y install iptables-services
[root@ssltest ~]# systemctl enable iptables
[root@ssltest ~]# vi /etc/sysconfig/iptables

# Generated by iptables-save v1.4.21 on Thu Jan 19 14:39:06 2023
*filter
:INPUT DROP [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [1:140]
-A INPUT -m state --state INVALID -m comment --comment "깨진 패킷 로그 기록" -j LOG --log-prefix "DROP INVALID " --log-tcp-options --log-ip-options
-A INPUT -m state --state INVALID -m comment --comment "깨진 패킷 차단" -j DROP
-A INPUT -m state --state RELATED,ESTABLISHED -m comment --comment "이미 연결된 패킷 허용" -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -m state --state NEW -m comment --comment "WEB: http" -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -m state --state NEW -m comment --comment "WEB: https" -j ACCEPT
-A INPUT -s 200.200.200.1/32 -p tcp -m tcp --dport 22 -m state --state NEW -m comment --comment SSH -j ACCEPT
-A INPUT -i lo -j ACCEPT
COMMIT
# Completed on Thu Jan 19 14:39:06 2023

[root@ssltest ~]# iptables-restore /etc/sysconfig/iptables
[root@ssltest ~]# iptables -nL

Chain INPUT (policy DROP)
target     prot opt source               destination         
LOG        all  --  0.0.0.0/0            0.0.0.0/0            state INVALID /* 깨진 패킷 로그 기록 */ LOG flags 6 level 4 prefix "DROP INVALID "
DROP       all  --  0.0.0.0/0            0.0.0.0/0            state INVALID /* 깨진 패킷 차단 */
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED /* 이미 연결된 패킷 허용 */
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:80 state NEW /* WEB: http */
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:443 state NEW /* WEB: https */
ACCEPT     tcp  --  200.200.200.1        0.0.0.0/0            tcp dpt:22 state NEW /* SSH */
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination   

3. 웹서버 설치
여기서는 APM은 필요없고 아파치 웹서버하고 mod_ssl 패키지만 설치한다.
[root@ssltest ~]# yum -y install httpd mod_ssl
[root@ssltest ~]# systemctl enable httpd

4. 인증서 생성
[root@ssltest ~]# openssl req -nodes -newkey rsa:4096 -keyout ssltest.key -out ssltest.csr
Generating a 4096 bit RSA private key
.........................................................................................................................++
.............................................................................++

writing new private key to 'ssltest.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) [XX]:kr
State or Province Name (full name) []:seoul
Locality Name (eg, city) [Default City]:gangnam
Organization Name (eg, company) [Default Company Ltd]:ssltest
Organizational Unit Name (eg, section) []:security team
Common Name (eg, your name or your server's hostname) []:ssltest.linuxmaster.net
Email Address []:webmaster@linuxmaster.net

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

#openssl x509 -req -days 730 -in ssltest.csr -signkey ssltest.key -out ssltest.crt
#chmod 600 ssltest.
#chcon -t cert_t ssltest.

#mv ssltest.key /etc/pki/tls/private/
#mv ssltest.crt /etc/pki/tls/certs/

5. 인증서 설정
#vi /etc/httpd/conf.d/ssl.conf
SSLCertificateFile /etc/pki/tls/certs/ssltest.crt
SSLCertificateKeyFile /etc/pki/tls/private/ssltest.key

#httpd -t
#systemctl start httpd
[root@ssltest ~]# ss -nlt

State       Recv-Q Send-Q      Local Address:Port                     Peer Address:Port              
LISTEN      0      100             127.0.0.1:25                                  *:*                  
LISTEN      0      128                     *:22                                  *:*                  
LISTEN      0      100                 [::1]:25                               [::]:*                  
LISTEN      0      128                  [::]:443                              [::]:*                  
LISTEN      0      128                  [::]:80                               [::]:*                  
LISTEN      0      128                  [::]:22                               [::]:*     

6. 웹페이지 생성
#vi /var/www/html/index.html

<!doctype html>
<html>
  <head>
    <meta charset="utf8">
    <title> ::: ssltest ::: </title>
  </head>
<body>
    Welcome to ssltest.linuxmaster.net.
</body>
</html>

7. 웹페이지 접속
https://ssltest.linuxmaster.net/

Welcome to ssltest.linuxmaster.net.

암호화키 == 복호화키

암호화 방식의 분류
   보내는 사람          | 공개된 환경 |    받는 사람
평문 -> 암호화 알고리즘 ---> 암호문 ---> 복호화 알고리즘 -> 평문
       암호화키 K(e)               복호화키 K(d)

평문(Plaintext)
-암호화 알고리즘을 통해서 암호화되기 전에 읽을 수 있는 문장
암호문(Ciphertext)
-암호화 알고리즘을 통해서 읽을 수 없는 문장
암호화 알고리즘(Encryption)
-암호화하는 과정을 말한다.
복호화 알고리즘(Decryption)
-복호화하는 과정을 말한다.

암호화: 평문을 암호문으로 바꾸는 과정을 말한다.
복호화: 암호문을 평문으로 바꾸는 과정을 말한다.

       1004
철수 ----------> 영희
     (평문 전송)  <-- 중간에 훔쳐볼 수 있는 도청(Sniffing) 의 위험이 도사리고 있다.
       1251 ?
철수 ----------> 영희
    (암호문 전송) <-- 도청을 당해서 알고리즘과 키를 모르면 무슨 말인지 알 수 없음.

전제조건: 철수 알고리즘/키값을 철수와 영희가 서로 알고 있어야 한다.

철수 알고리즘
-평문을 암호화할 때의 알고리즘
Key 값: 1111
1. 숫자들을 서로 맞바꾼다.
2. Key값을 서로 더한다.

-평문을 복호화할 때의 알고리즘
Key 값: 1111
1. 숫자들을 서로 맞바꾼다.
2. Key값을 서로 뺀다.

o 철수 알고리즘을 적용한 평문을 암호화한 예

1004(평문)

0140  <-- 숫자들을 서로 맞바꾼다.
+1111  <-- Key값을 서로 더한다.
------
1251  (암호문) 철수 알고리즘을 적용한 평문을 암호문으로 변경한 예
Key 값: 3258
   0140
  +3258
  ------
   3398  철수 알고리즘을 적용해도 키값이 다르기 때문에 암호문은 달라지게 된다.

o 철수 알고리즘을 적용한 암호문을 복호화한 예

- 복호화는 암호화의 역순이다.
   1251  (암호문)
   
   2115  <-- 숫자들을 서로 맞바꾼다.
  -1111  <-- Key값을 서로 뺀다.
  ------
   1004  (평문)
      2362
철수 --------> 영숙
   (암호문 전송) <-- 도청을 당해서 알고리즘과 키를 모르면 무슨 말인지 알 수 없음.

전제조건: 철수 알고리즘/키값을 철수와 영숙이가 서로 알고 있어야 한다.

철수 알고리즘
-평문을 암호화할 때의 알고리즘
Key 값: 2222
1. 숫자들을 서로 맞바꾼다.
2. Key값을 서로 더한다.

-암호문을 복호화할 때의 알고리즘
Key 값: 2222
1. 숫자들을 서로 맞바꾼다.
2. Key값을 서로 뺀다.

o 철수 알고리즘을 적용한 평문을 암호화한 예

1004  (평문)
 0140  <-- 숫자들을 서로 맞바꾼다.
+2222  <-- Key값을 서로 더한다.
 ----
 2362 (암호문) 철수 알고리즘을 적용한 평문을 암호문으로 변경한 예

o 철수 알고리즘을 적용한 암호문을 복호화한 예

- 복호화는 암호화의 역순이다.
   2362  (암호문)
   3226  <-- 숫자들을 서로 맞바꾼다.
  -2222  <-- Key값을 서로 뺀다.
   ----
   1004  (평문)

이전에 알고있던 Key값 1111로 복호화하면 2115라는 다른 값이 나온다.

2362  (암호문)
3226  <-- 숫자들을 서로 맞바꾼다.
-1111  <-- Key값을 서로 뺀다.
----
2115  (평문)

일반적인 암호화
알고리즘: 공개
키: 비공개(나와 수신자인 상대방이 알고 있어야 한다.)

특별한 경우의 암호화
알고리즘: 비공개 (국가기밀기관이나 군대 같은 곳에서는 알고리즘도 비공개해서 사용한다.)
키: 비공개(나와 수신자인 상대방이 알고 있어야 한다.)

알고리즘을 비공개 할 수도 있고 실제 국가기밀기관이나 군대 같은 곳에서는 알고리즘도 비공개해서 사용한다.
알고리즘을 비공개 할 경우에는 암호문을 알아내기란 알고리즘을 공개한 경우 보다는 풀기가 더욱더 어렵다.
그런데 왜 일반적인 암호화 통신에서 암호화 알고리즘을 공개로 할까?
불특정 다수인 10,000명과 통신을 한다라고 할 때 암호화 알고리즘을 모두 다르게 하는 것도 힘들 것이다.
위에서 본 것처럼 알고리즘은 동일 하더라도 키가 다르면 암호문은 달라지게 되어있기 때문이다.
그러므로 알고리즘은 공개된 것을 사용하고 키값만 비공개로 잘 관리해서 사용하자라는 것이 일반적인 암호화에서의 통신방법이다.

One Way(일방향 함수)의 예
---------------> O
사과 [믹서기] 사과주스
<--------------- X
명령어     해시 알고리즘   비트수   해시값   글자수
md5sum     md5             128bit   32     (32 x 4 = 128)      
sha1sum    sha1            160bit   40     (40 x 4 = 160)
sha256sum  sha2(sha256)    256bit   64     (64 x 4 = 256)
sha384sum  sha2(sha384)    384bit   96     (96 x 4 = 386)
sha512sum  sha2(sha512)    512bit   128    (128 x 4 = 512)

실습> hash 글자 수 확인하기

[root@ns1 ~]# md5sum /bin/ls
a0c32dd6d3bc4d364380e2e65fe9ac64 /bin/ls
[root@ns1 ~]# python
Python 2.7.5 (default, Oct 14 2020, 14:45:30)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux2
Type "help", "copyright", "credits" or "license" for more information.

>>> len('a0c32dd6d3bc4d364380e2e65fe9ac64')
32
>>> 32*4
128
>>> exit()

[root@ns1 ~]# sha512sum /bin/ls
ef73136452875c4cae5c6b43117c601ec679f027a4ff1c285d477ab6a8950edb9f8da0822a57b1c0eb719d563cb2033765cdf6c949e9df073fbf7772bf5fad71 /bin/ls
[root@ns1 ~]# python
Python 2.7.5 (default, Oct 14 2020, 14:45:30)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux2
Type "help", "copyright", "credits" or "license" for more information.

>>> len('ef73136452875c4cae5c6b43117c601ec679f027a4ff1c285d477ab6a8950edb9f8da0822a57b1c0eb719d563cb2033765cdf6c949e9df073fbf7772bf5fad71')
128
>>> 128*4
512

실습> Hash 검증 테스트

서버에서 제공된 파일을 클라이언트에서 다운로드 받아서 Hash 값을 비교한 후 사용한다.


+----------+ Internet   +----------+
|          |            |          |
| Download | ---------> | Apache   |
|          |            | Tomcat   |
| MD5: aaa | <--------- | MD5: aaa |
|          |            |          |
+----------+            +----------+
   Client                  Server   

다운로드 받은 Hash 값이 같으면 원문도 같다.
Hash == Hash, 원문 == 원문

Hash 값이 같다는 것은 클라이언트가 다운로드 받을 때 인터넷상에 전송해오는 과정에서
다운로드 받는 프로그램에 문제가 없다는 이야기다.

실습> Hash 비교하기

Hash는 주로 무결성을 체크할 때 사용한다. (/etc/shadow 비밀번호)
참고로 인증서에 해시값이 들어간다.

https://netcat.sourceforge.net/signatures/md5sums.txt
http://netcat.sourceforge.net/
088def25efe04dcdd1f8369d8926ab34 netcat-0.7.1.tar.gz <-- 원본의 해시값
0a29eff1736ddb5effd0b1ec1f6fe0ef netcat-0.7.1.tar.bz2
a0d2432cbcb38f026b51b1387cd0034d netcat-0.7.1-1.i386.rpm
b65a1d444df4eff048983ad539d81f01 netcat-0.7.1-1.src.rpm

#wget http://sourceforge.net/projects/netcat/files/netcat/0.7.1/netcat-0.7.1.tar.gz --no-check-certificate
#md5sum netcat-0.7.1.tar.gz
088def25efe04dcdd1f8369d8926ab34 netcat-0.7.1.tar.gz

대칭키 (Symmetric Key)
-대칭키(=비밀키) 암호화
-암호화 및 복호화에 동일한 키를 사용하는 암호화 기법 (암호화키 == 복호화키)
-1회용 대칭키 -> Session Key

대칭 암호화의 문제점
-확장성
암호화 통신에 참여하는 멤버가 증가 할수록 필요한 키가 많아진다.
예를 들어서 10,000명과 통신하기 위해서는 10,000개의 키가 필요하고 10,000개의 키를 관리, 운영, 보관해야 하므로 Key 관리에 어려움이 있다.

-Key 동기화
대칭 암호화 이전에 반드시 대칭키를 공유하는 과정(Key 동기화)이 필요하다.
제일 문제점은 어떻게 이 키값을 안전하게 상대방에게 전달해줄 것인가 하는 것이다.
핵심 포인트는 안전하게 전달!!!

-Key 동기화의 문제점 해결
Off Line
Diffie-Hellman
비대칭 암호화

영희에게 철수 알고리즘과 Key 1111 을 어떻게 전달해야 할 것인가?


       1251 ?
철수 ----------> 영희
    (암호문 전송) <-- 도청을 당해서 알고리즘과 키를 모르면 무슨 말인지 알 수 없음.

실습> AES 암호화/복호화 온라인으로 사용하기

https://cafe.naver.com/linuxmasternet/1974

profile
정보보안 전문가

0개의 댓글