남잭슨의 개발 블로그
[SSL]HTTPS통신을 위한 SSL인증서 발급하기(OpenSSL) 본문
먼저 HTTPS통신을 구현 하기 하기전,
SSL 이란?
Secure Socket Layer의 약자로 SSL 프로토콜은
간단하게 웹서버와 브라우저 사이의 보안을 위해 만들어졌다.
간단하게 요약하자면 대칭키를 이용하여 암호화 통신을 한다!
HTTP에 SSL 적용을 하여 Https 통신을 하게된다!
이러한 암호화 통신을 하기 위해선 SSL 인증서가 필요하다.
SSL 인증서란
해당 웹 사이트가 해킹에 신뢰있는 사이트인지, 안전한 통신을하는 사이트인지를 구분하기 위해
누군가가 이 사이트가 신뢰가 있는 사이트라고 인증을 해주기 위한 인증서이다.
인증서에는 인증서 소유자의 email, 소유자 이름, 인증서 용도, 인증서 유효기간, 발행기관, public key 등이
포함되어 있다.
인증서에 서명한 사람을 신뢰한다면, 서명된 인증서 또한 신뢰할수 있는것이다.
인증서가 다른 인증서에 서명을 해주며 트리구조로 되어 있다.
Https는 이미 많이 사용되고있다
구글 크롬, 파이어폭스등에서 이미 HTTPS가 적용되지 않은 사이트는안전하지 않은 사이트로 경고를 보여주고
실제 많은 사이트들이 https가 적용되어있다.
SSL의 장점은
아래는 https ssl 이 적용된 사이트(공인된 CA의 인증서)
아래는 https ssl 이 적용되지 않은 사이트
아래는 https ssl 적용되었지만, 인증서가 보장되지 않은 사설인증(사설 CA)일경우..
자 이제 Https 통신을 구현을 위한 ssl 인증서를 발급해보자
먼저 ssl 인증서를 발급을 하기위해선 openssl이 필요하다 .
해당 툴이 없다면 아래링크를 통해 설치하자 ( 저는 Window 기준입니다.)
https://sourceforge.net/projects/openssl/files/latest/download?source=typ_redirect
설치가 완료되면, C드라이브 바로 아래 경로에 압축을 풀어주고 ,
해당파일/bin/openssl.exe를 실헹합니다.
(안되시는분들은 cmd 로 해당 경로 이동 후 , openssl.exe 혹은 관리자권한으로 실행해보세요)
1. 개인키 , 공개키 발급
실행이 됬다면, 먼저 PrivateKey를 생성해줍니다.
genrsa -des3 -out 키이름 2048
를 실행하면
비밀번호까지 두번 입력하면
비밀번호가 담긴 개인키를 만들수 있다 .
공인인증서의 경우는 비밀번호가 필요하지만.....
https의 ssl 인증서에는 서비스등록할때마다, 비밀번호를 입력해줘야하기 때문에,
비밀번호가 없는 키를 새로 만들어주자..
genrsa -out 키이름 2048
비밀번호가 없는 private키를 새롭게 발급하였다.
생성된 private.key를 확인해보면 아래와 같은 키가 생겨있는걸 알수 있다.
이제 아래 명령어로 해당 개인키와 쌍이되는 공개키를 뽑아내보자
rsa -in <개인키> -pubout -out public.key
개인키와, 공개키가 생성되었다!
2. CSR( 인증요청서 ) 만들기
CSR이란 ?
SSL 인증의 정보를 암호화하여 인증기관에 보내 인증서를 발급받게하는 신청서입니다.
정보항목에는 국가코드, 도시, 회사명, 부서명, 이메일, 도메인주소 등이 들어가있습니다.
다음 명령어로 CSR을 생성합니다.
req -new -key private.key -out private.csr
req -new -key <키> -out CSR이름csr
명령어 진행후 , 추가 사항을 입력하면 됩니다.
( 개발용이기때문에 아무 정보나 입력했습니다. )
3. CRT( 인증서 ) 만들기
CSR까지 생성했다면, CRT는 그냥 만들수 있지만,
나는 나만의 사설 CA에서 인증까지 받은 인증서를 만들어보려고한다.
먼저 인증서의 서명을 해줄 rootCA가 필요하다.
3-1> rootCA.key 생성하기!
genrsa -aes256 -out rootCA.key 2048
genrsa <암호화 알고리즘> -out 키이름 2048
3-2> rootCA 사설 CSR 생성하기
rootCA.key를 사용하여 10년 짜리 rootCA.pem을 생성한다.
req -x509 -new -nodes -key rootCA.key -days 3650 -out rootCA.pem
(임시로 국가,도시, 회사, 도메인,메일 등을 입력했습니다.)
3-3> CRT 생성
[2]에서 만들었던 csr을 나만의 커스텀 CA인 rootCA의 인증을 받아 private.crt로 생성합니다.
x509 -req -in private.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out private.crt -days 3650
파일을 확인해보면 CRT를 확인할수 있습니다!
인증서를 확인할수 있습니다.
저는 TOMCAT에 인증서를 적용할것이기 때문에 pkcs12라는 형식으로 바꿔줍니다.
1. >
pkcs12 -export -in private.crt -inkey private.key -out .keystore -name tomcat
자이제
.keystore를 사용하여 SSL 통신을 구현할 수 있습니다.
참조
http://joonjava.blogspot.kr/2015/05/tomcat-ssl-2-ca.html
https://blog.hangadac.com/2017/07/31/%ED%99%88%EC%84%9C%EB%B2%84-%EA%B5%AC%EC%B6%95%EA%B8%B0-ssl-%EC%9D%B8%EC%A6%9D%EC%84%9C-%EB%A7%8C%EB%93%A4%EA%B8%B0-%EC%97%B0%EC%8A%B5/
------------------------------------------
해당 본문 내용은 openssl을 사용한 사설 인증서 발급 방법 입니다.
보통 공인 ssl 인증서의 경우는 도메인 및 기타비용이 필요할수 있습니다.
공인 ssl 발급을 원하시는경우 아래 링크를 참조하세요
http://trend21c.tistory.com/777
'개발일지' 카테고리의 다른 글
[날씨 API 사용하기]OpenWeatherMap을 이용한 날씨 API를 사용해보자! (17) | 2018.03.10 |
---|---|
[SSL]HTTPS 통신을 위한 Tomcat SSL 설정하기 (13) | 2018.02.06 |
[Oracle] Varchar2 에서 CLOB으로 DB 컬럼 변경/수정하기 (0) | 2017.07.13 |