JUST WRITE

HTTP vs HTTPS 본문

Network

HTTP vs HTTPS

천재보단범재 2021. 9. 17. 21:57

HTTP vs HTTPS

HTTP

HyperText Transfer Protocol

  • HyperText를 전송하기 위한 통신규약
  • Web Server와 Web Browser 사이에 데이터를 전송하기 위한 통신 규약
  • Default Port -> 80

HTTPS

HyperText Transfer Protocol Secure

  • HTTP + SSL(보안 소켓 계층) -> 보안 기능의 추가
  • 데이터 전송 이전에 데이터 암호화를 통해 보안 강화
  • Default Port -> 443
  • 장점
    • 보안 기능의 강화
    • 온라인 마케팅 -> 검색엔진 최적화(SEO, Search Engine Optimization)에서 가산점
    • 가속화 모바일 페이지(AMP, Accelerated Mobile Pages) 만들 때 필요

**참고 (RFC_7540 HyperText Transfer Protocol Version 2(HTTP/2) 3절)

3. Starting HTTP/2 An HTTP/2 connection is an application-layer protocol running on top of a TCP connection ([TCP]). The client is the TCP connection initiator. HTTP/2 uses the same "http" and "https" URI schemes used by HTTP/1.1. HTTP/2 shares the same default port numbers: 80 for "http" URIs and 443 for "https" URIs. As a result, implementations processing requests for target resource URIs like "http://example.org/foo" or "https://example.com/bar" are required to first discover whether the upstream server (the immediate peer to which the client wishes to establish a connection) supports HTTP/2. The means by which support for HTTP/2 is determined is different for "http" and "https" URIs. Discovery for "http" URIs is described in Section 3.2. Discovery for "https" URIs is described in Section 3.3.

 

SSL

SSL

Secure Socket Layer

  • CA(Certificate Authority) 서드 파티로부터 Server와 Client 인증하는 데 사용
  • TLS(Transport Layer Security)가 표준화 되면서 SSL로 바뀜
  • TCP/IP 사용하는 통신에 적용, 전송계층(Transport Layer)에서 보안, 데이터 무결성 확보
  • Netscape사에서 발명 => IETF의 관리로 TLS로 명명(TLS 1.0은 SSL 3.0 계승)

TCP/IP에서 SSL

 

HTTPS 실습

  • Java Keytool 유틸리티를 활용하여 인증서 생성, SSL 설정
    • keytool -> 인증서를 관리하는 Tool, JDK 1.6부터 기본으로 포함
    • Java는 OS와 별개로 keystore라는 곳에 모든 인증서를 관리
    • 기본적으로 JAVA_HOME/jre/lib/security 폴더 안에 cacerts라는 keystore 파일 보관

실습 진행

  1. 기본 Spring Boot Project 생성
  2. Java Keytool 유틸리티를 통해서 인증서 생성
    • 아래 command를 만든 Spring Boot Project base dir 위치에서 실행
    • keystore.p12 파일 생성 확인
  3. Spring Boot Project 내 application.properties 파일 아래와 같이 편집 후 Spring Boot 실행
  4. http와 https로 들어갔을 때 차이 확인 

** 인증서 생성

keytool -genkey -alias tomcat \
		-storetype PKCS12  \
        -keyalg RSA \
        -keysize 2048 \
        -keystore keystore.p12 \
        -validity 4000

# 이후 비밀번호 지정
# 아무값 입력 후(테스트용) 마지막 확인 창에서 'yes' OR '예' 입력

** application.properties 파일 수정

server.ssl.key-store: keystore.p12
server.ssl.key-store-password: 123456
server.ssl.keyStoreType: PKCS12
server.ssl.keyAlias: tomcat

실습 참고 사항

  • Tomcat에서 수용하는 keystore 타입은 JKS, PKCS11, PKCS12
    • JKS -> Java 표준 keystore형식
    • PKCS12 -> 인터넷 표준 형식
  • Java Keytool
    • KeyStore라는 인터페이스를 통해 Private Key, Public Key, Certificate를 추상화하여 제공
    • command 방식의 유틸리티(JDK에 포함)
    • OpenSSL과 비슷한 용도로 사용

** keystore 내용 확인

# keystore 파일 Path에서,,,
keytool -list -v -keystore #{keysotre파일명}
# keysotre 비밀번호 입력

## keysotre 내용 출력 example

키 저장소 유형: PKCS12
키 저장소 제공자: SUN

키 저장소에 1개의 항목이 포함되어 있습니다.

별칭 이름: tomcat
생성 날짜: 2020. 7. 7
항목 유형: PrivateKeyEntry
인증서 체인 길이: 1
인증서[1]:
소유자: CN=Jeong Sang Wan, OU=encore, O=encore, L=seoul, ST=seoul, C=82
발행자: CN=Jeong Sang Wan, OU=encore, O=encore, L=seoul, ST=seoul, C=82
일련 번호: 6bace66a
적합한 시작 날짜: Tue Jul 07 19:37:26 GMT+09:00 2020 종료 날짜: Fri Jun 20 19:37:26 GMT+09:00 2031
인증서 지문:
         MD5:  41:7F:B8:E0:A0:1D:39:42:4A:EB:70:ED:DF:52:DF:24
         SHA1: 86:33:3F:9C:93:A0:52:62:A4:4B:B9:84:43:77:CC:47:3F:64:7B:53
         SHA256: B0:C1:E5:73:F6:3C:FD:CD:98:E6:91:CC:AC:F1:F5:DB:3E:A1:50:96:3A:DE:30:09:0C:E8:DA:A9:2D:6F:A0:61
서명 알고리즘 이름: SHA256withRSA
주체 공용 키 알고리즘: 2048비트 RSA 키
버전: 3

확장:

#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 78 00 F5 B0 8A 87 C8 B9   E5 61 D0 AA F7 42 7E 3F  x........a...B.?
0010: 05 EB 26 96                                        ..&.
]
]

*******************************************
*******************************************

** keystore 키 변경

# keystore 파일 Path에서,,,
keytool -storepasswd -keystore #{keysotre파일명}

Enter keystore password : #{현재 keysotre 비밀번호}
New keystore password : #{새 keysotre 비밀번호}
Re-enter new keystore password : #{새 keysotre 비밀번호}

 

[참고사이트]

 

728x90
반응형

'Network' 카테고리의 다른 글

GET vs POST  (0) 2021.09.22
SSL  (0) 2021.09.18
Session Clustering  (0) 2021.09.02
Load Balancing  (0) 2021.08.31
CSR vs SSR  (0) 2021.08.21
Comments