SSL
오늘은 사설 인증서를 실습해 볼 것이다.
공인인증서 -신뢰할 수 있는 기관이 발급
사설인증서 - 본인 스스로 생성해서 사용 (신뢰할 수 없는 인증서라고 경고가 뜬다)
대칭키 방식의 문제점
암호화 종류가 많아지면 키가 엄청 많아질 것이다 -> 키 관리의 문제
중간에 해커가 탈취, 변조하지 못하게 키를 전달해야 한다 -> 키 전달의 문제
전자 서명 원리
Client가 보낸 보안 데이터가 진짜 Client가 보낸 것인 지 확인하는 것이 목적.
전송하는 데이터의 해쉬값을 계산한 뒤,
해쉬화된 데이터를 개인키로 암호화 하여 인증기관에 전송한다.
인증 기관에선 개인키의 해쉬 값을 공개키로 복호화 해서 확인한 뒤,
해쉬 값이 원본과 완벽히 동일한 지 확인하고,
동일하면 인증을 하는 과정이다.
즉, 해쉬 값만 비교하는 것이기 때문에 원본(데이터)의 내용 자체는 공개키로 복호화 해서 확인하는 것이 불가능 하다.
인증서 위치
Windows는 인터넷 옵션에서 다음과 같은 위치에서 인증서를 확인할 수 있다.
<< 평문 전송 WireShark >>
리눅스 FTP 구성
구성 방법은 예전 글을 참조하라 (생략)
windows 10에서 접속 가능 확인
미리 윈도우 바탕화면에 1.png 를 마련해서 리눅스 a 계정 홈디렉터리에 올려준다.
(1.png 속성의 위치를 복사해왔다)
put C:\Users\Administrator\Desktop\1.png /home/a/1.png
리눅스 쪽에서는 접근권한을 준다.
와이어 샤크를 켜고 다시 1.png 파일을 윈도우 쪽으로 get
아래와 같은 빨간 박스는 노출되면 안되는 중요한 정보들이다.
아이디와 패스워드, 그리고 통신방법과, 파일의 위치 등등이 다 노출되고 있다.
아래 get 전송 요청 승인 이후로 이미지 파일에 대한 내용을 전송받는 내용들이 이어진다.
여기서 이미지도 떠 보는게 가능하다.
아래와 같이 이미지 파일이 전송되는 패킷이 코드로 나오고 있다.
PNG 파일이라는 것도 다 노출이 되어있는 상태다.
이렇게 암호화 되지 않은 패킷은 다시 원본(이미지)으로 변환할 수도 있다!
아래 show data as 옵션에서 RAW 를 선택하면 16진수로 표현해 준다.
-> hex editor 로 hex 코드를 확인하여 원래 파일로 재구성이 가능하다.
포렌식 프루프
forensic-proof.com/archives/323
에서 이미지 파일에 대한 hex코드와 대조해 본다.
그러면 전송되고 있는 파일의 이미지가 어떤 확장자인지 알아낼 수 있다!
이에 대한 글은 Hex editor 게시글을 참조하라.
<<Linux SSL 사설 인증서 발급 >>
이제 리눅스 FTP 서버쪽에서 SSL 인증서를 발급하여 암호화된 통신을 할 것이다.
설치
# yum install -y openssl
개인키 생성
# openssl genrsa -out ca.key 2048
openssl을 가지고 rsa 방식으로 생성해서 ca.key라는 이름으로 내보낸다. 길이는 2048다.
# cat ca.key
확인
인증 요청서 생성
ca.csr은 이름 맘대로 지어도 된다.
도시나 회사 이름, 호스트, 이메일 등을 적어서 만들게 된다.
원래 공식적인 상황이라면 제대로 적어 내야 인증 요청이 받아들여 지겠지만, 지금은 사설이니까 임의로 한다.
# openssl req -new -key ca.key -out ca.csr
# cat ca.csr
확인
마지막으로 생성한 두 개를 가지고 인증서를 만들어 내면 된다.
365일간 유효하게 한다.
# openssl x509 -req -days 365 -in ca.csr -signkey ca.key -out ca.crt
인증서와 키는 특정하게 정해진 위치에 존재하는 것이 관리상 좋다.
본래 있어야 할 위치에 복사해서 넣어놓는다.
# cp ca.key /etc/pki/tls/private
# cp ca.crt /etc/pki/tls/certs
FTP에 ssl 설정 추가
위와 같은 노출들을 막기 위해 SSL을 사용하겠다.
# vi /etc/vsftpd/vsftpd.conf
FTP 설정을 다시 만진다.
아래와 같이 tlsv1로 통신하도록 골라준다. (사실 네 가지 중에 v3이 제일 안전하다고 한다)
ssl_enable=YES
rsa_cert_file=/etc/pki/tls/certs/ca.crt
rsa_private_key_file=/etc/pki/tls/private/ca.key
ssl_tlsv1=YES
# systemctl restart vsftpd
다음과 같이 잘 되던 FTP가 안된다.
이 이유는 cmd 창에서는 ssl 서비스를 제공하고 있지 않아서다.
확인은 예전 FTP 구성 글에서 설치해놨던 FileZilla로 해봐야 한다.
와이어 샤크를 켠 다음
FileZilla로 다음과 같이 FTP 서버에 접속해보자
아래의 리눅스에 있는 shr 파일을 드래그 해서 다운로드 해보자.
와이어 샤크를 멈추고 확인해 보자.
아까의 평문과는 다르게 최초의FTP 시작 이후 내가 설정했던 TLSv1 버전의 프로토콜로 통신이 되고있다.
더이상 아이디랑 패스워드가 노출되지 않고 무슨 파일을 다운로드 하고 있는지도 뜨지 않는다.
Data도 Application Data라고 나온다.
인증서에 기본으로 입력했던 지역등등 의 정보만 보인다.
인증서 삭제
rm -f /etc/pki/tls/certs/ca.crt
rm -f /etc/pki/tls/private/ca.key
'Linux' 카테고리의 다른 글
SSL (mail) (0) | 2022.12.06 |
---|---|
SSL (http) (0) | 2022.12.06 |
yum 중간에 트렌젝션 문제 생긴것 해결 (0) | 2022.11.17 |
NFS (0) | 2022.11.17 |
Mail Server 만들기 (0) | 2022.11.16 |