web-dev-qa-db-ja.com

cURLを使用したNTLMが401を返す

目標:Exchangeサーバー(EWS)への接続
メソッド:cURL
問題:認証を取得できません(NTLM)、要求は401を返します。1

古く、よく記録されているようです 2 OpenSSLからNSSへのcURLの移行で始まった問題。 NTLMの実装はOpenSSLに依存しているため、この移行によりNTLM認証が破られたと私は読んだ。

問題を以下に示しますが、重要な部分は返された_401_とその下のgss_init_sec_context()のようです。

私が理解していないことは私の現在のバージョンです:

  • https://launchpad.net/ubuntu/+source/curl/7.22.0-3ubuntu4 によるOpenSSLバリアントがあります==
  • 同じリンクに従ってNTLMをサポート
  • 以下のログによると(NSSではなく)このバリアントを実際に使用しています(_libcurl/7.22.0 OpenSSL_と書かれています)
  • 上記のポイントのように、リンクされたバグに悩まされるべきではありません。
  • しかし、IS影響を受ける。401を取得したという事実が示すように

これをどのように修正できるかわかりません。私はこの問題に関する古い(主に2010)参照をたくさん見つけることができましたが、新しいことは何もありません。提供された参照( 2)これが古いバージョン(7.19)で機能する可能性があることを示しますが、そのバージョンにダウングレードすることはできません(または喜んで行いません)。

Exchange通信(EWS)のいくつかの実装では、cURLを使用してEWSファイル(wsdlなど)を取得しているため、適切な方法があるはずですが、見つかりません。誰か私にできることの手がかりはありますか?別のバグがありますか?事実を間違って解釈していますか?これはリンクで提供されているのと同じ状況であり、修正されることはありませんか?


1 エラーは次のようになります。

_curl https://*DOMAIN*/Exchange.asmx -w %{http_code} --ntlm -u *USERNAME* --verbose --show-error
Enter Host password for user '*USERNAME':
* About to connect() to DOMAIN port 443 (#0)
*   Trying IP... connected
* successfully set certificate verify locations:
*   CAfile: none
  CApath: /etc/ssl/certs
* SSLv3, TLS handshake, Client hello (1):
* SSLv3, TLS handshake, Server hello (2):
* SSLv3, TLS handshake, CERT (11):
* SSLv3, TLS handshake, Server finished (14):
* SSLv3, TLS handshake, Client key exchange (16):
* SSLv3, TLS change cipher, Client hello (1):
* SSLv3, TLS handshake, Finished (20):
* SSLv3, TLS change cipher, Client hello (1):
* SSLv3, TLS handshake, Finished (20):
* SSL connection using AES128-SHA
* Server certificate:
     *SNIP*
*        SSL certificate verify ok.
* Server auth using NTLM with user 'USERNAME'
> GET /EWS/Exchange.asmx HTTP/1.1
> Authorization: NTLM *snip*
> User-Agent: curl/7.22.0 (i686-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3
> Host: DOMAIN
> Accept: */*
>
< HTTP/1.1 401 Unauthorized
< Server: Microsoft-IIS/7.5
< Set-Cookie: exchangecookie=xxx; expires=Wed, 17-Jul-2013 07:45:30 GMT; path=/; HttpOnly
< WWW-Authenticate: NTLM  *SNIP*
* gss_init_sec_context() failed: : Credentials cache file '/tmp/krb5cc_1005' not foundWWW-Authenticate: Negotiate
< X-Powered-By: ASP.NET
< Date: Tue, 17 Jul 2012 07:45:30 GMT
< Content-Length: 0
<
* Connection #0 to Host DOMAIN left intact
* Closing connection #0
* SSLv3, TLS alert, Client hello (1):
_

2 例えば ​​:


カール情報:

_user@server:~$ curl -V
curl 7.22.0 (i686-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3
Protocols: dict file ftp ftps Gopher http https imap imaps ldap pop3 pop3s rtmp rtsp smtp smtps telnet tftp
Features: GSS-Negotiate IDN IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP
_
5
Nanne

すべてのCentos/RHEL 6.Xユーザーの場合、以下を確認してください。

https://bugzilla.redhat.com/show_bug.cgi?id=953864

0
Ruben Herold