2010-11-22 3 views
4

SSL을 통해 서버와 통신하는 수명이 짧은 클라이언트 프로세스가 있습니다. 프로세스는 자주 호출되며 짧은 시간 (일반적으로 1 초 미만) 동안 만 실행됩니다. 이 프로세스는 더 큰 작업을 수행하는 데 사용되는 쉘 스크립트의 일부로 사용하기위한 것이며 매우 자주 호출 될 수 있습니다.SSL 핸드 셰이크 성능 향상

시작할 때마다 수행하는 SSL 핸드 쉐이킹이 테스트에서 중요한 성능 병목 현상으로 나타나고 가능한 경우이를 줄이고 싶습니다.

마음에 오는 한 가지는 세션 ID를 가져 와서 어딘가에 쿠키와 같은 종류의 것을 저장하고 다음 호출에서 다시 사용하는 것입니다. 그러나 이것이 내가 생각하기에 불안감을 느끼게합니다. 이 일을 할 때 몇 가지 보안 문제가있을 수 있습니다.

그래서, 나는 몇 가지 질문,

  1. 이 나쁜 생각이있어?
  2. OpenSSL을 사용해도 가능합니까?
  3. SSL 핸드 셰이 킹 프로세스 속도를 높이는 더 좋은 방법이 있습니까?

답변

3

핸드 셰이크가 끝나면 SSL_get_session()으로 연결 한 SSL 세션 정보를 가져올 수 있습니다. 그런 다음 i2d_SSL_SESSION()을 사용하여 디스크에 쓸 수있는 형식으로 직렬화 할 수 있습니다.

다음에 동일한 서버에 연결하려면 디스크에서 세션 정보를로드 한 다음 d2i_SSL_SESSION()으로 세션 정보를 serialize하고 SSL_set_session()을 사용하여 설정하십시오 (SSL_connect() 이전).

디스크 기반 SSL 세션은 도구가 실행되는 사용자 만 읽을 수 있어야하며 오래된 세션을 덮어 쓰고 자주 제거해야합니다.

2

영구 연결을 사용할 수 있습니까? 설정이 1 회성 비용입니까?

연결 논리를 추상화하여 클라이언트 코드가 여전히 일 때이 연결/프로세스/연결 끊기 작업을한다고 생각할 수 있습니다.

2

흥미롭게도 오늘 나는 OpenSSL 핸드 셰이크와 관련된 문제를 만났습니다. Windows에서 RAND_poll을 구현하면 임의의 엔트로피 소스로 Windows 힙 API가 사용됩니다.

불행히도, Windows 7 (및 Server 2008)의 "버그 수정"으로 인해 힙 열거 API (디버깅 API)가 이제는 힙에 할당이 가득 차면 호출 당 두 번째 걸릴 수 있습니다. 즉, SSL 연결과 수락 모두 1 초에서 몇 분 이상 걸릴 수 있습니다.

The Ticket에는 멀리 떨어져있는 핸드 셰이크를 훨씬 빠르게 달성하기 위해 openssl을 패치하는 방법에 대한 좋은 제안이 포함되어 있습니다.

관련 문제