3

https://github.com/ruby-ldap/ruby-net-ldap (net-ldap) gem を使用して、Rails アプリでユーザーの信頼性を検証しています。しかし、データを LDAP サーバーに渡す前に、同じ安全なサーバーと通信していることを確認する必要があります。Rubyで証明書を確認できる回避策はありますか

追加の詳細:(私が試したこと)

  1. 私に渡される証明書は、実行時に表示されるものと同じです

    openssl s_client -showcerts -connect "<host>:<port>" </dev/null 2>/dev/null|openssl x509 -outform PEM
    
  2. http://www.ldapsoft.com/を使用してクライアントのサーバーに接続しましたセキュリティ > サーバー証明書の管理で提供された証明書ファイルを追加しない限り、セキュリティ証明書が不明であるという警告が表示されます

  3. 最初にプレーンルビー(gemなし)で手動で実行しようとしましたが、次のエラーが発生します

    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
    
4

2 に答える 2

1

今日 (2016 年後半) の時点で、ruby-net-ldap はこのアップストリームをサポートしています! ただし、デフォルト以外の値tls_optionsに設定して渡す必要があります。verify_modeVERIFY_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
  }
)
于 2016-12-19T22:03:02.483 に答える