2022. 4. 1. 00:58ㆍWEB
안녕하세요.
자이손 입니다.
오늘은 SSL(Secure Socket LAyer)를 설정해보도록 하겠습니다.
설정하기전 잠시 SSL에 대해서 소개하자면!!!
SSL은 Netscape사에서 웹서와 웹브라우저간의 보안을 위해 만들어 졌습니다.
사용하는 보안 키 종류로는 공개키/개인키/대칭키 기반으로 사용이 됩니다.
보통 https로 통신하는 웹사이트를 이용하다보면
웹 브라우저에 주소표시줄에 좌물쇠 표시를 볼수 있는데,
해당 좌물쇠를 눌러보면 인증서의 대한 정보를 볼수 있습니다.
이 인증서는 제 3자 인증기관에서 발급 받을수 있으며,
인증서에는 해당 사이트의 공개키와 사이트 정보들이 담겨져 있습니다.
인증서가 전송 될때는 인증기관이 제공하는 개인키로 암호화 하여 전송됩니다.
그래서 오늘 만들어볼 SSL 인증서는 JKS(Java Key Store) 입니다.
JKS는 Java 기반의 독자 인증서 바이너리 포맷으로 개인키, 서버인증서, 루트인증서, 체인인증서를
모두 담을 수 있어서 SSL 인증서 파일 관리시 유용한 포멧 입니다.
Java 전용의 키 저장소(바이너리 이진 파일)이므로 다른 프로그래밍 언어는 사용할 수 없음을 참고하세요.
이외에 사용하는 포멧은 pfx(personal Information Exchange format) ,p12 등이 있습니다.
자 이제 설명이 끝났으니 인증서를 발급 받아보겠습니다.
1. SSL 인증서를 제공해주는 사이트를 찾아봅시다.
(저는 https://sslsecurity.kr/ 에서 제공하는 SSL 서비스를 이용하였습니다.)
사이트별로 구성이 다를 수 있으니 화면은 참고만 부탁드립니다.
2. 서비스 하는 사이트를 찾았다면 사용하려는 용도, 기간, 금액에 따라 사용하려고 하는 SSL을 신청합니다.
(저는 BASIC으로 선택하였습니다)
3. 사용하려고 하는 도메인명을 입력해 줍니다.
다음 CSR 을 등록해야 하는데 CSR을 만드는 방법을 알아보자!
4. openssl을 이용하여 CSR을 만들어보자
저는 mac을 사용하기에 터미널에서 openssl을 이용하였습니다.
먼저, CSR을 만들기 위해서 mac에 openssl을 설치해줍니다.
$brew install openssl
설치가 잘 되었는지 확인해봅시다.
5. Private key를 생성해 주자.
$openssl genrsa -out private 2048
그럼 아래와 같이 파일이 만들어 집니다.
이 파일이 어떻게 만들어져 있는지 cat 명령어를 시용하여 내부를 확인해보면
*private.key는 jks 나 pkcs12(.p12, pfx)를 생성할 때 사용하므로 절대 분실하면 안됩니다.
$cat private.key
위와 같이 key가생성된것을 확인할 수 있습니다.
6. Public key를 생성해보자
$openssl rsa -in private.key -pubout -out public.key
public key가 잘 생성 되었는지 확인해보자
$cat public.key
잘 만들어졌다.
7. CSR(Certificate Signing Request) 인증서 서명을 만들어보자
인증서 발급을 위해 필요한 정보를 담고 있어야 하는데 인증서 신청 형식은 아래 표와 같다.
구분 | 작성 예 |
Country Name (국가코드) | KR |
State or province name (시/도의 이름) | Geumcheon-gu |
Locality Name (시/군/구 등의 이름) | Gyeonggi-do |
Organization (회사 이름) | You've got frend |
Organization Unit(부서명) | develop |
Common Name (SSL 인증서를 설치할 서버의 Full Domain) | www.youfriend.kr |
Email (이메일) | jason@youfriend.kr |
Password (비밀번호) | ****** |
* 주의 사항
Common Name에 인증서를 적용할 사이트의 도메인이 들어가야 합니다.
# openssl 을 이용하여 csr을 생성
$openssl req -new -key private.key -out private.csr
CSR 이 잘 생성되었는지 내부를 살펴보자
$cat private.csr
코드가 잘 생성 되었다.
8. CSR을 만들어서 인증서를 요청합니다.
사용하는 도메인 명을 입력하면 아래와 같이 CSR을 입력하는 란이 나오는데,
SERVER SOFTWARE에서 Apache-ModSSL을 선택해 줍니다.
9. 생성된 CSR을 등록후 정보가 맞는지 확인해봅시다.
코드를 넣고 '신청하기'를 누르면 아래와 같이 형식에 맞게 들어가게 됩니다.
10. email에서 수신된 ssl 인증 번호 확인 확인합니다.
얼마 시간이 지나면 ssl 관련 서비스를 지원하는 기관에서 이메일을 보내주는데
아래 코드를 복사하여 here을 눌러 아래 Domain Control Validation 안에 넣어주자
인증이 완료 되었습니다.
11. 인증서를 다운 받습니다.
인증이 완료되면 아래와 같이 ssl 인증서를 만들 수 있는 zip 파일을 보내줍니다.
다운 받은 파일을 확인해 봅시다.
위와 같은 파일들이 만들어진 것을 확인할 수 있습니다.
Chain.crt를 적용하지 않으면 안드로이드 브라우저에서는
ssl 인증서가 적용 되지 않는다고 하니 필수로 적용해야 합니다.
이 파일들을 이용해 이제 JKS 파일을 만들어 봅시다.
12. 인증서를 통합한다.
ChainCA + RootCA로 pem 파일을 생성해 줍니다.
$cat ChainCA1.crt ChainCa2.crt RootCA.crt > my_cert.pem
13. pfx 포맷으로 변환해 줍니다.
$openssl pkcs12 -export -name utongstart.com -in my_cert.pem -inkey private.key -out my_cert.pfx
- name : 도메인 명
- in : 12.에서 생성한 pem 파일 (ex : my_cert.pem)
- inkey : 5. 에서 생성한 key 파일 (ex : private.key)
- 생성하려는 파일
14. pfx이 생성 되었으면 JKS 파일을 생성해 봅시다.
$keytool -importkeystore -srckeystore my_cert.pfx -srcstoretype pkcs12 -destkeystore my_cert.jks -deststoretype jks
완성되었습니다.
SSL 인증서 발급하는걸 진행해 보았는데요.
많은 도움이 되시길 바랍니다.
다음에 또만나요 자이손이였습니다
감사합니다.