네트워크 환경은 아래와 같다. SlpunkServer에 NTP 서버, 클라이언트 NTP : ZeekIDS, WebServer, Sysmon.
대칭키, 비대칭키는 CentOS7 터미널에서 진행했다.
openssl enc -e -des3 -salt -in P1.txt -out P2.bin
이때, 사용자에게 비밀번호를 요구한다. 1234 입력해 암호화를 진행시켜준다.
사용자에게 비밀번호를 요구한다. 이전 암호문 생성에서 사용한 비밀번호를 입력해 복호화 진행시킨 후 확인하면 복호화된 PlainText 확인 가능.
openssl genrsa -out private.pem 2048 // 2048은 키 길이
openssl rsa -in private.pem -out public.pem -outform PEM -pubout
openssl rsautl -encrypt -inkey public.pem -pubin -in P1.txt -out P4.ssl
비대칭 암호화방식에서 공개키는 인증서에 담겨 전송된다.
암호화는 기밀성, 신뢰성(인증), 무결성의 역할을 요구하고, 이를 보통 Key를 이용한 암호화 기술로 해결한다.
해시 : 하나의 문자열을 짧은 길이의 값 또는 키로 변환하는 과정
MD2, MD4, MD5(MD4 확장판, 속도가 MD4에 비해 빠르진 않지만 보안성에 더 중점)
160비트의 값을 생성하는 해시 함수, MD4발전형
MD5보다 느리지만 더 안전하다.
Alice는 원본 데이터에 해시 후 Digest 생성한다. 그리고 전자서명한다.
Alice는 원본 데이터, 전자서명을 전송한다.
Bob은 전자서명을 Alice 공개키를 사용해 Digest 획득
Bob은 원본 데이터를 해시해 Digest를 생성한다.
3,4에서 획득한 Digest를 비교해 무결성을 확인한다.
인증서 ==> 공개키 배포, 해시알고리즘(전자서명)으로 생성한다.
SSL/TSL : 웹 브라우저 탑재된 응용계층 보호 목적 프로토콜
TLS 프로토콜은 SSL 프로토콜 사용할 수 있도록 구성한다.
SSL(Secure Socket Layer) : 응용계층을 보호하는 프로토콜
TLS(Transport Layer Secure) : 전송 상위계층에서 동작해 응용계층 암호화. HTTP 패킷 보호 목적으로 사용.
OSI 7계층 중, 7계층인 애플리케이션 계층, 그리고 4계층에서 해당 프로토콜과 연관. (4계층에서 동작, 7게층에서 상호작용 존재)
만약 2번에서 인증서에 문제가 있다면, (인증서 유효성 검사 결과 부적절 -> 인증서 기간 만료, 유효하지 않음)
또는, 자체 발급 인증서는 인증서를 검증할 수 없어 해당 페이지가 나올 수 있다.
ROOT CA기관은 자체 발급한 인증서를 사용 가능하다.
(크롬 브라우저 - 설정 - 인증서 관리 - 인증서 - 신뢰할 수 있는 루트 인증 기관 - COMODO 인증서 확인)
ROOT CA기관에서 발급한 인증서들을 웹브라우저 회사에 전달한다. 이후 사용자가 특정 웹브라우저를 다운로드 받으면, 해당 인증서도 함께 전달받는다.
아래 사진과 같이, 2,3번 사이에 사용자가 접속하려는 웹 서버는 CA에게 인증서를 발급해 심사받는다. 이후 심사가 통과된 인증서를 클라이언트가 웹 서버에 접속 시, 인증서를 발급해 클라이언트가 유효성을 확인하게 한다.
따라서 인증서는 웹 서버와 클라이언트의 안전한 연결을 위한 용도이다.
인증서가 유효하지 않더라도, 데이터 암호화는 별개로 진행되어 전송된다.
4. 이후 클라이언트가 전송하는 데이터(비밀번호, 계좌정보 등..)는 대칭키로 암호화 해 전송하고, 이를 웹 서버가 대칭키를 사용해 검증하고 상용한다.
CentOS7에서 HTTP Server로 사용한다.
패키지 설치
# yum install –y httpd
# rpm –qa | grep httpd
패키지 버전 확인
# httpd –v
openssl 패키지 설치
# yum –y install openssl-*
# rpm –qa |grep openssl
mod_ssl 모듈 확인
httpd -l 결과 mod_ssl.so 파일이 존재하지 않는다. 아래 사진처럼 조회되지 않는다고 가정할때, 아래와 같이 진행해준다.
# rpm –qa |grep mod_ssl
#yum –y install mod_ssl*
#ls /etc/httdp/modules/mod_ssl.so
이후 아래와 같은 파일이 존재하면 된다.
# vi /etc/httpd/conf/httpd.conf
httpd.conf 파일 119번째 줄을 확인 후, index.html 파일을 생성하자.
# vi /var/www/html/index.html
iptables 를 설치한다.
yum install iptables-services
iptables에 규칙을 추가하고, iptables 저장 및 재기동
#iptables –I INPUT –m state --state NEW, ESTABLISHED –p tcp --dport 80 -j ACCEPT
#service iptables save
#service iptables start
#service httpd start
클라이언트에서 추가한 HTML 파일을 확인해 보자.
Winodws10에서 아래 경로를 추가해주자.
C:\>windows>system32>drivers>etc>hosts
인터넷 브라우저에서 웹 서버에 접속하면 아래와 같이 접속된다.
이는 HTTP 접속이다. HTTPS 접속으로 변경해보자.
CentOS7에서 HTTPS Server를 구성해보자.
#cd /etc/pki/tls/certs
#openssl genrsa –out www.open.net.key 2048
#openssl x509 –in www.open.net.csr –out www.open.net.crt –req –signkey www.open.net.key –days 365
#ls –l www.open.net.* # 설치 파일 확인
# vi /etc/httpd/conf.d/ssl.conf
아래 사진과 같이 수정한다.
iptables -I INPUT -m state --state NEW,ESTABLISHED -p tcp --dport 443 -j ACCEPT
iptables -L # HTTPS 확인
service iptables save
service iptables restart
HTTPS에 추가되으므로 방화벽을 설정하고, 서비스를 활성화시키자.
#service httpd restart
MicroEdge 브라우저로 https://www.open.net 으로 접속해보자.
안전하지 않음으로 접속 후, (안전하지 않음)을 클릭하고, 인증서 모양 아이콘을 눌러 세부정보에 들어가 인증서를 내보내자.
바탕화면으로 인증서를 내보내고, 인증서 아이콘을 눌러 인증서를 설치
신뢰할 수 있는 루트 인증기관으로 인증서를 설치한다.
Microsoft Edge 브라우저에서 설정 - IE 검색 후 아래로 스크롤
아래 사진과 같이 설정을 변경해주고, Internet Exploerer 모드에서 다시 로드하기 버튼을 누르면 새로 Microsoft Edge 브라우저가 생성되고, 해당 브라우저의 URL 입력창에서 https:www.open.net을 열면 안전하지 않음이 사라진다.
왜 IE를 사용해야 할까?
나는 이게 직접 생성한 인증서(루트기관이 아니지만 루트기관인증서라고 설치)가 브라우저마다 추가적인 검증 로직이 있어 비교적 구형 브라우저인 IE에서는 열린다고 생각했다.
#참고
HTTPS 구성
1. HTTP 설치 ==> http://www.open.net
1) rpm -qa | grep httpd
2) cd /var/www/httpd
nano index.html
3) 방화벽 설정 (80 개방) 후 활성화
iptables –I INPUT –m state --state NEW, ESTABLISHED –p tcp --dport 80 -j ACCEPT
service iptables save
service iptables start
4) 웹서비스 활성화 service httpd start
5) http://www.open.net
[W10] /windows/system32/driver/etc/hosts
192.168.10.30 www.open.net
2. 인증서 생성
인증서 생성 위치
cd /etc/pki/tls/certs
키생성 : openssl genrsa –out www.open.net.key 2048
인증요청서 : openssl req –new –key www.open.net.key -out www.open.net.csr
인증서생성 : openssl x509 –in www.open.net.csr –out www.open.net.crt –req –signkey www.open.net.key –days 365
3. ssl.conf에 인증서와 키를 매핑
/etc/httpd/conf.d/ssl.conf
- SSLCertificateFile /etc/pki/tls/certs/www.open.net.crt
- SSLCertificateKeyFile /etc/pki/tls/certs/www.open.net.key
4. https 방화벽 활성화
iptables –I INPUT –m state --state NEW, ESTABLISHED –p tcp --dport 443 -j ACCEPT
service iptables save
service iptables restart
5. 서비스 개시
service httpd restart
6. https://www.open.net
==> 자체 발급 인증서를 생성, 인증서 유효성 검사에서 문제 발생
==> 자체 발급 인증서를 '신뢰할수 있는 루트인증기관'에 import