2013-09-12 3 views
2

Я использую gemon https://github.com/ruby-ldap/ruby-net-ldap (net-ldap) для проверки подлинности пользователя в приложении rails. Но перед передачей данных на сервер ldap мне нужно проверить, что я говорю с одним и тем же безопасным сервером. Есть обходной путь, который позволяет мне проверить сертификат в рубинRuby проверить сертификат безопасного ldap-сервера

Дополнительные данные: (вещи, которые я пробовал)

  1. Сертификат, который передается на меня же, как я вижу, когда Я бег

    openssl s_client -showcerts -connect "<host>:<port>" </dev/null 2>/dev/null|openssl x509 -outform PEM 
    
  2. Я использовал http://www.ldapsoft.com/ для подключения к серверу клиента Если не добавить файл сертификат, данный мне в безопасности> Управление сервера Certific Атес, я получаю предупреждение о том, неизвестный сертификат Security

  3. Я попытался сделать это вручную первым в простом рубина (без драгоценных камней) Но я получаю следующее сообщение об ошибке

    test-ssl.rb:23:in `connect': SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (OpenSSL::SSL::SSLError) 
    

    Код:

    cert_store = OpenSSL::X509::Store.new 
    cert_store.add_file "server-wildcard.crt" 
    io = TCPSocket.new("SECURELDAP.MYSITE.EDU","636") 
    ctx = OpenSSL::SSL::SSLContext.new 
    #ctx.cert = OpenSSL::X509::Certificate.new(File.read("server-wildcard.crt")) 
    #ctx.client_ca = OpenSSL::X509::Certificate.new(File.read("server-wildcard.crt")) 
    #ctx.ca_file = "server-wildcard.crt" 
    #ctx.ca_path = "./" 
    ctx.verify_mode = OpenSSL::SSL::VERIFY_PEER | OpenSSL::SSL::VERIFY_FAIL_IF_NO_PEER_CERT 
    ctx.cert_store = cert_store 
    conn = OpenSSL::SSL::SSLSocket.new(io, ctx) 
    conn.connect 
    
+0

Я встретил ту же проблему с и –

+0

https://gist.github.com/mintuhouse/9931865 Я отправил обходной путь, который работал для меня здесь. Проводка, если вам все еще нужно – mintuhouse

ответ

1

Я отправляю свое решение здесь ради полноты.

сетчатой ​​LDAP камень переопределение для поддержки проверки сертификата https://gist.github.com/mintuhouse/9931865

Идеальное решение:
Ведение списка доверенных корневых центров сертификации на сервере (Если вы ленивы, как я, есть хрон, которая скачивает (еженедельно поддерживается завитком) скопировать из http://curl.haxx.se/ca/cacert.pem)
Override Net :: HTTP всегда использовать этот доверенный список сертификатов

0

по состоянию на сегодня (конец 2016 года), рубиново-сетчатый поддерживает LDAP это вверх по течению! Однако tls_options необходимо передать с verify_mode значением, отличным от значения по умолчанию VERIFY_NONE.

# optional: create/pass your own cert_store 
cert_store = OpenSSL::X509::Store.new 
cert_store.set_default_paths # or add your own CAdir, &c. 

# attributes documented for OpenSSL::SSL::SSLContext are valid here 
tls_options = { 
    verify_mode: OpenSSL::SSL::VERIFY_PEER 
    cert_store: cert_store 
} 

ldap = Net::LDAP.new(
    :host => host, 
    :port => port, 
    :encryption => { 
    :method => :simple_tls, # could also be :start_tls 
    :tls_options => tls_options 
    } 
) 
Смежные вопросы