Linux 17 (SSL)

다원·2023년 1월 30일
0
post-thumbnail
post-custom-banner

SSL

암호화된 연결 SCP, SSH, HTTPS 등에서 평문장 연결이 아닌 인증서 사용하여 연결
SSL 인증서는 클라이언트와 서버간의 통신을 제3자가 보증해주는 전자문서
인증서를 통해 신뢰할 수 있는 서버인지 판단이 가능, 통신 내용의 악의적인 변경을 방지하고 암호화되어 외부로부터 내용 노출X

SSL 인증서 특징

  • 서버가 인증서를 생성하여 각 웹 브라우저에 배포하여, 서버 인터페이스(소켓)으로 접속하는 클라이언트들을 인증해주는 모듈
  • 공적인 인증기관에서 발행한 인증서를 두고 클라이언트가 다운받아서 자신의 웹 브라우저에 넣어두고 접속
  • 인증서의 취약점으로 heartbleed
    SSL은 TCP층의 TLS 프로토콜을 사용하기 때문에 SSL을 TLS라고도 부름

SSL 인증서 파일 포맷 종류

.pem: 개인키, 서버인증서, 루트인증서, 체인인증서 및 SSL 발급 요청시 생성하는 CSR등에 사용되는 포맷 (pem 안에 인증서와 개인키가 존재)
.crt: Linux 인증서 파일임을 구분하기 위해서 사용
.cer: window 기반에서 인증서 파일임으로 구분하기 위해서 사용되는 확장자
.csr: SSL 발급 신청을 위해서 본 파일 내용을 인증기관에 제출하는 요청서 파일
.key: openssl 및 java에서 개인키 파일임을 구분하기 위해서 사용되는 확장자

인증서 내용

CN(Common Name)
O(Organization)
OU(Organizational Unit)
Fingerpints: 암호화 알고리즘
Period of Validity: 키의 유효기간

SSL과 https

https=http+SSL
https 상태에서는 통신 중에 패킷이 추출되어도 인증서의 키가 없으면 내용을 변경하지 못하거나 볼 수 없음
http로 접속하여도 https로 접속되는 것을 리다이렉트

SSL 인증서 생성

서버의 개인키와 공개키 생성 > 인증서 요청서(.csr) 생성
인증서(.crt) 생성 (or 개인키와 공개키 묶은 pem 생성)
웹브라우저 설정 파일에서 인증서(.crt) 등록
클라이언트 브라우저에 서버의 인증서 추가 후 사용

CRT 발급 방법

  • VeriSign과 같은 공인된 곳 CA로부터 crt 발급
    정식 도메인이 있어야 SSL 인증서를 발급 받을 수 있음 (start ssl)
    ~.csr 파일을 공인된 인증서 센터에 보내면 공인된 CRT 서명해서 만들어서 돌려줌
    비용이 다르며 CA에게서 서명된 인증서를 요청하기 전에 확인해둘 필요 있음
  • COMODO, letsencrypt startssl 등 일정 기간 test용으로 CA 얻을 수 있음
  • 사설 CRT 생성

클라이언트가 사설 웹 서버 접근 방법

  • 서버가 개인키와 공개키를 생성한 뒤 인증서 생성하여 클라이언트에게 인증서 공유
    클라이언트는 자신의 웹 브라우저에 인증서를 넣고 서버와 연결
  • 클라이언트가 개인키와 공개키를 생성한 뒤, 개인키는 자신이 소유하고, 서버에게 자신의 공개키 공유하여 연결하는 방법
  • 서버가 개인키와 공개키를 생성 한 뒤, 서버의 개인키는 서버가 소유하고 클라이언트에게 서버의 공개키를 보내서 연결하는 방법

사설 웹서버 생성 및 사설 CRT 이용

yum -y install open_ssl mod_ssl httpd httpd-tools

사설 인증서 생성 및 등록

1024 길이의 www.kahn.edu.key의 개인키를 생성

인증서 요청서(csr) 생성
-day 365: 일년마다 키를 갱신
-key: 사설 서버의 키 사용

x509: 사설 인증서(crt) 생성

서버에서 공개키와 개인키, 인증 요청서와 인증서 확인

생성된 .crt 파일 확인

모든 인증서와 키 등은 실행파일로 변경

httpd.conf 파일에 인증서 설정

ssl.conf파일에서 인증서 설정

File system 암호화

디지털 인증서와 SSL 사용한 암호화 된 채널인 캡슐화 네트워크(터널) 트래픽 안전하게 전송해서 전송 정보가 외부로 유출되지 않도록하는 법

침입감지와 침입예방

  • 인증 프로세스
    : 공개키 암호화를 수행해서 유일한 이름으로 증명해주는 인증서를 생성하는 일련의 과정
  • 유일한 이름
    : 웹 상에서 구별되는 이름, 어느것도 될 수 있지만 보통 서버머신의 FQDN으로 사용
  • CA
    : 디지털 인증서를 발급해주는 주체, 신뢰 관계의 써드파티도 될 수 있음 Linux에서는 X.509 표준
  • 전자 인증서
    : CA가 발급한것으로, 해당 인증서의주체가 공유키의 소유자임을 증명해주는 증서
    root 인증 하나를 생성한 뒤 다른 모든 인증서를 서명해서 인증하는 구조, 인증서는 어느 도메인의 인증서들을 서명할 때 사용되는 메인 CA가 가지고 있는 특수 인증서에 의해서 서명 받지 않은 사용자도 ROOT 서명한 인증서는 전적으로 신뢰,
  • 전자 서명
    : 전자적으로 인증해주는 것, ASC 확장자

디지털 인증서

네트워크 서비스를 안전하게 해두는 일반적인 방법
TLS 대부분 네트워크 패킷 전송에 사용되는 TCP 프로토콜에 많은 보안 기법을 제공해서 데이터 송수신시 클라이언트와 서버의 상호인증 활용
대부분 조직에서는 모든 인증서 생성과 요청을 처리할 리포지터리 레벨의 머신 지정 후 인증서를 필요로 하는 서버 서비스 데몬들에게 저장소에서 인증서를 복사해가도록 구성해서 운영
인증서는 공개키로 확인 가능

대부분의 인증서는 매해 혹은 특정 숫자 년도에 인증서를 생성하도록 디렉터리 구조를 만들어서 운영 (/srv/cert/년도)
이 디렉터리를 읽거나 작성할 경우 오직 인증받은 사용자들만 작업할 수 있도록 파일 권한설정, 특히 개인 사설키 파일관리에 주의 필요
root 사용자가 인증서 관리 작업을 하지 않을 경우 인증서 관리를 위한 별도의 그룹 생성 및 권한 부여하여 운영

제약을 없앤 인증서를 범용인증서 (Wild CRT)

https 프로토콜은 하나의 서버 호스트에 여러 https 사이트를 운영한다면 각 도메인 명마다 고유한 IP주소를 가지고 있고 대부분 상업 CA가 하나의 서버에서 실행되는 여러 https 인증서를 통합해서 지원하지 않기 때문에 이런 제약을 없앤 인증서 범용인증서

단일 인증서에 여러 도메인명 추가하여 도메인 별로 IP주소를 가지고 있지 않아도 각 도메인의 CRT를 제공할 수 있는 기법
아직까지 표준화된 모듈은 없으며, 각 브라우저는 각 도메인_명을 일일이 인식하거나 와일드 문자로 인식하는 두가지 이름 포맷을 가지고 있음

x.509의 subjectAltName 확장자를 사용하면 브라우저별로 지원되는 확장자가 다를 때 유용하게 쓰일 수 있음
openSSL 여러 도메인_명 지정해서 범용 CRT를 생성하기 위한 CSR을 생성한다면
/etc/pki/tls/openssl.conf에 이 값들을 저장해놓으면 됨
일부 브라우저에서는 이름의 순서도 중요하니 여러 종류의 구성 파일을 작성해 두고 적용
여러개의 commeName을 여러 개 설정하여 확장 시킴

Ubuntu 서버 crt 생성

centos와 동일한 방법이긴 하나, 한줄의 명령어로 처리한다는 장점이 잇음
키를 이용하여 인증 요청서 생성

인증 요청서와 키를 기반으로 인증서 생성

http service 설정파일에 SSL 인증서에 대한 설정 적용

profile
공부일지,
post-custom-banner

0개의 댓글