2011-12-30 2 views
0

Windows 인증 기관 (AD CS)을 사용하여 RabbitMQ Windows 서비스와 클라이언트 간의 보안 연결에서 참가자의 인증서를 발급합니다.이 erlang 코드가 예외를 throw하고 이유를 모르겠습니다.

내 클라이언트 인증서의 주제는 내 고유 이름 (DN) LDAP에 있습니다 은 "CN = 존 루이즈는, CN 사용자, DC는 = devexample을 = DC = COM"

나는이 연결을 설정하려고 시도 서버에서 예외가 발생하고 연결을 닫 나는 토끼 로그에서이 얼랑 스택 추적을 참조하십시오 스택 추적의 마지막 두 줄을 통해 찾고

=ERROR REPORT==== 30-Dec-2011::10:33:24 === 
exception on TCP connection <0.331.0> from 10.1.30.70:52269 
{channel0_error,starting, 
    {error,{case_clause,[{printableString,"Users"}, 
         {printableString,"John Ruiz"}]}, 
         'connection.start_ok', 
         [{rabbit_ssl,find_by_type,2,[]}, 
         {rabbit_auth_mechanism_ssl,init,1,[]}, 
         {rabbit_reader,handle_method0,2,[]}, 
         {rabbit_reader,handle_method0,3,[]}, 
         {rabbit_reader,handle_input,3,[]}, 
         {rabbit_reader,recvloop,2,[]}, 
         {rabbit_reader,start_connection,7,[]}, 
         {proc_lib,init_p_do_apply,3, 
          [{file,"proc_lib.erl"},{line,227}]}]}} 

을, 나는 두 개의 파일이 포함 된 발견

  1. rabbit_ssl.erl
  2. rabbit_auth_mechanism_ssl.erl

문제내가 읽어도 전에 얼랑를 작성하지도했습니다 없다는 것입니다, 그래서 find_by_type 예외를 던지는 이유를 알 수 없습니다. 필자의 가장 좋은 추측은 상대 DN (RDN) 목록에 두 개의 CN = * 요소가 있기 때문에 목록 호출의 결과입니다. flatten은 배열이고 예상 결과는 스칼라입니다.

에를랭에 익숙한 사람이라면 제 가정을 확인하거나 수정할 수 있습니까? 예외를 던지는 대신 방금 설명한 경우이 코드를 개선하기 위해이 코드를 개선 할 수있는 방법을 본다면 RabbitMQ 메일 링리스트에서 제안 할 수 있도록 정말 감사하겠습니다.

답변

1

맞춰보세요. CN = * 요소가 두 개 있기 때문에 충돌이 발생합니다. 코드를 살펴보면 많은 CN이 하나의 CN 만있는 것처럼 보입니다. CN 자체가 ssl 세션의 사용자 이름으로 사용됩니다.

+0

2 개의 CN을 갖는 것이 의미가 없다는 것에 동의하지만, 그것이 Windows에서 작동하는 방식입니다. 도메인 사용자는 CN = Users, DC = domain, DC = tld에서 만들어 지므로 사용자는 두 개의 CN 요소가 포함 된 DN을 갖게됩니다. –

+0

흠, 이상합니다. 첫 번째 CN을 무시하려는 경우 find_by_type의 [CN] 대신 [_, CN]을 사례에 추가 할 수 있습니다. 그러나 생산에 필요한 것보다 더 많은 임시 수정이 필요합니다. – Lukas

+0

나는 그것을 무시하려고하지 않을 것입니다. openssl 기반 certs에는 하나의 CN 요소 만 있습니다. 임시 수정으로 배열에 둘 이상의 요소가 있는지 먼저 확인한 후 첫 번째 요소를 사용하는 것이 좋습니다. 그 코드는 어떻게 생겼을까요? –

관련 문제