TLS / SSL 소개
- 웹 브라우저와 웹 서버 간의 통신을 안전하게 보장하는 기술이다.
- 데이터를 보낼 때 데이터를 암호화하고, 데이터를 받을 때 암호화된 데이터를 복호화 하는 식의 기본 구조를 갖는다.
- 이 통신 구조는 양방향 이기 떄문에, 웹 브라우저와 웹 서버 모두 데이터를 내보낼 때 암호화를 진행한다.
TLS / SSL 인증
- 웹 브라우저에서 암호화된 연결로 웹 서버와 통신하려고 하면, 웹 서버에서 브라우저에게 몇가지 증명서(Certificate)를 요구한다.
- 이 증명서는 클라이언트 인증 (Client Authentication) 이라고 하며, 개인 사용자 간 보다는 B2B 형태에서 더 많이 사용된다.
- 대부분의 SSL-enabled 웹 서버 는 클라이언트 인증을 요구하지 않는다.
Certicates 인증서
- SSL 를 구현하려면 웹 서버에 Certificate이 있어야 하는데, 이 Certificate 은 암호화된 연결을 수용하는 외부 인터페이스를 보장해준다.
- 이러한 SSL 설계 방식은 “서버에서 어떤 형태로든 내가 생각했던 상대방이 맞다” 라는 것을 서버에서 증명하는 것이다
- Certificate 은 암호화되어 발급되는데, 최초 발급자 말고는 사실 발급하기가 매우 힘들다.
- 방문자 브라우저에서 해당 사이트를 접근하면 보통 경고가 뜨는데, 이때
Certificate Authorities
라는 신뢰되는 3rd 파티에 서명하면 경고가 뜨지 않는다. - Java 에서는 상대적으로 단순한
keytool
커맨드라인 툴을 제공하고, 명령어로self-signed
Certificate 을 생성할 수 있다. - Self-signed Certificates 는 사용자가 간단하게 생성한 인증서이기 때문에 테스트 시나리오에 적합하고, 실제 상용제품에는 적합하지 않다.
SSL 구동시 팁
- SSL 로 웹 사이트를 구성할 때는 모든 사이트 자원들울 SSL 로 제공해야 한다. 이렇게 하면 해커들이 자바스크립트 파일 등에 악성 컨텐츠를 넣을 수가 없어 보안을 우회할 수가 없다.
- 웹 사이트의 보안을 강화하고 싶으면 HSTS header 를 사용하는 것도 고려해봐야 한다.
- HSTS header : 브라우저에서 항상 HTTPS 통신으로 사이트를 접근하게 한다.
Tomcat 에서 인증서 설정하기
Certificate Keystore 준비하기
- Tomcat 에서 수용하는 keystore 타입은 JKS, PKCS11 또는 PKCS12.
- JKS : Java 표준 키스토어 형식. JDK 에 포함된
keytool
커맨드 라인툴로 생성 가능 - PKCS12 : 인터넷 표준 형식. Open SSL 이나 Microsoft Key-Manager 로 조작 가능
- JKS : Java 표준 키스토어 형식. JDK 에 포함된
- keystore 의 목록들은
alias
의 문자열 값으로 구분할 수 있다. 대부분은 대소문자 구분을 하지 않지만,PKCS11
형식은 대소문자 구분을 한다. - OpenSSL 을 이용하여 당신의 CA로 서명된 Certificate 을
PKCS12
keystore 에 임포트하려면 아래 명령어를 사용한다.123openssl pkcs12 -export -in mycert.crt -inkey mykey.key
-out mycert.p12 -name tomcat -CAfile myCA.crt
-caname root -chain
JKS
keystore 를 새로 생성하려면 아래 명령어를 커맨드창에서 실행한다.12345Windows:
"%JAVA_HOME%\bin\keytool" -genkey -alias tomcat -keyalg RSA
Unix:
$JAVA_HOME/bin/keytool -genkey -alias tomcat -keyalg RSA
- 위 명령어의 결과는 실행한 위치의 홈 디렉토리 아래에
.keystore
라는 이름의 새로운 파일을 생성한다. - 만약 다른 위치나 파일이름을 지정하고 싶으면,
-keystore
변수를 사용한다. (변경된 위치 또한 server.xml 에 반영해줘야 함)1234567Windows:
"%JAVA_HOME%\bin\keytool" -genkey -alias tomcat -keyalg RSA
-keystore \path\to\my\keystore
Unix:
$JAVA_HOME/bin/keytool -genkey -alias tomcat -keyalg RSA
-keystore /path/to/my/keystore
- 위 명령어를 실행하면 비밀번호를 입력하라는 창이 나오는 데 default 값은
changeit
으로 되어 있다. 원하는 비밀번호로 변경이 가능하고, 이 또한 server.xml 에 반영해줘야 한다. - 비밀번호를 입력하고 나면, 회사 / 이름 등에 대한 일반적인 정보를 입력하라고 한다. 이 정보는 이후 사용자가 암호화된 페이지 접근시에 표시된다.
- 마지막으로, 인증서(Certificate) 에 대한 key password 를 입력한다. 별도로 비밀번호를 입력하지 않고 엔터를 치면 위 1번에서 사용한
keystore
의 암호와 동일하게 입력된다.
Tomcat Configuration 파일 변경하기
- 톰캣은 SSL 통신 구현방법에는 JSSE, APR 2가지가 있다.
- JSSE : Java 런타임에서 제공.
- APR : OpenSSL 엔진을 기본값으로 사용.
- 여기서 JSSE connector 를 정의하는 방법은
- APR 을 사용하려면
- Configuration 을 위한 최종 단계는
$CATALINA_BASE/conf/server.xml
에 Connector 를 설정하는 것이다.
- 위 절차를 모두 마치면 브라우저에서
https://localhost:8443/
를 입력했을 때 Tomcat 기본페이지를 볼 수 있다.
출처 : https://joshuajangblog.wordpress.com/tag/%ED%86%B0%EC%BA%A3-ssl-%EC%84%A4%EC%A0%95%EB%B0%A9%EB%B2%95/
'Server, WAS > Tomcat' 카테고리의 다른 글
Apache Tomcat 가이드 - 설치부터 서비스 등록까지 (0) | 2021.03.18 |
---|---|
[tomcat] tomcat service 등록 (0) | 2020.09.07 |
[tomcat]리눅스 환경에서 war배포 후 404에러 뜨는 경우 (0) | 2020.09.07 |
Tomcat 8 / tomcat rfc 7230 rfc 3986 오류 (0) | 2020.02.04 |
tomcat server.xml 의 connector 설정 값. (0) | 2018.10.05 |
Linux Apache2, Tomcat 연동 및 로드밸런싱 설정 (0) | 2018.09.03 |
Linux Tomcat 다중으로 설치하기 (0) | 2018.09.03 |
리눅스 서버 부팅시 Tomcat 자동 실행 (0) | 2018.09.03 |