- 이번 포스팅은 SSL에 대해 알아볼 것이다. SSL은 웹사이트와 브라우저 사이(또는 두 서버 사이)에 전송되는 데이터를 암호화하여 인터넷 연결을 보호하기 위한 표준 기술이다. 즉 암호화 기반 인터넷 보안 프로토콜이다. SSL를 사용하는 웹사이트는 URL에 HTTP 대신 'HTTPS'를 사용한다. SSL의 경우 SSL의 인증서가 있는 사이트만 실행 할 수 있다. SSL 인증서는 웹사이트나 애플리케이션 서버가 웹에 저장하고 표시한다.
1. 개인키를 만든다
2. 개인키를 이용하여 인증 요청서를 만든다.
3. 개인키와 인증 요청서를 가지고 인증서를 만들어 낸다.
- linux
- ssl을 사용하기 위해 해당 패키지를 설치한다. openssl
- 개인키를 우선 만든다. openssl genrsa -out ca.key 2048,
genrsa는 암호화 방식을 뜻하고, -out은 내보낼 곳을 지정한다.
- 다음과 같이 개인키가 생성된 것을 확인 할 수 있다.
- 다음으로 인증 요청서를 만든다. 인증 요청서는 인증서를 만들 때만 필요하다.
openssl req -new -key ca.key -out ca.csr
req : 요청
-new : 새로운 요청
-key : 어떤 키를 사용할 것인가
-out : 내보낼 곳을 지정한다.
다음과 같이 ca.key를 가지고 ca.csr 인증 요청서를 생성한다.
아래 인증 요청서에 들어갈 여러가지 정보를 입력한다.
- 인증 요청서가 생성된 것을 확인 할 수 있다.
- 개인키와 인증 요청서를 가지고 인증서를 생성 할 것이다.
openssl x509 -req -days 365 -in ca.csr -signkey ca.key -out ca.crt
x509 : 인증서의 표준 방식
-days : 인증서의 유효기간
-in : 인증 요청서명 기입
-signkey : 개인키명 기입
- 인증서도 마찬가지로 제대로 생성되었는지 확인한다.
- 개인키와 인증서는 지정된 경로가 있기 때문에 해당 경로로 복사해서 넣어준다.
개인키 : /etc/pki/tls/private/
인증서 : /etc/pki/tls/certs/
- 인증서가 필요한 서버에 전부 지정된 경로로 인증서 및 개인키를 복사 해준다.
- Windows
- wireshark라는 패킷 캡쳐 프로그램을 이용하여 패킷의 흐름 및 SSL이 적용되었는지 확인 해 볼 것이다.
- 다음과 같이 wireshark를 설치해준다.
- 처음 wireshark를 실행시키게 되면 다음과 같이 현재 연결되어 있는 네트워크를 선택 할 수 있다.
- FTP 클라이언트에 해당하는 FileZilla 프로그램을 이용하여 파일을 주고 받아 볼 것이다.
- 해당 사진 파일을 주고 받아 볼 것이다.
- windows 환경 -> 리눅스 ftp 서버로 파일을 전송한다.
- wireshark 프로그램을 통해 파일이 전송에 대한 패킷 흐름을 확인 할 수 있다. 10.0.0.13 서버와 10.0.0.111 서버가 통신을 한 것을 알 수 있다.
- 프레임, 이더넷 , IP, TCP의 데이터 값들을 확인 할 수 있다.
- 또한 다음과 같이 TCP Stream이라는 TCP 흐름 추적이 가능한 기능이 있다.
- 파란색은 서버의 응답 빨간색은 클라이언트의 요청을 뜻한다. 다음과 같이 서버와 클라이언트가 요청과 응답을 주고 받은 것을 알 수 있다.
- 계속되는 패킷이 업데이트 되기 때문에 편의를 위해 wireshark를 멈추고 현재까지의 패킷 흐름을 저장한다.
또 파일을 저장할 때 tcpdump 형식으로 파일을 저장하게 되면 추후에 리눅스에 내장된 패킷 흐름 확인 프로그램에서도 사용 할 수 있다.
- ftp-data를 확인하기 위해 해당 이름을 작성하여 검색한다.
- 여러 패킷 중 하나를 선택하게 되면 데이터가 보이게 되고 해당 데이터를 위와 같이 데이터를 Raw 형식 즉 원시 데이터로 변경하고 저장한다.
- 원시 코드를 16진수로 해석 가능하게 하는 프로그램이다. 위에서 저장한 원시코드 파일을 해석하기 위해 설치해준다.
- 위와 같이 hex edit 파일을 설치하고 실행 시켜준다.
- 위에서 원시 코드로 변형한 파일을 hex edit 프로그램에 드래그해서 집어 넣는다.
- 다음과 같이 데이터가 들어간 것을 확인한 뒤
- 확장자를 png로 변경하여 저장해준다.
- 저장한 파일을 확인하게 되면 다음과 같이 위에 우리가 전송한 파일을 확인 할 수 있다.
- 위에서 생성한 인증서를 가지고 FTP를 암호화 하는 작업을 해볼 것이다.
- 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 : ssl_tls 버전을 설정
- filezilla를 재실행 한 다음 연결을 해보면 다음과 같이 인증서를 통한 서버 접속을 확인하는 화면을 볼 수 있다.
종단간 신뢰성 확보가 안된다. -> 사설 인증서이기 때문이다. 인증서의 내용은 나오며 암호화가 안되진 않는다. 신뢰성 확보만 힘들뿐이다.
- 위에서 주고 받았던 사진 파일을 이름을 변경하여 똑같이 windows -> 리눅스 ftp 서버로 전송한다.
- TCP Stream을 확인해보면 이전에는 서버와 클라이언트의 요청 응답 내용을 확인 할 수 있었지만 현재는 인증서를 통해 암호화 되었기 때문에 확인 할 수 없는 것을 볼 수 있다.
- HTTP, WEB에서의 인증서 사용
- 위의 사진 파일을 사용할 것이다.
https://insoobaik.tistory.com/101
- HTTP, WEB 작업이 되어있는 리눅스 서버에 해당 이미지 파일을 전송한다.
- 리눅스에서 생성한 웹 페이지 설정 파일에 해당 이미지 파일을 추가해준다.
- 웹 페이로 이동하게 되면 다음과 같이 이미지 파일이 뜨는 것을 확인할 수 있다.
- FTP에서와 마찬가지로 HTTP 또한 검색을 통해 HTTP의 패킷 흐름만 볼 수 있고 확인해보면 다음과 같이 HTTP 서버와 클라이언트가 요청과 응답을 주고 받은 것을 확인 할 수 있다.
- HTTP의 경우 원시 데이터 해석 필요없이 주고 받은 패킷에 포함되어 있는 이미지 파일을 바로 저장해서 확인하게 되면 다음과 같이 이미지 파일을 볼 수 있다.
- HTTP, WEB 인증서를 통한 암호화 작업
- ssl을 사용하기 위해 HTTP 서버가 설치된 리눅스 서버에 전부 mod_ssl 패키지를 설치해준다.
- ssl 설정과 관련된 파일 /etc/httpd/conf.d/ssl.conf 파일에서 인증서 사용을 위한 설정을 몇가지 수정해준다.
- 인증서 파일 경로, 개인키 파일 경로를 지정해준다. 이전에 사용자가 직접 키를 생성하고 인증서 및 개인키를 저장한 경로를 지정해주면 된다.
- 변경된 설정을 저장하고 적용하기 위해 시스템 재시작 및 ssl을 WEB에서 사용하기 위해 해당 방화벽을 열어준다. 참고로 443은 HTTPS에 해당하는 포트이고 HTTPS는 인증서를 통한 인증을 통해 접속 할 수 있다.
- 나머지 HTTP 서버가 존재하는 리눅스 서버도 똑같이 작업해준다.
- 사설 인증서는 신뢰성이 없기 때문에 해당 웹페이지가 이용자가 안전하지 않음을 인지하고 있음을 확인하는 버튼을 클릭해야 해당 웹 페이지로 이동 할 수 있다.
위와 같이 https를 통한 웹 페이지 접근도 가능한 것을 확인 할 수 있다.
- HTTP 또한 TCP Stream을 통해 패킷 데이터를 확인해보면 다음과 같이 암호화 되어 내용을 알 수 없는 형태로 바뀐 것을 볼 수 있다.
'Programming > Linux' 카테고리의 다른 글
Linux - DNS (windows - 설정 확인) (0) | 2022.04.07 |
---|---|
Linux - HTTP (0) | 2022.04.07 |
Linux - SSH (개인키, 공개키 2) (0) | 2022.04.04 |
Linux - MAC 필터링 (0) | 2022.03.30 |
Linux - DHCP (IP주소 예약 기능) (0) | 2022.03.30 |