TimeStampHasCreationTimeInFuture in WCF Security

Posted in .NET Framework // Posted at 2013. 5. 14. 18:37
728x90

WCF 서비스의 보안 모드를 Message 보안으로 하고 클라이언트 자격증명 타입을 UserName으로 한 후,

테스트 X.509 인증서를 생성해서 자격 증명, 암호화, 디지털 서명 등이 잘 되는지 확인을 완료했다.

 

그리고 알파 서버로 서비스를 셋팅하고 테스트를 해 보니 보안 예외가 계속 발생한다.

 

이벤트 로그를 보면 다음과 같은 로그가 남겨져 있다.

 

MessageSecurityException: The security timestamp is invalid because its creation time ('2013-05-14T03:40:51.287Z') is in the future. Current time is '2013-05-14T03:33:46.020Z' and allowed clock skew is '00:05:00'.

 

개발 PC에 서비스와 클라이언트를 모두 구동할 때는 발생하지 않던 것이, 서버를 옮긴 후 발생하는 것이다.

서버와 클라이언트 PC의 시간차에 의한 보안 예외가 발생한 것이다.

 

즉 메시지가 생성된 시점의 타임스탬프의 유효기간을 체크함으로써 재 전송 공격(Replay Attacks)을 방지하기 위한 보안 메커니즘에 위배된다는 것이다.

 

그런데 이 보안 매커니즘이 대략 난감한 상황이 될 수도 있다.

클라이언트와 서버의 시간이 어쩔 수 없이(?) 다를 수 밖에 없는 환경이거나 안정적인 타임 서버 기반으로 시간 동기화를 하지 못하는 경우에 어느 시점에 시간 차가 날지 예측할 수 없기 때문이다.

 

기본 보안 설정에서는 두 서버의 허용 시간 차가 5분이다.

 

서버와 클라이언트 시간을 동기화 해 주지 않는 이상 5분 이라는 최대 허용 시간을 늘릴 수 밖에 없는데...

문제는, 이 것이 간단히 속성 값 변경으로 될 수 없다는 것이다.

 

WCF의 커스텀 바인딩을 통해 최대 허용 시간을 변경할 수 있다고 하니, 대략 귀찮아 지게 생겼다.

 

http://msdn.microsoft.com/en-us/library/ms733063.aspx

http://www.danrigsby.com/blog/index.php/2008/08/26/changing-the-default-clock-skew-in-wcf/

http://msdn.microsoft.com/en-us/library/aa738468.aspx

 

 

 

'.NET Framework' 카테고리의 다른 글

Bit Flag of Enum  (0) 2013.05.28
TimeStampHasCreationTimeInFuture in WCF Security 2  (0) 2013.05.23
serviceThrottling in WCF  (0) 2013.05.13
Stored Procedure return value in Entity Framework  (0) 2013.05.09
Generic DataContract in WCF  (0) 2013.05.09