2017-11-16 1 views
-1

TLS (over TCP)를 통해 클라이언트의 요청을받는 서버 측 소프트웨어에서 작업하고 있습니다. 더 나은 성능과 사용자 경험을 위해 모든 요청에 ​​대해 완전한 핸드 셰이크를 피하고 싶습니다. 이상적으로 클라이언트는 대부분 세션이 유휴 상태 일지라도 몇 시간 동안 서버와 TLS 세션을 설정할 수 있습니다. 동시에 높은 처리량이 필요합니다.이벤트 드라이브 TLS 서버

하나의 쉬운 방법은 각 세션마다 스레드를 전용하고 처리량을 높이기 위해 큰 스레드 풀을 사용하는 것입니다. 그러나 동시 세션의 수십만 개를 원한다면이 방법의 성능 오버 헤드가 커질 수 있습니다.

높은 처리량 요구 사항으로 인해 이벤트 중심 모델이 생겼습니다. 아이디어는 연결이 유휴 상태 (즉, 기본 소켓에서 IO 이벤트 없음) 일 때 TLS 서버는 다른 연결을 제공하기 위해 컨텍스트를 전환 할 수 있습니다. 문제 중 하나는 소켓이 유휴 상태 일 때 전체 TLS 세션 컨텍스트를 고정시키고 소켓이 읽기/쓰기 가능하게 될 때 검색하는 것입니다.

TLS에 이미 지원되는 기능이 있는지 궁금합니다. 캐시와 티켓 모두 관련성이 있습니다. 또한 사람들이이 아이디어를 구현했는지 궁금합니다.

답변

-1

당신은 SSL 세션 재개에 대해 이야기하고 있으며 이미 OpenSSL과 JSSE 모두에서 구현되고 있으며 다른 모든 SSL API를 사용할 예정입니다. SSL 세션은 이미 연결에서 유지됩니다. 그래서 이것을 얻으려고 아무 것도 할 수 없습니다.

'SSL 세션 컨텍스트 정지 중'부분은 완전히 무의미합니다.

+0

글쎄, 그 OpenSSL은 이벤트 구동 형이 아닙니다. 그래서 내 자신의 이벤트 중심 TLS 서버를 작성하고 있습니다. 당신이 그렇게 단순하다고 생각한다면, 소켓이 바이트를받을 때 무엇을해야하는지 말해 줄 수있을 것입니다. 어떤 SSL 세션이 소켓과 연결되어 있는지 조회하고 (예 :'SSL_set_session'에 의해) 세션 컨텍스트를 다시 시작한 다음 데이터를 올바르게 처리해야한다고 생각합니다. 이 중 어느 것도 필요 없다고 제안 하시겠습니까? – qweruiop

+0

OpenSSL은 논 블로킹 I/O 및'select()'와 연계하여 사용할 수 있습니다. 이미 말씀 드렸듯이 당신이 제안하는 것은 필요하지 않습니다. – EJP

+0

예제 프로그램을 가르쳐 주시겠습니까? 'select()'가 여러 클라이언트 소켓을 읽을 수 있다는 것을 보여 주면 여전히 각각의 해당 SSL 모듈을 읽을 필요가 있기 때문에 어떻게 든 소켓을'SSL *'맵으로 유지해야합니까? 기본 무언가를 놓치고 있습니까? – qweruiop

관련 문제