HTTPS란 무엇일까?
HTTPS란 "HTTP" + "S (secure)"의 의미를 가지고 있으며 "Hyper Text Transfer Protocol Secure (Socket layer)"의 준말입니다. ( = HTTP over SSL(TLS) = HTTP over Secure )
즉, HTTP의 낮은 보안성을 해결할 목적으로 클라이언트와 서버사이의 정보를 인증하는 단계를 만들어 유저의 정보를 보호할 수 있습니다.
따라서, HTTPS의 첫번째 역할은 제 3자가 서버와 클라이언트가 주고받는 정보를 탈취할 수 없도록 하는 것입니다.
HTTPS 프로토콜의 특징은 암호화 과정에서 비대칭키를 사용한다는 것인데요,
전혀 다른 키를 한 쌍으로 암호화 및 복호화를 합니다.
HTTPS 연결 성립 과정
1. 클라이언트 -> 서버(공개키, 인증서 정보 전달) // handshake
2. 키 제작용 랜덤 스트링 전송(to Server) -> 키 제작용 랜덤 스트링 전송(to Client) // 비밀 키 생성
3. 세션 키로 암호화 된 메세지 전달 (to Server) -> 세션 키로 암호화 된 메세지 전달 (to Client) // 상호 키 검증
순서로 진행이 됩니다.
HTTPS 사설 인증서 발급 및 서버 구현
HTTPS 인증서를 발급하고 구현하는 방식은 다음과 같습니다.
우선, 자바는 두 가지 인증서 형식을 지원합니다.
- PKCS12 (Public Key Cryptographic Standards #12) : 여러 인증서와 키를 포함할 수 있으며, 암호로 보호된 형식입니다.
- JKS (Java KeyStore) : PKCS12와 유사합니다. 독점 형식이며 Java 환경으로 제한됩니다.
우선 우분투나 WSL터미널을 통해 인증서를 설치해줍니다.
원하는 경로가 있다면 mnt/c/windows/system32를 제외한 디렉토리에 설치합니다.
아마 최초경로는 root 디렉토리일 것인데 저는 편의상 최상위 폴더에서 원하는 폴더까지 타고 들어가 설치하였습니다.
cd / //최상위 폴더로 이동
cd /mnt/c // C드라이브로 이동
설치 방법은 다음과 같습니다.
$ sudo apt install libnss3-tools
$ wget -O mkcert https://github.com/FiloSottile/mkcert/releases/download/v1.4.3/mkcert-v1.4.3-linux-amd64
$ chmod +x mkcert
$ sudo cp mkcert /usr/local/bin/
$ mkcert -install // 인증서를 생성합니다.
$ mkcert -pkcs12 localhost // PKCS12 인증서가 생성됩니다.
이후application.properties에 다음을 추가하면 됩니다.
server.ssl.key-store=classpath:localhost.p12
server.ssl.key-store-type=PKCS12
server.ssl.key-store-password=changeit
- server.ssl.key-store= 은 경로를 의미합니다.
- server.ssl.key-store-type= 은 인증서 형식을 의미합니다.
- server.ssl.key-store-type= 인증서 비밀번호 입니다.
이후 프로젝트를 실행하여 실행 포트 옆에 (https)가 나오면 성공한 것 입니다.
주의 사항
- 혹시 포트가 이미 실행된 경우 포트를 끄고 실행해야합니다. (Git Bash에서 netstat -a -o로 확인!)
- 인증서 경로가 잘못되어 있을 수 있습니다.
- application.properties에 입력된 값에 공백이 있을 수 있습니다.
'CS > Network' 카테고리의 다른 글
[ HTTP ] 리다이렉션(REDIRECTION)이란 무엇일까?! (0) | 2023.07.04 |
---|---|
[ HTTP ] HTTP 상태코드 들을 알아보자 (0) | 2023.07.04 |
[네트워크] REST API(Representational State Transfer)의 이해 (1) | 2022.10.04 |
[네트워크] 웹(Web)의 이해와 웹을 구성하는 기술 (0) | 2022.09.30 |
[네트워크] TCP와 IP의 이해 (0) | 2022.09.30 |