如何告诉Ruby Net/LDAP忽略服务器证书主机名不匹配



我正在设置由我们生产服务器的VM克隆组成的测试环境。我有一个IP后面的所有克隆(在管理程序上(,然后执行NAT(Linux(在测试环境中访问服务。

我在我的测试实例上有一个DNS记录,名为" test.internal.com"。当我想与"测试"中的LDAP服务器联系时,我可以从命令行发布ldapsearch以检索信息(这成功了(。

现在,我想连接到测试实例以测试我的Ruby应用程序,但是当我连接时,Ruby说:hostname "test.internal.com" does not match the server certificate (Net::LDAP::Error)。显然,这是正确的,因为我的LDAP服务器上的证书未为test.internal.com配置。

我是否需要为我的LDAP服务器获得新的证书,其中有一个test.internal.com的替代名称,还是有其他方法告诉Ruby忽略问题?我找到了tls_optionsOpenSSL::SSL::VERIFY_NONE,但似乎无法正常工作。

#!/usr/bin/ruby
require 'net/ldap'
require 'io/console'
require 'highline/import'
ldapHost = 'test.internal.com'
ldapPort = '8389'
baseDn   = "dc=internal,dc=com"
user = gets
username = "uid=" + user + ',ou=users,dc=internal,dc=com'
password = ask("Password: ") { |q| q.echo = "*" }
ldap_con = Net::LDAP.new ({   :host => ldapHost,
                              :port => ldapPort,
                              :base => baseDn,
                              :encryption => :start_tls, tls_options: { verify_mode: OpenSSL::SSL::VERIFY_NONE },
                              :auth => { :method => :simple, :username => username, :password => password }
                           })
op_filter = Net::LDAP::Filter.eq( "objectClass", "posixGroup" )
ldap_con.search( :base => baseDn, :filter => op_filter, :attributes=> 'dn') do |entry|
  puts "DN: #{entry.dn}"
end

与文档的对抗,TLS_Options不是连接对象的最高级别参数,而是encryption键的参数:

ldap_con = Net::LDAP.new ({   :host => ldapHost,
                              :port => ldapPort,
                              :base => baseDn,
                              :encryption => {
                                  :method => :start_tls,
                                  :tls_options => { :verify_mode => OpenSSL::SSL::VERIFY_NONE }
                              },
                              :auth => { :method => :simple, :username => username, :password => password }
                       })

而不是使用:

verify_mode: OpenSSL::SSL::VERIFY_NONE

使用:

verify_mode: "VERIFY_NONE"

您将被设置。

相关内容

最新更新