Day13-2 TLS(OPENSSL)/HTTP2 적용

Ju Yeong·2023년 10월 4일

SSL/TLS

방문한 웹사이트의 위험 여부(웹사이트 제작사의 위법성, 보안 수준 ,해킹 여부 등)를 판단하고 서버와 클라이언트(웹브라우저) 사이에 암호화된 통신을 하기 위해서는 HTTPS 통신이 필요함.
이러한 HTTPS 기반의 웹서비스를 하기 위해서는 서버 운영기관에서 인증기관(CA)에 해당 사이트가 누구의 소유인가, 누가 만든것인가등의 정보를 제공한 후 CA로부터 웹서비스 운영기관의 신원을 보증 받을 수 있는 디지털 인증서를 구입하여 웹서버에 설치하여야 함.

HTTPS 통신을 위한 Handshake 절차

  1. 서버측에서는 OPENSSL을 이용하여 서버에 대한 정보와 인증 등이 담긴 인증서와, 공개키(비대칭키)를 인증기관(CA)에 등록
  • 비대칭키(공개키) : 공개키(Public Key), 개인키(Private Key)로 나누어지며, 공개키로 암호화를 하고, 개인키로 복호화함. 개인키가 분실되지 않는 한 안전하지만, 부하를 유발하는 단점이 있음.
    개인키는 서버측에서 관리하고, 공개키는 인증기관에 등록하며, 이런한 키관리 기능이 웹브라우저 보안기능 내에 내장되어 있음
  • 대칭키(공통키) : 암호화 및 복호화 시 사용하는 키가 동일하기 때문에 암호문을 주고 받는 대상간에 동일한 키를 보유하여야 함
  • RSA : 현재 SSL/TLS에 가장 많이 사용되는 비대칭형 공개키 암호화 알고리즘으로 전세계 대부분의 인터넷 뱅킹(대한민국 포함)이 이 RSA-2048 암호화를 사용
    공개키와 개인키가 한 쌍을 이루며, 공개키로 암호화한 내용은 개인키로만, 개인키로 암호화한 내용은 공개키로만 해독. 1977년 이 체제를 개발한 세 사람의 성을 따서 RSA 라고 이름이 붙였음
  • 3DES : 미국 상무국 표준국(NIST)이 1997년에 IBM사의 제안을 바탕으로 제정한 대칭형 데이터 암호화 표준 규격인 DES(Data Encryption Standard.평문(Plain Text)을 64비트로 나누고 그 중 56비트를 이용해 64비트 암호문 생성)을 각 데이터 블록에 세번 적용한(암호화->복호화->암호화) 트리플 데이터 암호화 알고리즘.
  • AES(Advanced Encryption Standard Algorithm) : DES의 안정성 문제로 1998년에 차세대 대칭형 블록 암호 알고리즘으로 개발. 입력 평문 길이를 128비트로 고정하고 사용하는 암호화 키 길이를 128/192/256비트 중 선택
  • Hash : 복호화가 불가능하도록 암호화 하는 것을 의미하며, 암호화된 값을 다이제스트(Digest)라고 함. 복호화가 되지는 않지만 동일한 입력에 대해서는 동일한 입력값이 나오기 때문에 동일한 평문에 Salt(임의값)을 추가하여 암호화를 진행. MD5(Message Digest), SHA(Secure Hash Algorithm)
  1. 클라이언트가 등록되어져 있는 공개키(비대칭키)로 공통키(대칭키)를 암호화하여 서버측에 전송 -> 서버측에서는 클라이언트에서 전송된 암호(공통키로 암호화된)를 개인키(비대칭키)를 사용하여 복호화하여 공통키를 흭득

  2. 서버 및 클라이언트는 공통키를 사용하여 보안 통신을 수행

OPENSSL 설정

OPENSSL은 디지털 인증서 발급을 위한 오픈소스 라이브러리. openssl 1.0.2 부터 ALPN를 지원함.
(브라우저의 경우 ALPN을 지원하지 않으면 HTTP/2 통신을 하지 않고 HTTP/1.1 으로 강제 통신을 함.)
※ ALPN(Application-Layer Protocol Negotiation) : HTTP/2을 사용하기 위한 TLS의 확장 프로토콜 규약

  1. OPENSSL 다운로드
    https://sourceforge.net/projects/openssl

  2. 다운로드한 OPENSSL 파일을 압축 해제하여 OpenSSL 폴더를 C 드라이버 하위로 이동

  3. 고급시스템 설정 > 환경변수에서 환경변수 추가 ->
    환경변수명 : OPENSSL_CONF
    변수 값 : C:\OpenSSL\bin\openssl.cnf

  4. C:\OpenSSL\bin\openssl.exe 실행

  5. OpenSSL 콘솔 화면에서 아래 내용 실행

  • 비밀번호 있는 개인키 설정
    : OpenSSL>genrsa -des3 -out private.pem 2048 --> 생략
    *( 공인인증서의 경우는 비밀번호가 필요하지만, https의 ssl 인증서에는 서비스등록할때마다, 비밀번호를 입력해줘야하기 때문에, 비밀번호가 없는 키의 생성 필요.)

  • 비밀번호 없는 개인키 생성
    : OpenSSL>genrsa -out private.key 2048

  • 개인키와 쌍이 되는 공개키 생성
    : OpenSSL>rsa -in privatekey.key -pubout -out public.key

  • CSR(Certificate Signing Request : 인증발급요청서) 생성
    : OpenSSL>req -new -key private.key -out private.csr

  • 인증서 생성
    : OpenSSL> req -new -x509 -days 3650 -in private.csr -key private.key -out private.crt
    --> 사설 CA를 사용하지 않을 경우

<Tomcat에 SSL/TLS 적용시>

  • Tomcat용 인증서 생성
    : OpenSSL>pkcs12 -export -in private.crt -inkey private.key -out .keystore -name tomcat

httpd.conf 설정

httpd-ssl.conf 설정


이렇게 세팅을 해주면

https:// 로 들어 갈 수 있다.

HTTP/2 설정

주석 제거 후

<IfModule http2_module>
ProtocolsHonorOrder On
Protocols h2 h2c http/1.1
</IfModule>

추가하기

<http ~~>

<https ~~>

profile
주영

0개의 댓글