본문 바로가기
아이티 공부/리눅스

톰캣에 Keytool을 이용해 SSL 설정하는 방법 및 개념

by Klero 2018. 7. 29.
TLS & SSL 개념

 

TLS : Tansport Layer Security
SSL : Secure Sockets Layer

 

- 웹 브라우저와 웹 서버간의 통신을 안전하게 보장하는 기술로 양방향 통신을 합니다.
그리고 웹 브라우저가 데이터를 보낼 때 암호화하고, 웹 서버에 데이터를 받을 때 암호화된 데이터를 복호화
합니다. 즉 웹 브라우저와 웹 서버 모두 데이터를 내보낼 때는 암호화를 진행한다고 볼 수 있습니다.

 

여기서 웹 브라우저가 웹 서버와 통신하려고 할 때, 웹 서버는 웹 브라우저로 증명서(Certificate) 를 요구합니다.

 

- SSL을 구현하기 위해서는 웹 서버에 증명서(Certificate)가 필요합니다.
이 증명서(Certificate)를 통해 웹 브라우저와 웹 서버간의 통신을 안전하게 할 수 있습니다.

 

결국 SSL 에는 증명서(Certificate)가 꼭 필요합니다.

 

Certiciate 확장자 파일 설명

 

- .csr : Certificate Signing Request 약자로 인증서를 서명하기 위해 인증기관에 보내기 위한 파일 
- .crt : 인증서, 인증기관으로 부터 받은 데이터 및 공개 키에 대한 서명이 포함되어 있는 파일

 

웹브라우저 상의 SSL 적용 확인

 

- SSL이 적용된 사이트로 HTTPS로 안전하게 통신합니다. (공인된 CA 인증서)

 

 

 
 

 

- SSL이 적용되지 않은 사이트로 HTTPS 통신이 아닌 HTTP 통신을 합니다.

 

 

- SSL이 적용은 되었지만, 인증서가 보장되지 않은 사설인증일 경우(사설CA)
아래처럼 SSL 인증은 되었지만, 안전하지 않음으로 나타납니다.

 

 
keytool을 통한 인증서 발급 전체적인 절차

 

1. keytool 명령어를 통해 keystore 파일을 만든다. (확장자는 jsk로 해도 무방, 개인키라고 보면 됩니다.)
예:) /home/klero/jdk1.8.0_172/bin/keytool -genkey -keyalg RSA -sigalg SHA1withRSA -alias tomcat -keystore /home/klero/tomcat.keystore

 

2. 생성된 파일 확인
예:) keytool -list -keystore tomcat.keystore  

 

3. keystore 파일을 통해 csr 파일을 생성한다.
예:) keytool -certreq -alias tomcat -keyalg RSA -sigalg SHA1withRSA -file tomcat.csr -keystore tomcat.keystore

 

4. csr 파일을 인증업체에 제출하여 crt 파일들이 포함된 파일을 받는다.

 

5. crt 파일이 포함된 파일을 서버에 업로드 한다.
예:) zip 파일안에 여러 crt 파일이 포함되어 있을 것이다.

 

root.crt
1_cross_Intermediate.crt
2_issuer_Intermediate.crt
3_user_mydomain.co.kr.crt

 

6. keytool 명령어를 통해 서명이된 crt 파일들을 keystore 파일에 임포트 한다.
예:)
keytool -import -trustcacerts -alias WoSignROOT -file root.crt -keystore tomcat.keystore
keytool -import -trustcacerts -alias CrossINTER -file 1_cross_Intermediate.crt -keystore tomcat.keystore
keytool -import -trustcacerts -alias IssuerINTER -file 2_issuer_Intermediate.crt -keystore tomcat.keystore
keytool -import -alias tomcat-file 3_klerodomain.co.kr.crt -keystore tomcat.keystore

 

7. keystore 내용을 확인한다.
예:) keytool -list -v -keystore tomcat.keystore

 

8. 톰캣 설정 파일을 변경 및 확인한다.

 

9. 톰캣 재기동
 
톰캣 설치후 확인
 
1. 톰캣 설치 및 실행
(톰캣 공식홈페이지의 8.5.32 버전 다운받아 진행)

 

# tar -xvf apache-tomcat-8.5.32.tar.gz

 

2. JDK 설치(자바에서 제공해주는 표준 키스토어 형식인 JKS를 keytool 커맨트로 생성하기 위함)

 

- jdk 설치파일 복사(jdk-8u172-linux-x64.tar.gz)
- 환경설정 파일 수정(테스트라 root 계정으로 진행)
 
# echo 'export PATH=$PATH:/root/jdk1.8.0_172/bin' >> ~/.bashrc
# echo 'export JAVA_HOME=/root/jdk1.8.0_172' >> ~/.bashrc
# source ~/.bashrc
# java -version

 

3. JKS 키스토어 생성

 

- 아래 명령어는 홈 디랙토리 아래에 .keystore 파일 생성한다.
변경된 내용은 server.xml 업데이트 필요
# /root/jdk1.8.0_172/bin/keytool -genkey -keyalg RSA -sigalg SHA1withRSA -alias tomcat -keystore /root/tomcat.keystore
 
- 또한 위 명령어를 실행하면 아래와 같이 진행된다. 디폴트 패스워드는 changeit 으로 되어 있다.
비밀번호는 원하는대로 변경 가능하며 변경된 내용은 server.xml에 업데이트 해야 된다.
마지막에 인증서(Certificate)에 대한 Key Password를 입력하는데 그냥 엔터치면 
맨 위에서 설정한 keystore 패스워드와 동일하게 설정된다.

 

Enter keystore password:
Re-enter new password:
What is your first and last name?
  [Unknown]:  lim
What is the name of your organizational unit?
  [Unknown]:  TEST
What is the name of your organization?
  [Unknown]:  TEST
What is the name of your City or Locality?
  [Unknown]:  GURO
What is the name of your State or Province?
  [Unknown]:  SEOUL
What is the two-letter country code for this unit?
  [Unknown]:  KR
Is CN=klero, OU=no, O=no, L=seoul, ST=oo, C=oo correct?
  [no]:  y
Enter key password for <tomcat>
        (RETURN if same as keystore password):
Re-enter new password:
Warning:
The JKS keystore uses a proprietary format. It is recommended to migrate to PKCS12 which is an industry standard format using "keytool -importkeystore -srckeystore /root/.keystore -destkeystore /root/.keystore -deststoretype pkcs12".
 
4. 톰캣 설정 파일 수정
- 톰캣 SSL 통신 구현 방법에는 JSSE , APR 이 존재한다.
JSSE : 자바 런타임에서 제공
APR : OpenSSL 엔진을 기본값으로 사용
- JSSE를 사용해보겠다.
# vi /root/apache-tomcat-8.5.32/conf/server.xml

 

<Connector SSLEnabled="true" URIEncoding="UTF-8" clientAuth="false"
                    keystoreFile="/root/tomcat.keystore" keystorePass="tomcat" maxThreads="200"
                    port="443" protocol="org.apache.coyote.http11.Http11NioProtocol" scheme="https"
                    secure="true" sslProtocol="TLS"/>

 

# pwd
 
/root/apache-tomcat-8.5.32/bin

 

# sh startup.sh

 

5. 웹 브라우저를 통한 접속 확인
- 공인된 인증서가 아니므로 안전하지 않음이라고 뜸 하지만 접속은 잘 된다.

 

 

 

댓글