2022이전/Linux
SSL 기초 개념
바로퇴장
2021. 8. 11. 09:22
용어 이해하기
- 암호를 만드는 행위 암호화
- 암호화에 사용되는 비밀번호 = 키(key)
- 암호를 푸는 행위 복호화
대칭키
동일한 키로 암호화 복호화를 같이 할 수 있는 방식
ex)
암호화 : A ⇒ 1234
⇒ A`
복호화 : A⇒
1234` ⇒ A
실습코드
echo 'this is the plain text' > plaintext.txt;
openssl enc -e -des3 -salt -in plaintext.txt -out ciphertext.bin;
- enc -e -des3 : des3 방식으로 암호화 함
- in plaintext.txt -out ciphertext.bin : plaintext.txt 파일을 암호화 한 결과를 ciphertext.bin 파일에 저장함
openssl enc -d -des3 -in ciphertext.bin -out plaintext2.txt;
- enc -d 옵션으로 인해서 ciphertext.bin 파일을 plaintext2.txt 파일로 복호화
공개키
공개키(public key) : 공개키를 통해 암호화 가능 / 서버로 부터 받음
비공개키(private key) : 비공개키를 통해 복호화 가능 / 서버만 소유
실습코드
openssl genrsa -out private.pem 1024;
- 1024bit 길이의 비공개키생성
openssl rsa -in private.pem -out public.pem -outform PEM -pubout;
- private.pem 기반의 public.pem 공개키 생성
echo 'coding everybody' > file.txt
openssl rsautl -encrypt -inkey public.pem -pubin -in file.txt -out file.ssl;
- file.txt를 공개키로 암호화 & file.ssl 암호화된 파일 생성
openssl rsautl -decrypt -inkey private.pem -in file.ssl -out decrypted.txt
- file.ssl 암호화된 파일 private.pem을 이용하여 복호화
SSL 인증서
CA (certificate authority)
공인된 기업이 인증서 증명하는 기관
사설 인증기관
사설에서 인증서 증명 / 인터넷에서 확인 안됨
SSL 인증서 내용
- 서버시의 정보 (인증서를 발급한 CA, 서비스의 도메인 등등)
- 서버 측 공개키 (공개키의 내용, 공개키의 암호화 방법)
실제 대이터 : 대칭키
대칭키의 키 : 공개키
악수 ⇒ 전송 ⇒ 세션종료
1. 악수 (handshake)
인사 할때마다 공개키 주고
- SSL 인증서를 주고 받는다.
- 비공개키를 사용하기에는 부하가 커서 사용 x
- 공개키와 대칭기 혼합한 방법
클라이언트 ⇒ 서버
- 랜덤 데이터 주기(암호화 방식 확인)
- 세션 아이디 (기존 연결 이용)
서버 ⇒ 클라이언트
- 랜덤 데이터 주기(암호화 방식 확인)
- 인증서 전달(클라이언트 내장된 CA의 공개키 용하여 인증서 복호화 및 확인)
랜덤 데이터 :
- 조합하여 pre master secret 라는 키 생성(대칭키 이용)
- 클라이언트 ⇒ 서버 : pre master secret 서버의 공개키(인증서에 포함)로 암호화 전송
- 서버 : 암호화된 pre master secret 을 자신의 비공개키로 복호화
- 일련의 과정을 통해 pre master secret ⇒ master secret 값으로 만든다.
- master secret는 session key를 생성하고 이를 대칭키 방식으로 이용
2. 세션(session key)
앞서 말한 방식으로 생긴 session key를 대칭키로 이용하여 데이터를 주고 받는다.
3. 세션 종료
session key를 폐기한다.
인증서의 활용
CA 관리 기관을 통해 발급
ssl.key : 서버쪽 비공개키
ssl.crt : 디지털 인증서
ca.pem : ROOT CA 인증서
sub.class1.server.ca.pem : 중계자 인증서
실습코드
powershell
sudo apt-get install apache2;
sudo a2enmod ssl
sudo service apache2 restart
sudo mkdir /etc/apache2/ssl
/etc/apache2/ssl/ca.pem
/etc/apache2/ssl/ssl.crt
/etc/apache2/ssl/ssl.key
/etc/apache2/ssl/sub.class1.server.ca.pem
sudo chown -R root:root /etc/apache2/ssl;
sudo chmod 600 /etc/apache2/ssl/*.*
sudo chmod 700 /etc/apache2/ssl;
sudo nano /etc/apache2/sites-available/default-ssl
SSLCertificateFile /etc/apache2/ssl/ssl.crt
SSLCertificateKeyFile /etc/apache2/ssl/ssl.key
SSLCertificateChainFile /etc/apache2/ssl/sub.class1.server.ca.pem
SSLCACertificateFile /etc/apache2/ssl/ca.pem
sudo a2ensite default-ssl
참조 :