SSL 등록하기!!(JKS편)

박일우·2022년 2월 17일
0

SSL이란?!

SSL(Secure Socket Layer)은 Netscape 사에서 웹서와 웹브라우저간의 보안을 위해 만들어 졌다.
공개키/개인키 대칭키 기반으로 사용한다.
https로 통신하는 웹사이트를 이용하다보면 브라우저 상단에 자물쇠 표시가 나오는데 해당
자물쇠를 눌러보면 인증서를 찾을 수 있다.
이 인증서는 제3자 인증기관에서 발급 받을 수 있으며,이 인증서에는 인증서의 해당 사
이트의 공개키와 사이트의 정보들이 담겨져 있다.
인증서가 전송 될 때는 인증기관이 제공하는 개인키로 암호화 하여 전송된다.

JKS란?!

이번에 만들어볼 SSL인증서는 JKS(Java Key Store) 이다.
JKS는 Java 기반의 독자 인증서 바이너리 포맷이다.
개인키, 서버인증서, 루트인증서, 체인인증서를 모두 담을 수 있어서 SSL 인증서 파일 관리시 유 용하다. Tomcat에서 SSL 적용시 가장 많이 사용 되는 포맷이다.
Java 전용의 키 저장소이므로 다른 프로그래밍 언어는 사용 할 수 없다.(바이너리 이진 파일)

그외에 pfx(Personal Information Exchange Fromat) 포맷도 많이 사용한다. (.pfx, .p12) 이 포맷은 PKCS#12 바이너리 포맷이다.
주로 Windows IIS 기반에서 인증서 적용/이 동시 활용 된다.
장점으로는 개인키, 서버인증서, 루트인증서, 체인 인증서를 모두 담 을수 있어서 SSL인증서 적용이나 이전시 상당히 유용하고 편리 하다.
일반적으로 개인키를 X.509 인증서와 번들로 묶거나 신뢰 체인의 모든 구성원을 번들로 묶는데 사용한다.
Tomcat 등 요즘에는 pfx 설정을 지원하는 서버가 많아지고 있다.(바이너리 이진 파일)

인증서를 발급 받고, 적용해보자!

그럼 지금부터 실제 인증서를 발급 받고, 해당 인증서를 웹사이트에 적용 시켜보겠다!

먼저 인증서를 발급 받아보자.

  1. SSL 인증서를 제공해주는 사이트를 찾아보자
    필자는 www.jungbo.net 에서 제공하는 SSL 서비스를 이용했다.
    사이트 별로 구성이 다를 수 있으니 화면은 참고만 하는것으로 추천한다.

  2. SSL 인증서를 사용할 도메인명을 적어준다.

  3. 도메인명을 입력하면 CSR(Certificate Signing Request)값을 입력하라고 나온다.
    여기서 CSR이란 '인증기관(CA)이 인증하는데 필요한 정보와 인증서를 요청한 서버의 공개키가 들어 있는 특수한 형식의 키 값을 말한다.'
    CSR을 생성 후 다시 인증서를 요청해보자.

  4. 먼저 openssl을 설치해주자!
    openssl이란 '네트워크를 통한 데이터 통신에 쓰이는 프로토콜인 TLS와 SSL의 오픈 소스 구현판이다.(위키백과)' 이라고 한다. 쉽게 생각해, SSL 인증서 등록에 필요한 각종 파일 생성을 도와주는 오픈 소스라 생각하자.
    필자는 mac을 사용하므로 아주 유용하고 간편한 package manager인 brew를 이용하여 설치하였다. (이외에도 wget 및 https://www.openssl.org/source/ 에서 직접설치 할 수 있다.)

    $brew install openssl

    설치가 잘 되었는지 확인해보자!

  5. Private Key를 생성하자!

    $openssl genrsa -out [생성할 개인키 파일명] [bit용량 통상2048]

    비밀번호가 없는 개인키를 생성한다(참고: 비밀번호가 필요한 개인키 생성은 -des3 옵션을 넣어준다)
    명령어가 실행되면 아래와 같은 파일이 만들어 진다.

    cat명령어로 어떤 파일이 만들어 졌는지 확인해보자.

  6. Public Key를 생성하자!
    Private Key(개인키)와 쌍을 이루는 Public Key(공개키)를 생성해보자!

    $openssl rsa -in [개인키 파일명] -pubout -out [생성할 공개키 파일명]

    5번에서 만든 Private Key를 이용해 명령어를 실행하면 아래와 같이 파일이 만들어진다.

    이번에도 cat 명령어로 만들어진 파일을 확인해보자.
    Private Key와 Public Key 모두 잘 만들어졌다.

  7. CSR(Certificate Signing Request) 인증서 서명을 생성하자!
    CSR (Certificate Signing Request - 인증서 서명 요청)이란
    SSL 인증의 정보를 암호화하여 인증기관에 보내 인증서를 발급받게하는 신청서
    국가코드, 도시, 회사명, 부서명, 이메일, 도메인주소 등이 들어간다.

    $openssl req -new -key [개인키 파일명] -out [생성할 CSR 파일명]

    (만약 "Unable to load config info from [특정경로]
    error in req" 라는 오류가 난다면 환경설정 파일의 경로가 맞지 않는 것이다. 위의 명령
    어에 -config 옵션으로 환경설정 파일의 경로를 강제로 지정해주자.)

    $openssl req -config [openssl.cnf 파일경로] -new -key [개인키 파일명] -out [생성할 CSR 파일명]

    명령어를 입력하면 아래와 같이 입력을 하고 CSR 파일을 생성 할 수 있다.
    주의사항
    특수문자 금지, CSR과 Private Key는 쌍으로 관리되어야 함.
    마지막 challenge password는 csr 파일에서 바로 보이므로 서버 password 와 다르게
    만들고 해당 환경의 패스워드 체계를 유추할만한 형태로 만들지 말것!
    잘 모르겠으면 차라리 적지말자!

    생성된 CSR 파일을 cat 명령어로 확인해보자!
    이제 만들어진 CSR파일을 3번에 입력하여 진행을 하면된다.
    이러면 SSL 인증서를 만들 수 있는 zip파일을 준다!

  8. JKS 파일을 만들자!

    zip파일을 풀면 아래와 같은 파일을 확인할 수 있다.(파일은 인증 업체마다 다릅니다. 참고용
    으로만 보세요)

    이 파일들을 통해서 JKS 파일을 만들것이다.
    먼저 인증서를 통합해주자!
    DigiCertCA.pem + TrustedRoot.pem 로 pem 파일을 하나 생성해주자!

    $cat DigiCertCA.pem TrustedRoot.pem > my_cert.pem

    pem 파일이 생성되면 pfx 파일로 변환을 해주자!

    $openssl pkcs12 -export -name [도메인명] -in [인증서 통합하여 생성한 pem파일명] 
     -inkey [개인키 파일명] -out [생성할 pfx파일명]

    만들어진 pfx 파일을 이용하여 jks 파일을 만들어보자!

    $keytool -importkeystore -srckeystore [pfx파일명] -srcstoretype
     pkcs12 -destkeystore [생성할 jks파일명] -deststoretype jks

    자 성공적으로 jks 파일을 만들었다!
    이제 각자 애플리케이션에 맞게 사용을 하면 된다~!

    -끄읏-

profile
열정!열정!열정!

0개의 댓글