LWP不再认证

时间:2017-12-11 14:07:39

标签: perl authentication ntlm lwp negotiate

我的脚本访问受NTLM保护的站点。它突然停止了工作。

脚本的一部分:

use LWP;

$url = 'https://something.xyz:443';

$ua = LWP::UserAgent->new( keep_alive => 1 );
$ua->agent( 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/604.3.5 (KHTML, like Gecko) Version/11.0.1 Safari/604.3.5' );
$ua->credentials( 'something.xyz:443', '', 'domain\username', 'password' );

$r = $ua->get( $url );

print( $r->as_string );

这导致以下响应(此处仅显示标题):

HTTP/1.1 401 Unauthorized
Date: Mon, 11 Dec 2017 13:56:14 GMT
Server: Microsoft-IIS/8.5
WWW-Authenticate: NTLM
WWW-Authenticate: Negotiate
Content-Length: 1293
Content-Type: text/html
Client-Date: Mon, 11 Dec 2017 13:56:17 GMT
Client-Peer: *.*.*.*:443
Client-Response-Num: 4
Client-SSL-Cert-Issuer: /C=US/O=GeoTrust Inc./CN=GeoTrust SSL CA - G3
Client-SSL-Cert-Subject: /C=SE/ST=something/L=something/O=something/OU=something/CN=*.something.xyz
Client-SSL-Cipher: ECDHE-RSA-AES128-SHA256
Client-SSL-Socket-Class: IO::Socket::SSL
Client-SSL-Warning: Peer certificate not verified
Client-Warning: Credentials for 'domain\username' failed before
Title: 401 - Unauthorized: Access is denied due to invalid credentials.
X-Powered-By: ASP.NET

我还尝试使用localhost\username,就像我在脚本停止工作之前一样,但没有效果:我总是得到401响应。我没有更新Perl或我的任何模块,我认为必须在服务器上更改某些内容。在标题中包含两个 WWW-Authenticate字段是否正常?一个用于NTLM和一个谈判?我也得到一个Client-SSL-Warning,但是当脚本工作时我也明白了。

我也玩过如下选项:

use Auth::NTLM;
ntlmv2(1);

local $ENV{'PERL_LWP_SSL_VERIFY_HOSTNAME'} = 0;
$ua = LWP::UserAgent->new(keep_alive => 1, ssl_opts => { verify_hostname => 0 });

该网站没有领域名称,因此我在$ua->credentials()中将领域参数留空。

也许LWP和IIS / 8.5存在错误?

我还在虚拟机上尝试了我的脚本,其中包含最新版本的Perl和最新模块,但它也没有在那里工作。

0 个答案:

没有答案