2011-12-30 10 views
0

RabbitMQ Windowsサービスとクライアント間のセキュリティで保護された接続で参加者の証明書を発行するのにWindows証明機関(AD CS)を使用しています。このerlangコードは例外をスローし、理由はわかりません

私のクライアント証明書のサブジェクトは、LDAPに私の識別名(DN)です。 "CN =ジョン・ルイス、CNは=ユーザー、DC = devexample、DC = comの"

私は、この接続を確立しようとすると、サーバーが例外をスローし、接続を閉じて、私はウサギのログでこのErlangのスタックトレースを参照してください。スタックトレースの最後の2本のラインを介して探し

=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}]}]}} 

、私は2つのファイルが関係した:

  1. rabbit_ssl.erl
  2. rabbit_auth_mechanism_ssl.erl

問題は、私が前に読み取ることも、書き込むのerlangてきたどちらもということなので、find_by_typeが例外をスローしている理由を私は知りません。私の推測では、相対DN(RDN)のリストに2つのCN = *要素があるため、リストへの呼び出しの結果です。flattenは配列であり、期待される結果はスカラーです。

私の前提を確認または訂正してください。このコードを改善して(例外を投げる代わりに)私が今説明したケースを処理する方法を見たら、RabbitMQメーリングリストで提案できるように本当に感謝します。

答えて

1

あなたの推測は正しいです。 2つのCN = *要素があるため、クラッシュします。コードを見ると、多くのものが1つのCNだけに依存しているようです。 CNそのものがsslセッションのユーザ名として使用されていると思います。

+0

2つのCNを持つことはほとんど意味がないと私は同意しますが、これはWindowsの場合と同じです。ドメインユーザーはCN = Users、DC = domain、DC = tldで作成されます。つまり、ユーザーは2つのCN要素を含むDNを持ちます。 –

+0

ええと、奇妙な。最初のCNを無視するだけの場合は、find_by_typeの[CN]ではなく[_、CN]をケースに追加できます。しかし、あなたがプロダクションで持ちたいと思っているものよりも一時的な修正が多くあります。 – Lukas

+0

私はそれを完全に無視したくありません。 opensslベースの証明書は1つのCN要素しか持たないでしょう。一時的な修正として、配列に複数の要素が含まれているかどうかを確認し、存在する場合は最初の要素を単純に使用するかどうかを確認することをお勧めします。そのコードはどのように見えますか? –

関連する問題