4

현재 다양한 클라이언트 유형 및 역할에 대한 웹 서비스 노출 인터페이스 그룹이 있습니다.SSL 클라이언트 인증서 확인

배경 :

  • 인증은 SSL 클라이언트 인증서 검증을 통해 처리됩니다. 이것은 이며 현재은 (HTTP 서버가 아닌) 웹 서비스 코드에서 수행됩니다. 우리는 이보다 안전하지 않은 계획을 사용하고 싶지 않습니다. 이 게시물은 인증, 인증에 대해서만 이야기하지 않습니다.
  • 웹 서비스는 SOAP 및 REST (JSON) 모두를 말하며 두 방법 중 하나의 장점에 대한 토론을 시작하는 데 관심이 없습니다.
  • 웹 서비스를 통해 공개 된 모든 작업은 상태가 저장되지 않습니다.

내 문제는 각 요청에 대한 클라이언트 인증서를 확인하는 것이 매우 무거 우며 응용 프로그램 서버에서 CPU 시간을 쉽게 제어한다는 것입니다. 나는 이미 부하를 줄이기 위해 인증 & 응용 프로그램 부분을 다른 물리적 서버에 분리하려고 시도했지만 전반적인 디스패치 속도는 향상시키지 못합니다. 요청이 완료 될 때까지 인증에 일정한 시간이 걸립니다.

성공적인 클라이언트 인증서 확인 후에 HTTP 쿠키 (관련 서버 측 세션과 함께)를 생성하여 인증 횟수를 제한하고 싶습니다. 클라이언트가 인증서를 제공하면 클라이언트 인증서 확인을 건너 뛸 수 있습니다. SSL을 통해 계속 이야기하고 있음). 세션 시간을 제한하고 클라이언트 관점에서 가능한 한 투명하게 프로세스를 만들고 싶습니다.

내 질문 :

  1. 이 안전한 아직인가? (보안 및 실용주의를 위해 어떻게 최적화 할 수 있습니까?)
  2. 이 체계는 무료로 구현됩니까? (CA의 SiteMinder 제품에 대해 알고 있습니다.)
  3. 위와 같이 가정하면 인증을 계속해야합니까? 아니면 서버로 이동해야합니까? 의해 공급 될 때, 클라이언트는 클라이언트 인증서 검증

    스킵되도록 할 것이다 성공적인 클라이언트 인증서 검증 후 (AN 연관된 서버 측 세션)는 HTTP 쿠키를 생성

답변

4

여전히 안전한가요? (어떻게 할 수 우리는 보안 및 실용 최적화?)

그것의 서버가 더 이상 중간자가 아니라고 자신에게 증명할 수 있기 때문에, 이론적으로는 꽤 안전한.

클라이언트가 클라이언트 측 인증서를 제시하면 서버는이를 암호로 신뢰할 수 있습니다. 클라이언트와 서버는 클라이언트의 키를 기반으로 암호화 및 데이터 (물론 세션 키) 여야합니다.클라이언트 측 인증 기관이 없으면 서버는 클라이언트가 서버 인증서를 검증 (클라이언트가 인식) 한 결과, MitM의 가능성을 제거 할 수 있기를 바랄뿐입니다.

out-of-the-box Windows 클라이언트는 200 개가 넘는 루트 CA 인증서를 트러스트합니다. 클라이언트 측 인증서가 없으면 서버는 확장을 통해 신뢰를 얻습니다. MITM 이러한 유형의 http://www.carbonwind.net/ISA/ACaseofMITM/ACaseofMITMpart3.htm

설명 :

여기에 클라이언트 인증서가 MITM에 대한 방어를 제공하고 있는지 확인하기 위해 패킷 캡처에서 찾을 무엇의 좋은 작성자입니다. http://www.networkworld.com/community/node/31124

이 기술은 실제로 일부 방화벽 어플라이언스 박스에서 SSL에 대한 정밀 검사를 수행하는 데 사용됩니다.

MitM은 많은 미션 임파서블 스타일의 제작물처럼 보였습니다. 실제로 어디에서나 손상된 DNS 확인자 또는 라우터를 사용하지는 않지만, 전 세계에는 작은 Linksys 및 Netgear 상자가 많이 있으며 아마도 2 ~ 3 개에는 최신 보안 업데이트가 없습니다.

실제적으로 이것은 주요 금융 기관의 사이트에 충분할 것으로 보이지만 최근의 증거는 위험 평가 전략이 다소 이상적이라고 제안합니다.

이 구성표는 무료로 구현됩니까? (저는 CA의 SiteMinder 제품에 대해 알고 있습니다)

클라이언트 측 쿠키 일 뿐이 죠? 그건 모든 웹 앱 프레임 워크의 꽤 표준적인 부분 인 것 같습니다.

위와 같이 가정하면 인증을 계속해야합니까? 아니면 서버로 이동해야합니까?

하드웨어 암호화 가속기 (SSL 프록시 프런트 엔드 또는 가속기 카드 중 하나)를 사용하면 이러한 작업 속도를 크게 높일 수 있습니다.

인증서 유효성 검사를 HTTP 서버로 이동하면 도움이 될 수 있습니다. 당신은 어쨌든 암호화 수학에서 어떤 중복을하고있을 것입니다.

클라이언트 인증 코드에서 더 저렴한 알고리즘 또는 더 작은 키 크기의 이점이 있는지 확인하십시오.

클라이언트 인증서를 확인한 후에는 짧은 시간 동안 해시 다이제스트 (또는 전체)를 캐싱 해 볼 수 있습니다. 따라서 모든 조회에서 신뢰의 체인을 따라 서명 유효성 검사를 반복하지 않아도됩니다.

고객이 얼마나 자주 거래합니까? 트랜잭션의 대부분을 구성하는 트랜잭션이 자주 발생하는 경우 단일 SSL 협상/인증에서 여러 트랜잭션을 결합하도록 사용자를 설득 할 수 있습니다. HTTP Keep-Alive 헤더 설정을 살펴보십시오. 그들은 이미 어느 정도 그것을 할 수 있습니다. 아마도 귀하의 앱이 모든 HTTP 요청/응답에 대해 클라이언트 인증서 유효성 검사를 수행하고 있거나 각 세션이 시작될 때 한 번만 인증을 받았습니까?

어쨌든, 그 중 일부 아이디어, 행운을 빈다!

+0

부탁드립니다. 동일한 질문이 같은 날 3 번이나 약간 다른 맥락에서 나온 후에 (!) 나는 더 깊은 파기를 시작했다.답변은 조금 더 복잡해졌습니다 : http://extendedsubset.com/?p=8 –