我正在设置由我们生产服务器的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_options
的OpenSSL::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"
您将被设置。