TLS : Transport Layer Security
SSL : Secure Sockets Layer
웹 브라우저와 웹 서버간의 통신을 안전하게 보장하는 기술
데이터를 보낼 때 데이터를 암호화하고, 데이터를 받을 때 암호화된 데이터를 복호화하는 구조
양방향 통신이기 때문에, 웹 브라우저와 웹 서버 모두 데이터를 내보낼 때 암호화를 진행
웹 브라우저에서 암호화된 연결로 웹 서버와 통신하려고 하면, 웹 서버에서 브라우저에게 몇가지 증명서를 요구
증명서는 클라이언트 인증(Client Authentication)이라고 하며, 개인 사용자간 보다는 B2B 형태에서 더 많이 사용됨
대부분의 SSL - enabled 웹서버는 클라이언트 인증을 요구하지 않음
SSL을 구현하려면 웹 서버에 Certificate가 있어야 하는데, 이 Certificate는 암호화된 연결을 수용하는 외부 인터페이스를 보장
이러한 SSL 설계 방식은 "서버에서 어떤 형태로든 내가 생각했던 상대방이 맞다" 라는 것을 서버에서 증명하는 것
따라서, Certificate를 해당 인터넷 주소에 대한 Digital Passport로 볼 수 있음
Certificate는 암호화되어 발급되는데, 최초 발급자말고는 사실 발급하기가 매우 힘들다.
방문자 브라우저에서 해당 사이트를 접근하면 보통 경고가 뜨는데, 이때 Certificate Authorities라는
신뢰되는 3rd 파티에 서명하면 경고가 뜨지 않음
Java에서는 상대적으로 단순한 keytool 커맨드라인 툴을 제공하고, 명령어는 self-signed Certificate를 생성할 수 있음
Self-signed Certificates는 사용자가 간단하게 생성한 인증서이기 때문에 테스트 시나리오에 적합하고, 실제 상용제품에는 적합하지 않음
1) JDK 다운로드 + JAVA_HOME 설정
내pc - 속성 - 고급시스템 설정 - 환경변수 - 시스템 설정
JAVA_HOME : C:\Program Files\Java\jdk1.8.0_92
2) cmd 실행(관리자 권한으로 실행)
cd %JAVA_HOME%/bin
3) keystore 파일 생성
keytool -genkey -alias tomcat -keyalg RSA
입력하면 뜸
Enter keystore password:
Re-enter new password:
이후에 keystore정보관련 입력창들 뜸( ex. What is your first and last name?)
Enter key password for <tomcat>
(RETRUN if same as keystore password):
Re-enter new password:
4) server.xml 파일 수정
<Connector SSLEnabled="true" acceptCount="100" clientAuth="false"
disableUploadTimeout="true" enableLookups="false" maxThreads="25"
port="8443" keystoreFile="/Users/.keystore" keystorePass="password"
protocol="org.apache.coyote.http11.Http11NioProtocol" scheme="https"
secure="true" sslProtocol="TLS" />
해당 구문 추가
Why? 문제 해결방법

인터넷에서는 저런식으로 설정을 변경하면 SSL이 떠야한다고 되었지만 나는 SSL이 계속 뜨지 않았다.

다음과 같은 결과창을 보이면서 성공함!