新手问题 求教一下各位大佬,关于 ntlm 验证的问题 (rubyntlm)

G.order · 2019年03月30日 · 873 次阅读

我想练习制作一个 exchange server 的 ews 二次开发。

现在卡在了身份信息验证的位置了。

我使用的是 rubyntlm 扩展,但是在 type3 的时候会出现问题,无法正确生成 type3 的内容。 求教一下是为什么,我应该怎么修改? 谢谢诸位大佬了。

代码如下:

require 'rubyntlm' 
require 'net/http'
require 'net/https'
require 'uri'

url = URI('https://192.168.2.176/ews/exchange.asmx')

#OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE

domain = 'exchange.local'
$user = 'test'
$pass = '123456'

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

t1 = Net::NTLM::Message::Type1.new()
header = {"Authorization":"NTLM "+ t1.encode64, "Accept": "text/xml"}
body = ''' <xml>'''

response = http.post(url, body, header)
response.header.each do |k,v|
    if /(NTLM|Negotiate)(.+)(,|\r\n)/ =~ v
        $msg = $2
    end
end

puts $msg #到这里都正常

t2 = Net::NTLM::Message.decode64($msg)
t3 = t2.response({:user => 'test', :password => 'P@ssw0rd'}, {:ntlmv2 => true})

header2 = {"Authorization":"NTLM "+ t3.encode64}

puts header2.to_s  #这个生成结果就有问题了,长度就不对

response = http.post(url, body, header2)
puts response.code    #返回值400,正常的话应该是200

求各位大佬指点迷津。 顺便我还想问下,为什么

header = {"Authorization":"NTLM "+ t1.encode64, "Accept": "text/xml"}

这个地方再增加其他内容也会报错呀。

新手小白,排版不好请见谅,谢谢大佬们了。

暂无回复。
需要 登录 后方可回复, 如果你还没有账号请 注册新账号