[Web] HTTP, S?
업데이트:
HTTP와 HTTPS
-
HTTP
인터넷상에서 데이터를 주고 받기 위한 프로토콜 클라이언트와 서버가 주고 받는 데이터는 따로 암호화되어 있지 않아서 악의적인 데이터 감청, 변조의 가능성이 있다. -
HTTPS
HTTP 프로토콜에 암호화가 적용되어 있는 버전으로서 클라이언트와 서버가 주고 받는 모든 데이터가 암호되어있다. 이 때 일전에 간략하게 설명했던 SSL을 사용한다.
SSL(디지털 인증서)
클라이언트는 서버가 보낸 SSL 인증서
를 검증하고 신뢰할 수 있는 서버인지 확인한다.
서버가 신뢰할 수 있는 서버라면 SSL의 공개키
를 이용, 데이터 암호화에 사용될 암호화키를 암호화해 서버에 전달한다.
해당 방식은 대칭키 방식
이며 대칭키를 공유하기위해 RSA 암호화를 사용한다.
아래의 방법을 통해 로컬 테스트용으로 사용할 수 있는 임시 SSL 인증서를 생성할 수 있다.
- SSL 임시 인증서 생성 방법
- JDK 설치 경로 bin 디렉토리 안에 있는 keytool을 찾는다.
-
KeyStore 생성
터미널
내에 명령어를 입력한다.keytool -genkey -alias [keystore 별칭] -keyalg RSA -storetype PKCS12 -keystore [keystore 파일]
-
KeyStore에서 인증서를 추출
터미널
내에 명령어를 입력한다.keytool -export -alias [keystore 별칭] -keystore [keystore 파일] -rfc -file [인증서 파일]
-
trust-store 생성
터미널
내에 명령어를 입력한다.keytool -import -alias [trust keystore 별칭] -file [인증서 파일] -keystore [trust keystore 파일]
임시 인증서가 적용된 https 프로토콜의 로컬 서버의 경우 유효하지 않은 인증서라는 경고가 뜬다.
SSL 적용
SSL을 적용하기 위해서는 properties가 명세되어 있는 파일과 Spring Security에 저장해야한다.
-
properties.yml
인증서 적용을 위한
keystore
파일과truststore
를 프로젝트 내의 resources 디렉토리에 복사후 프로퍼티 설정 파일에 그 파일 이름들을 아래와 같이 명시해야한다.server: port: 443 ssl: enabled: true key-alias: {generated_keystore_alias} key-store: classpath:{generated_keystore_name.p12} key-store-password: {generated_keystore_password} key-password: {key_password} trust-store: classpath:{generated_truststore_name.p12} trust-store-password: {generated_truststore_password}
-
Spring Security
스프링 시큐리티에서는
ChannelProcessingFilter
설정을 통해HTTPS
프로토콜을 거쳐 처리해야하는 웹 요청을 정의해야 한다.@Override protected void configure(HttpSecurity http) throws Exception { http .requiresChannel()//필터 적용 .anyRequest().requiresSecure() ; }
ChannelProcessingFilter 내부에서는
FilterInvocationSecurityMetadataSource
클래스에 SSL이 적용된 http 프로토콜(https)로 처리해야하는 URL이 저장되고 실제적인 처리를ChannelDecisionManager
클래스로 위임하게 된다.
댓글남기기