기타

[보안] openSSL install and setting

보겸삼촌 2021. 1. 26. 23:11

1. OpenSSL

 

  1.1. SSL 인증서

  : HTTPS 통신을 위한 SSL 인증서 발급

 

SSL(Secure Socket Laye) : 웹서버와 브라우저 사이의 보안을 위해 만들어짐

대칭키를 이용하여 암호화 통신을 함

 

 따라서, SSL 인증서란, 해당 웹 사이트가 해킹에 신뢰 있는 사이트인지, 안전한 통신을 하는 사이트인지를 구분하기 위해 누군가 이 사이트가 신뢰 있는 사이트라고 인증을 해주기 위한 인증서로, 인증서 소유자의 email, 소유자 이름, 용도, 유효기관, 발행기관, 공개키 등이 포함되어 있음.

 

 

 

 

 

  1.2. openSSL 설치

 

    : SSL 인증서를 발급받기 위해서는 openSSL이 필요

      https://sourceforge.net/projects/openssl/files/latest/download?source=typ_redirect

 

 

설치가 완료되면, C드라이브 바로 아래 경로에 압축을 풀어주고, /bin/openssl.exe 실행

 

 

# 경로
C:\openssl-1.0.2j-fips-x86_64\OpenSSL\bin\openssl.exe

 

 필자의 경로는 다음과 같음. 만약 실행이 안되는 경우 관리자 권한으로 실행.

또다른 이유로, 실행이 안되는 경우 cmd에서 해당 경로에서 openssl.exe 파일을 실행시킴

 

 

 

  1.3. 개인키, 공개키 발급

 

    1.3.1. 개인키 발급

      : openssl 실행이 됐다면 개인키를 먼저 생성

OpenSSL> genrsa –out 키 이름 2048

 

 

 위 방식은 httpsssl 인증서에는 서비스를 등록할 때마다 비밀번호를 입력해주어야하기 때문에 비밀번호가 없는 키를 만드는 방식이며, 비밀번호가 있는 키를 만드는 방식은 아래

 

OpenSSL > genrsa –des3 –out 키 이름 2048

 

  : 위 명령어를 실행하면 비밀번호를 두 번 입력하게 되고 비밀번호가 담긴 개인키를 만들 수 있음

 

 

    1.3.2. 공개키 발급

      : 개인키와 쌍이 되는 공개키 만들기

 

OpenSSL > rsa –in 개인키 –pubout –out 공개키

 

  1.4. CSR(Certificate Signing Request)

      : 인증요청서 만들기

 

 SSL 인증의 정보를 암호화하여 인증기관에 보내 인증서를 발급받게 하는 신청서이고, 정보항목에는 국가코드, 도시, 회사명, 부서명, 이메일, 도메인주소 등이 들어가 있음

 

OpenSSL > req –new –key private.key –out private.csr
(OpenSSL > req –new –key 개인키 –out CSR이름.csr)

 

 만약, 이런 오류(Unable to load config info from /usr/local/ssl/openssl.cnf)뜨면 해결방법은 다음과 같음

 

OpenSSL > req –config ./openssl.cnf –new –key private.key –out private.csr

 

 위 명령어 진행 후 추가 입력 사항은 테스트 목적으로 임의의 값을 입력했음.

 

 

  1.5. CRT

    : 중간 인증서 만들기

 

 

    1.5.1. 사설CA 만들기

      : 자체적으로 만든 사설CA에서 인증을 받은 인증서를 만들기 위해서는 인증서 서명을 해줄 rootCA를 만들기

· rootCA.key 생성

  : genrsa 암호화알고리즘 out 키이름 2048

 

OpenSSL > genrsa –aes256 –out rootCA.key 2048

  - pass : root(임의설정)

 

· rootCA 사설 CSR 생성하기

  : rootCA.key를 이용하여 10년짜리 rootCA.pem을 생성

  임시로 국가, 도시, 회사, 도메인, 메일 값 등을 입력할 것.

 

 

 

    1.5.2. CRT 생성

      : 1.2.에서 만들었던 CSR 파일을 나만의 커스텀 CArootCA의 인증을 받아 private.crt로 생성

 

OpenSSL > x509 –req –in private.csr –CA rootCA.pem –CAKey rootCA.key
–CAcreateserial –out private.crt –days 3650

 

 

 

· 보안인증서 private.crt 파일이 생성됐는지 확인

    : 발급대상, 유효기간을 확인하면 설정한 값으로 확인

 

 

 

  1.6. TOMCAT-인증서 적용

    : TOMCAT에 인증서를 적용하기 위해 PKCS #12 형식으로 변경

 

 

 인증서 파일 형식에는 여러 가지가 있음. 인증서 가져오기 및 내보내기 작업에는 네 가지 파일 형식이 지원되는데 사용자의 특정 요구사항에 맞는 형식을 선택해야 함.

 

 종류로는 개인정보교환(PKCS #12), 암호화 메시지 구문표준(PKCS #7), DER로 인코딩된 X.509 바이너리, Base 64로 인코딩된 X.509 형식이 있음.

 

 여기서는 PKCS #12을 사용할 것.

 

OpenSSL > pkcs12 –export –in private.crt –inkey private.key –out .keystore –name tomcat

 

.keystore 파일이 생성된 것을 확인할 수 있음. 이제 이 파일을 사용하여 SSL 통신을 구현할 것.

 

 

 

    1.6.1. HTTPS / SSL 암호화 통신 방법

        https://namjackson.tistory.com/25

 

        https://soul0.tistory.com/372

 

# 방법

1) 서버 측에서 서버에 대한 정보와 인증이 담긴 인증서와 공개키(비대칭키)를 인증기관(CA)에 등록
2) 클라이언트가 등록되어 있는 공개키(비대칭키)로 공통키(대칭키)를 암호화하여 서버 측에 전송
3) 서버 측에서 클라이언트에서 전송된 암호(암호된)를 개인키(비대칭키)를 사용하여 복호화하여 공통키를 획득
4) 서버 및 클라이언트는 공통키를 사용하여 보안 통신을 함

  이렇게 통신을 하기 전에 공통키를 암호화 하고 주고받는 단계를 Handshake라고 함

 

 

 

    1.6.2. 적용

      :  .keystore 파일의 위치를 설정

1) 프로젝트에서 keystore 디렉토리에 .keystore 파일을 복사
2) HTTPS를 적용할 프로젝트의 tomcat 서버의 server.xml 파일 수정

 

아래 내용을 추가. 그리고 tomcat 서버를 다시 구동 후 브라우저로 확인.

 

https://localhost:7443