2013-07-03 5 views
1

네트워크를 통해 통신하는 클라이언트 서버 기반 C++ 응용 프로그램을 보유하고 있으며이 클라이언트 응용 프로그램을 고객에게 배포 할 계획입니다. 내 문제는 다른 응용 프로그램에서 연결 요청을 방지하는 방법을 모르는 것입니다. 즉, 내 클라이언트 응용 프로그램 만 내 서버에 연결할 수 있는지 확인하는 방법입니다. 요청을 내 클라이언트에서 확인하는 가장 좋은 방법은 무엇입니까? 연결을 만들지 않고 이렇게 할 수있는 방법이 없다고 생각합니다.boost asio 클라이언트 인증

+0

동일한 문제가있었습니다. 이것에 대한 나의 해결책은 SSH 터널을 사용하는 것이었다. 미리 터널을 열어야하지만,이 문제를 해결하기 위해 기존 메커니즘에 직접 의존해야합니다. – piwi

답변

0

예 응용 프로그램의 연결 여부를 확인하려면 연결을 수락해야합니다. 당신은 연결 단계에서 세 방향 핸드 셰이크를 사용할 수 있습니다

  1. 클라이언트는 서버가 새 클라이언트에 특정 값 (정수, 문자열 또는 무엇이든)을 전송하는 서버에 연결합니다.
  2. 클라이언트가이 값을 처리하고 새 값을 서버에 보내고 값을 서버에 보냅니다.
  3. 서버는 반환 된 값이 올바른지 확인합니다.

클라이언트의 서버와 동일한 계산 방법이 사용됩니다. 다른 응용 프로그램은 잘못된 값을 반환하면 서비스를 사용할 수 없습니다.

+0

이것은 재생 공격에 취약합니다. – PSIAlt

+0

그렇지 않습니다. 핸드 셰이크를 올바르게 구현하면 재생 공격이 문제가되지 않습니다 ... – nouney

5

asio 님의 내장 SSL 능력을 사용할 수 있습니다. 따라서 각 서버에 대한 sertificates와 클라이언트 sertificates를 생성합니다. 따라서 SSL 핸드 셰이크가 발생하면 서버의 클라이언트 인증서를 확인할 수 있습니다. 보너스로 트래픽이 암호화되고 SSL 보안됩니다. 클라이언트는 서버가 가짜가 아닌지 확인할 수 있습니다. 서버는 클라이언트가 허가되었는지 확인할 수 있습니다.