본문 바로가기
개발관련/Spring

[Spring Security] SSL인증서 설치 후 세션보안 설정하기 (Spring5 servlet 3.1)

by joa-yo 2023. 2. 13.
반응형

http에서 https로 변경했다고 해서 모든 보안문제가 해결된 것은 아닙니다. 클라이언트와 서버가 데이터를 주고 받을 때 암호화가 적용되어 내용을 보호할 수 있지만, Session 탈취문제를 완벽하게 보호하지 못합니다. 그래서 조금이나마 보안을 강화하기 위한 설정들을 해보았습니다.

 

 

1. HTTP에서 HTTPS로 리다이렉트 처리

    <http use-expressions="false">
    	...
        <session-management>
            <concurrency-control expired-url="/login.do" />
        </session-management>
        <port-mappings>
            <port-mapping http="8080" https="8443"/> <!-- (1) -->
        </port-mappings>
        ...
        <intercept-url pattern="/resources/**" access="ROLE_USER"  requires-channel="https"/> <!-- (3) -->
        <intercept-url pattern="/**" access="ROLE_USER"  requires-channel="https"/> <!-- (2) -->
    </http>

위 코드는 Spring Security의 Security-context.xml에 설정한 일부 코드입니다. Security를 이용하여 https연결설정을 해볼까요?

 

  1. 서버의 설정파일인 server.xml에서  Connector 설정을 확인하시거나, 어플리케이션에서 정의한 포트번호를 확인하여, http포트와 https포트를 지정해줍니다.
  2. requires-channel을 https로 설정하여, https로만 연결될 수 있도록 설정합니다. 이렇게 해두시면 http로 접속했을 때 자동으로 https로 연결됩니다.
  3. 만약에 정적 자원은 http로 연결되어도 상관없으시면 설정된 경로를, http로 설정하셔도 됩니다.

 

2. 추가적인 보안 설정

Session 보안설정

## web.xml

<session-config>
  <cookie-config>
    <http-only>true</http-only>
    <secure>true</secure>
  </cookie-config>
  <session-timeout>60</session-timeout> <!--단위 분-->
</session-config>

web.xml에 위와 같은 설정을 해줍니다.

  • httpOnly옵션은 javascript에서는 cookie를 탈취하지 못하도록 설정한 것입니다. 이는 XSS공격에 의해서 세션아이디 값이 노출되는 것을 방지합니다.
  • secure를 true로 설정해주어, https에서만 sessionID값이 전달되도록 하여, 암호화되지 않은 SessionID가 전송되는것을 방지합니다.
  • session-timeout을 설정하여, session이 해당 시간동안만 유지될 수 있도록 설정합니다. 예시는 60분으로 설정한 것입니다.

 

 

위와같은 설정만 해주셔도 SessionID 탈취에 대한 보안 위협은 상당히 줄어들 것입니다.

 

반응형

댓글