이전 글에서 인증 서버를 로컬에서 실행 시켜봤다.
로그인 화면은 확인 했지만 계정이 존재하지 않기 때문에 로그인이 되지는 않았다.
그리고 HTTPS 로 연결해야 SSO를 제대로 사용할 수 있다고 했다.
아래 이미지는 이전 글에서 봤던 로그인 페이지이다.
현재는 로그인이 불가능하며, 노란색 박스를 보면 HTTPS 관련 경고 문구가 있다.
이번 글에서는
- 로컬 SSL 키 저장소를 생성해서 HTTPS로 인증 서버를 구현해보자.
위 내용에 대해서 작성하겠다.
먼저 로그인 화면에서 보여지는 HTTPS 관련 에러 문구를 지워보도록 하자.
첫번째!!!!
우선 터미널을 실행시키고 cas-server/src/main/resources/etc/cas 디렉토리로 이동하자.
그리고 다음 명령어를 실행하자.
keytool -genkey -keyalg RSA -alias thekeystore -keystore thekeystore -storepass changeit -validity 360 -keysize 2048
그리고 아래와 같이 입력한다.
** 입력 시 주의사항 **
이름과 성, 조직 이름 및 단위에 대한 정보를 입력할 때에는 인증 서버의 domain을 입력하는 것이 다.
localhost로 테스트 할 것이라면 localhost를 사용해야 한다.
만약 cas.server.com 으로 테스트 하려면 cas.server.com 을 입력하고 hosts 파일(윈도우즈 기준) 을 수정해서 사용하면 된다.
이 작업을 수행하지 않으면 SSL 핸드 쉐이크 중에 오류가 발생할 수 있다!!
위 내용을 요약하면 현재 디렉토리에 이름이 thekeystore 이고, Password가 changeit 인 키 저장소를 생성한다.
두번째!!!!
다음 단계는 생성 된 저장소를 클라이언트 응용 프로그램에서 사용할 수 있도록 .crt 형식으로 export 하는 것이다.
동일한 디렉토리에서 다음 명령을 실행하여 생성 된 thekeystore 파일을 keystore.crt 로 export 하자.
암호는 동일하게 하자.
keytool -export -alias thekeystore -file thekeystore.crt -keystore thekeystore
디렉토리에 thekeystore.crt 파일이 생성된 것을 확인할 수 있다.
이제 export 된 thekeystore.crt를 Java cacerts 키 저장소로 import 하자.
아래와 같이 입력하자.
keytool -import -alias thekeystore -storepass changeit -file thekeystore.crt -keystore "C:\Program Files\Java\jdk1.8.0_151\jre\lib\security\cacerts"
이 때, Java cacerts 키 저장소의 위치는 클라이언트 Application에서 사용되는 JRE와 동일해야 한다.
확인을 해보자.
빨간색 박스로 표시한 파일은 인증서를 import 하기 전 원본 cacerts 파일이다.
파란색 박스로 표시한 파일은 인증서를 import 한 복사본 cacerts 파일이다.
몇번 더 추가해보면 알겠지만 파일 크기가 증가한다. 인증서가 추가되는 것이다.
다시 말하면 원본 cacerts 파일을 복사하지 않고 새 파일로 추가하게 되면 해당 JRE를 사용하는 다른 Application이 SSL 핸드쉐이크를 할 때 문제가 생길 수 있다는 말이다.
프로젝트를 thekeystore 키 저장소가 있다.
그리고 application.properties 에 key 정보를 입력하자.
그리고 다시 실행해보자.
https://localhost:8443/cas/login
이전 글에서 봤던 로그인 화면이랑 조금 달라졌다.
HTTPS 관련 경고 문구가 사라졌다. 그리고 URL을 확인하면 HTTPS 가 적용된 것을 확인할 수 있다.
추가로..
로컬에 설치 되어 있는 Tomcat을 사용할 경우 다음과 같이 적용하면 된다.
먼저 설치된 Tomcat 디렉토리 위치에서 conf 디렉토리로 이동한다.
그곳에 위치한 server.xml 파일을 다음과 같이 수정한다.
keystoreFile : 이 곳은 생성한 keystore의 위치를 입력하자.
keystorePass : keystore 생성 시 입력했던 암호를 입력하자.
그리고 나서 다음과 같이 주석을 하자.
그리고 실행 설정을 추가하자.
**주의 사항**
Windows에서는 application.properties 파일의 server.context-path 설정이 적용되지 않았다.
때문에 Tomcat 설정의 DEPLOYMENT 탭에서 Application context를 /cas로 설정해도, 'https://localhost:8443/cas/login'으로 접근이 가능했다.
하지만 MacOS에서는 두개 모두 적용이 되어서 'https://localhost:8443/cas/cas/login' 으로만 접근이 가능했다.
다음 글에서는 계정을 추가하는 방법에 대해서 쓰겠다.
'개발 > [Spring] 인증' 카테고리의 다른 글
[SSO] CAS 인증서버 (5) - JDBC인증 등록과정 (1) | 2019.06.13 |
---|---|
[SSO] CAS 인증서버 (4) - 샘플 프로젝트 : 사용자 계정 JDBC 인증 (1) | 2019.04.30 |
[SSO] CAS 인증서버 (3) - 샘플 프로젝트 : 사용자 계정 static 인증 (0) | 2019.04.29 |
[SSO] CAS 인증서버 (1) - 샘플 프로젝트 : 시작하기 (0) | 2019.04.24 |
SSO(Single Sign On) (0) | 2019.04.23 |