hann-blume
Linux - SSL/암호화 본문
( 이 작업은 초기설정으로 스냅샷을 돌리고 시작한다.
돌린후 사전 작업
# yum -y install httpd-*
# yum -y install bind-*
# firewall-cmd --permanent --add-service=http
# firewall-cmd --permanent --add-service=dns
# firewall-cmd --permanent --add-port=443/tcp
# firewall-cmd --reload )
암호화란?
사람이 인식할 수 있는 문자를 읽기 힘든 기호나 다른 뜻을 가진
문자 형태로 변환하여 내용을 보호하는 것.
복호화란?
암호화된 내용을 다시 사람이 인식할 수 있는 문자로 돌려 놓는 것.
대칭키(비밀키) 알고리즘
암호화하는 키와 복호화하는 키가 동일한 것으로, 사전에 비밀키를 서로 공유하여 사용하는 방식.
장점 - 쌍방이 같은 비밀키를 사용하므로 리소스 소모량이 적다.
단점 - 키 교환 도중 노출의 위험이 있으므로 키 교환에 어려움이 많다.
다수와 통신을 하게 된다면 모두 같은 키를 사용하면 안되기 때문에 키가 많아져 관리가 어렵다.
비 대칭키(공개키) 알고리즘
수학적 알고리즘을 통해 암호화를 위한 키와 복호화를 위한 키를 따로가지는 암호 알고리즘이다.
장점 - 대칭키 알고리즘의 단점을 보완하고, 더 안전한 암호화가 가능하다.
단점 - 쌍방이 서로 다른 개인키를 사용하므로 리소스 소모량이 많아지고, 리소스가 쌓이면서 통신의 속도가 저하될 수 있다.
[ RSA ] - 비 대칭키 통신에 이용
- 매우 큰 수를 소인수분해 계산법을 사용해서 한 쌍의 키 값을 생성.
- 공개키(public key)와 개인키(private key)로 구성
키 교환 알고리즘
안전하게 비밀키를 공유하기 위한 방법
Key Wrapping 와 Diffie-Hellman 알고리즘이 있다.
[ Key Wrapping ]
대칭키(비밀키)를 안전하게 전송하기 위해 비 대칭 암호화 알고리즘을 사용하는 방식.
데이터 암호화에 사용할 대칭키를 임의적으로 생성하여,
서버의 공개키로 대칭키를 암호화한다.
즉 공개키,개인키,대칭키를 사용하게 된다.
이 개념을 확실히 이해해야한다.
공개키를 서로 알고있는 상태에서
공개키로 대칭키를 암호화하여 전송하고,
전송 받은 암호화된(공개키로 암호화된) 데이터(대칭키)를 개인키로 복호화하여 대칭키를 흭득.
여기서 해커가 공개키를 알고있다면 공개키로 암호화된 대칭키를 뺏은 후
공개키로 복호화하여
대칭키를 흭득 할 수 있다고 착각할 수 있는데
복호화는 공개키로 불가능하고, 개인키로만 가능하다.
즉, 개인키를 알지 못하면 공개키로 암호화된 대칭키를 뺏어도
공개키로 복호화가 불가능하다.
[ Diffie-Hellman ]
대칭키를 안전하게 송/수신자들에게 분배하는 알고리즘
실제 Key값은 전송하지 않고 Key를 생성하는데 필요한 값믄 전송한다.
인증 및 전자서명과 같은 기능은 제공할 수 없고, 비밀키 교환용도로만 사용할 수 있다.
[ 해시(Hash) 알고리즘 ]
같은 데이터를 같은 해시알고리즘으로 돌리면 항상 같은 결과가 나온다.
보안 프로토콜
[ SSL ]
Secure Socket Layer
넷스케이프사에서 전자상거래 등의 보안을 위해 개발된 프로토콜.
[ TLS ]
Transport Layer Security
SSL 3.0버전을 기초로 IETF에서 표준화하였다.
SSL와TLS의 기능
사이트 인증 (Site Authentication)
데이터 보호 (Data Privacy)
무결성 체크 (Data Intergirty)
[ SSL 구축 절차 ]
1. 인증서 제품 선택 |
2. WEB Server 구축 ( Apache ) |
3. WEB Server 개인키, CSR 요청서 생성 (회사정보,서버정보) |
4. CSR 요청서를 SSL 제공업체로 전달 + 결제 |
5. Site 인증서 발급 - WEB Server 업로드 작업 진행 |
6. WEB Server SSL 설정 진행 |
7. SSL Site 구축 완료 및 테스트 |
SSL 구축을 실습해보기 위해
먼저 DNS서버와 Apache 설정을 해주자.
DNS 구축은 아래 조건으로 한다.
www.hann.com / 192.168.131.100
따로 사진설명없이 진행하겠다.
# vi /etc/resolv.conf
nameserver 192.168.131.100 -> 추가
# vi /etc/named.conf
13 llisten-on port 53 { 127.0.0.1; }; -> { any; };
21 aallow-query { localhost; }; -> { any; };
33 recursion yes; -> no;
# vi /etc/named.rfc1912.zones
13~17번째줄
37~41번째줄
복사해서 맨 아래 줄에 붙여넣고 수정.
zone "hann.com" IN {
type master;
file "hann.zone";
allow-update { 192.168.131.100; };
allow-transfer { 192.168.131.100;};
};
zone "131.168.192.in-addr.arpa" IN {
type master;
file "hann.rev";
allow-update { 192.168.131.100; };
allow-transfer { 192.168.131.100; };
};
영역파일 만들기
# cd /var/named/
# cp named.localhost hann.zone
# cp named.localhost hann.rev
영역파일은 기본적으로 named가 소유하므로 소유권을 변경해준다
# chown .named hann.*
---------------
영역파일 생성/레코드 정의
# vi hann.zone
$TTL 1D
@ IN SOA ns1.hann.com. root(
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
IN NS ns1.hann.com.
ns1 IN A 192.168.131.100
www IN A 192.168.131.100
--------------
역방향 파일 생성
# vi hann.rev
$TTL 1D
@ IN SOA ns1.hann.com. root(
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
IN NS ns1.hann.com.
100 IN PTR ns1.hann.com.
100 IN PTR www.hann.com.
-------------
# systemctl restart named
# systemctl enable named
# firewall-cmd --reload
결과
nslookup 해서
www.hann.com
192.168.131.100
잘나와야한다.
여기 까지 DNS 끝
----------------------------------------------------------------
Apache 설정
# vi /etc/httpd/conf/httpd.conf
66번째 줄
User nobody
Group nobody
-------------
95번째 줄
주석 풀고
ServerName www.hann.com:80
-------------
119번째 줄부터.
DocumentRott 경로 수정해주고 아래쪽에 다지우고 이것만 남김.
DocumentRoot "/apache/test"
<Directory "/apache/test">
AllowOverride None
Require all granted
</Directory>
-------------
맨 아래줄에 다음 내용 추가
<VirtualHost *:80>
ServerName www.hann.com
Redirect "/" "https://www.hann.com/"
</VirtualHost>
# mkdir /apache
# mkdir /apache/test
# systemctl restart httpd
Apache 설정 끝
------------------------------------
자 여기까지 서버 구축이 끝났다.
본격적으로 SSL 실습을 해보자
모듈 설치
# yum -y install mod_ssl
# rpm -qa | grep mod_ssl
# rpm -qa | grep openssl
<개인키 만들기>
# openssl genrsa -out /etc/pki/tls/private/hann.key 2046
rsa를 이용한 개인키를 만들고
out옵션으로 저장할 위치는 /etc/pki/tls/private/
키의 이름은 hann.key
키의 길이는 2048bit
<인증요청서 만들기>
# openssl req -new -key /etc/pki/tls/private/hann.key -out /etc/pki/tls/private/hann.csr
새로운 인증요청서 만들기 req -new
인층요청서에 필요한 키의 위치 지정 -key /etc/pki/tls/private/hann.key
-out옵션으로 인증요청서 저장할 위치 -out /etc/pki/tls/private/hann.csr
Country Name (2 letter code) [XX]:KR
국가코드 KR
State or Province Name (full name) []:Seoul
도시 Seoul
Locality Name (eg, city) [Default City]:Gangnam
구 Gangnam
Organization Name (eg, company) [Default Company Ltd]:HANN
회사이름 HANN
Organizational Unit Name (eg, section) []:Cloud Team
부서이름 Cloud Team
Common Name (eg, your name or your server's hostname) []:www.hann.com
도메인 네임 www.hann.com
여기에서는 http://를 입력하지 않는다.
Email Address []:hann@hanns.com
관리자 이메일주소 hann@hanns.com
A challenge password []:
패스워드 입력은 하면안된다.
An optional company name []:
입력 안한다.
개인키를 잃어버리면 처음부터 다시해야하므로 백업작업
# mkdir /backup
# cp /etc/pki/tls/private/hann.* /backup
# ls -l /backup
합계 8
-rw-r--r-- 1 root root 1050 3월 22 22:47 hann.csr
-rw-r--r-- 1 root root 1671 3월 22 22:47 hann.key
<인증서 만들기>
# openssl x509 -req -days 365 -in /etc/pki/tls/private/hann.csr -signkey /etc/pki/tls/private/hann.key -out /etc/pki/tls/certs/hann.crt
사이트 인증서를 만들때 사용하는 값 x509
유효기간 -days 365
내가 가진 인증요청서로 만든다 -in /etc/pki/tls/private/hann.csr
내가 가진 키로 인증한다 -signkey /etc/pki/tls/private/hann.key
만들어진 인증서 저장위치 -out /etc/pki/tls/certs/hann.crt
백업
# cp /etc/pki/tls/certs/hann.crt /backup
# ls -l /etc/pki/tls/private
합계 12
-rw-r--r-- 1 root root 1050 3월 22 22:46 hann.csr
-rw-r--r-- 1 root root 1671 3월 22 22:45 hann.key
-rw------- 1 root root 1679 3월 22 22:40 localhost.key
# ls -l /etc/pki/tls/certs
★중요!!★
# vi /etc/httpd/conf.d/ssl.conf
56
<VirtualHost *:443>
443번을 모두 열어주겠다
으로 바꿔준다
59 DocumentRoot "/apache/test"
도큐먼트 경로
60 ServerName www.hann.com:443
100 SSLCertificateFile /etc/pki/tls/certs/hann.crt
인증서 위치명시
107 SSLCertificateKeyFile /etc/pki/tls/private/hann.key
개인키 위치명시
# mkdir -p /apache/test
# cat > /apache/test/index.html
Apache SSL WEB TEST!
# apachectl configtest
# systemctl start httpd
# systemctl enable httpd
# firewall-cmd --list-all
클라이언트(윈도우)
cmd - ping www.hann.com
했을때 통신 잘되야한다.
인터넷 주소창에
www.hann.com
"이 웹 사이트의 보안 인증서에 문제가 있습니다"
-> 정상적으로 인증서를 요청하여 만든 것이 아니기 때문에(우리 자체적으로 만들어서) 이렇게 나타난다.
이 웹 사이트를 계속 탐색합니다(권장하지 않음) 클릭
그리고 주소창에 https 로 되어있는거 확인.
///클라이언트 dns캐시삭제//
cmd - ipconfig /flushdns
여기까지 SSL/암호화 에 대한 설명이 끝났다.
'Linux' 카테고리의 다른 글
Linux - Apache / Web Server (0) | 2020.03.22 |
---|---|
Linux - DNS (Domain Name Server) (0) | 2020.03.22 |
Linux - ShellScript (0) | 2020.03.22 |
Linux - Cron / CronTab (0) | 2020.03.22 |
Linux - Backup (0) | 2020.03.22 |