얼마 전에 진행한 면접에서 http를 사용한 웹 개발 프로젝트에 대해 발표하며 개선점으로 https연결을 꼽았는데, https 연결 흐름에 대한 질문에 답을 못 했던 경험이 있어 직접 실행해 보려고 한다.
http?
Hipertext Transfer Protocol. 클라이언트와 서버 간 통신을 위해 사용되는 TCP/IP 기반 프로토콜이다.
연결 상태를 유지하지 않는 비연결성(Stateless) 프로토콜.
서버가 클라이언트에게 받은 요청에 응답하고 나면 바로 클라이언트와의 연결의 끊어버린다.
그래서 요청 종료 이후에는 클라이언트의 이전 상황을 알 수 없다.
이런 단점을 해결하기 위해 Cookie와 Session이 등장했다.
웹은 클라이언트가 서버에 http요청을 보내고 서버가 응답으로 웹 페이지 또는 리소스를 전송하는 흐름으로 동작하는데, http는 평문 텍스트를 전송해 통신하므로 데이터가 보호되지 않는다.
만약 사용자가 id와 pw를 입력하고 로그인 요청을 보낸다면 사용자의 pw가 노출될 위험이 있다.
불특정 다수를 대상으로 하는 서비스에 적합하다.
비연결성의 특징 덕분에 클라이언트와 서버 간 최대 연결 수 보다 훨씬 많은 요청과 응답 처리가 가능하다.
https?
Hypertext Transfer Protocol Secure.
위의 이유로 등장하게 된 프로토콜. http에 ssl을 사용한 보안 프로토콜이다.
독립된 인증 기관에서 SSL/TLS 인증서를 발급하여 통신 시 브라우저와 인증서를 공유해 안전한 연결을 인증한다. 또한 데이터 전송 시 암호화하여 동작한다.
AWS EC2 인스턴스 생성
(보안 탭에서 https 설정 체크해주기)
키 페어 생성 후 다운로드 받은 키 페어를 사용하거나 직접 키페어를 생성할 수 있음.
ssh 키페어 설정
ssh 키? 웹 서버, ssh 접속, 암호화 통신 등 다양한 보안 작업에 사용되는 키.
로컬 환경에서 생성 및 관리되어야 하며, ssh에서 사용되는 키 페어는 일반적으로 PEM 형식으로 저장됨.
공개키와 개인키로 구성되는 비대칭키 기법.
"ssh-keygen"이라는 명령을 사용해 키페어를 생성하고 pem 형식으로 저장할 수 있음.
공개키는 원격 서버에 등록, 개인키는 로컬에서 안전하게 보관됨.
옵션 :
-t 키페어의 유형 지정 ex)rsa > RSA 알고리즘 사용
-b rsa 키페어의 비트 수 지정. ex)2048 > 2048 비트 길이의 키페어 생성.
RSA?
공개 키 암호화 및 전자 서명에 사용되는 암호화 알고리즘.
두 소수를 곱해 큰 정수를 생성하는 수학적 원리를 기반으로 함.
1. 사용자가 키 페어를 생성하려면 두 개의 소수 P와 Q를 선택함.
2. 사용자는 두 소수를 곱해 N값을 계산
3. 공개 지수 'e'를 선택. e는 N과 서로소인 정수여야 함. 공개키는 {N, e}가 됨.
4. 사용자는 두 소수에서 각각 1을 뺀 값을(P-1)(Q-1) 곱해 Phi 함수 계산.
5. Phi 값을 이용해 e의 모듈러 역수 'd'를 계산. d는 데이터 복호화에 쓰임. 개인키는 {N, d}가 됨.
암호화 및 복호화되는 과정
숫자로 표현된 메세지를 e제곱하고 해당 결과와 N을 모듈러 연산하여 암호화
암호화된 메세지를 d제곱한 후 해당 결과와 N을 모듈러 연산하여 암호화
모듈러 연산 : 나머지를 구하는 연산. 숫자 A, B 의 합, 차, 곱의 나머지를 구함.
SSH에서는 여러 가지 키 유형을 사용할 수 있으며, 주로 다음과 같은 유형이 있습니다:
- RSA (Rivest-Shamir-Adleman): RSA 키는 가장 널리 사용되는 SSH 키 유형 중 하나이며, 기본적으로 2048 또는 4096 비트 길이를 가집니다. RSA 키는 강력한 보안을 제공합니다.
- DSA (Digital Signature Algorithm): DSA 키는 이전에 많이 사용되었지만 현재는 안전하지 않은 것으로 간주되며 권장되지 않습니다. 대신 RSA 또는 ECDSA 키를 사용하는 것이 좋습니다.
- ECDSA (Elliptic Curve Digital Signature Algorithm): ECDSA 키는 ECC (Elliptic Curve Cryptography)를 기반으로 하며, 더 작은 키 크기로도 높은 보안을 제공합니다. 일반적으로 256, 384, 또는 521 비트 크기의 ECDSA 키를 사용합니다.
- Ed25519: Ed25519 키는 보안성이 뛰어나며 최신 SSH 키 유형 중 하나입니다. 256 비트 길이를 가집니다.
- EC25519: EC25519은 Ed25519의 일종으로, ECC를 기반으로 하며 높은 보안성을 제공합니다.
보안 요구 사항과 사용 사례에 따라 적절한 키 유형을 선택해야 합니다. 현재로서는 RSA, ECDSA, Ed25519와 같은 키 유형이 많이 사용되고 있습니다.
aws 키 페어로 ssh연동
ssh -i "your-key-pair.pem" ec2-user@your-ec2-instance-ip
가상머신을 구성하고 아파치 웹 서버를 설치해준다.
1. root 권한으로 바꾸고 'sudo yum update'입력
중간에 y 입력해주면서 설치 진행
1. Apache 웹 서버 설치
2. SSL 모듈 활성화 - 이미 설치한 후라 Nothing to do 가 뜬다.
3. SSL 인증서 생성
국가명은 KR, 나머지는 자유롭게 입력하면 된다. 빈칸으로 두고 싶으면 그냥 엔터치거나 . 입력하고 엔터치면 된다.
4. Apache SSL 설정 파일 편집
SSLEngine on
SSLCertificateFile /etc/pki/tls/certs/myserver.crt
SSLCertificateKeyFile /etc/pki/tls/private/myserver.key
이렇게 세 항목을 바꿔준다.
5. 방화벽 설정 및 Apache 서비스 시작 및 활성화
sudo firewall-cmd --permanent --add-service=https //방화벽에서 https 포트(443)을 허용한다.
sudo firewall-cmd --reload //방화벽을 재시작한다.
sudo systemctl start httpd //Apache 서비스를 활성화한다.
sudo systemctl enable httpd //부팅 시 자동으로 시작하도록 설정한다.
'오늘의 취준 > 오늘의 공부' 카테고리의 다른 글
[Spring Boot] 스프링 빈 / 의존성 주입 (0) | 2023.09.19 |
---|---|
SOLID원칙/의존성역전의 법칙 (0) | 2023.09.17 |
MVC 패턴 (0) | 2023.09.16 |
비대칭키 암호화, 대칭키 암호화 (0) | 2023.09.16 |
[Spring Boot] JPA 사용하기 / Spring Data JPA (0) | 2023.09.16 |