3

https 設定の春のセキュリティがあります。

URL に対して安全な方法で curl GET を実行しようとすると、予期しない動作が発生します。

curl が最初にサーバーにリクエストを送信するとき、承認データなしで送信します (なぜですか?私は具体的に追加しました)。次に、サーバーは認証エラー (401) で応答します。次に、クライアントは要求を再送信しますが、今度は承認データを使用し、サーバーは必要なデータで適切に応答します。

なぜこれが起こるのか分かりますか?

カール コマンド:

curl -v --insecure --anyauth --user username:password -H "Accept: application/json" -H "Content-Type: application/json" -X GET localhost:8443/myresource

リクエスト 1:

> GET /myresource HTTP/1.1
> User-Agent: curl/7.21.3 (x86_64-redhat-linux-gnu) libcurl/7.21.3 NSS/3.13.1.0 zlib/1.2.5 libidn/1.19 libssh2/1.2.7
> Host: localhost:8443
> Accept: application/json
> Content-Type: application/json

応答 1:

< HTTP/1.1 401 Unauthorized
< Server: Apache-Coyote/1.1
< Set-Cookie: JSESSIONID=B56A7F49E715795B5D1158DB192710AA; Path=/myresource ; Secure; HttpOnly
< WWW-Authenticate: Digest realm="Protected", qop="auth", nonce="MTM0Njg2MjYwMjY0ODozNDk5ZDkxNTYxNjMxMDJmNDA4MWQ1NTBmZjk5OGQ5Nw=="
< Content-Type: text/html;charset=utf-8
< Content-Length: 1119
< Date: Wed, 05 Sep 2012 16:29:52 GMT

リクエスト 2:

> GET /myresource HTTP/1.1
> Authorization: Digest username="username", realm="Protected", nonce="MTM0Njg2MjYwMjY0ODozNDk5ZDkxNTYxNjMxMDJmNDA4MWQ1NTBmZjk5OGQ5Nw==", uri="/myresource", cnonce="ODczNjg0", nc=00000001, qop="auth", response="58faded9ae5f639ba0056fb86edca71f"
> User-Agent: curl/7.21.3 (x86_64-redhat-linux-gnu) libcurl/7.21.3 NSS/3.13.1.0 zlib/1.2.5 libidn/1.19 libssh2/1.2.7
> Host: localhost:8443
> Accept: application/json
> Content-Type: application/json

応答 2:

< HTTP/1.1 200 OK
< Server: Apache-Coyote/1.1
< Set-Cookie: JSESSIONID=37F375C5663C4A049D95D49C7C1CF0FD; Path=/myresource ; Secure; HttpOnly
< Content-Type: application/json
< Transfer-Encoding: chunked
< Date: Wed, 05 Sep 2012 16:29:52 GMT
4

2 に答える 2

8

マンカールより:

--anyauth

(HTTP) curl に認証方法を自分で判断し、リモート サイトがサポートすると主張する最も安全な方法を使用するように指示します。これは、最初にリクエストを実行し、レスポンス ヘッダーをチェックすることによって行われるため、余分なネットワーク ラウンドトリップが発生する可能性があります。これは、--basic、--digest、--ntlm、および --negotiate で実行できる特定の認証方法を設定する代わりに使用されます。

標準入力からアップロードする場合、 --anyauth の使用は推奨されないことに注意してください。これは、データを 2 回送信する必要があり、クライアントが巻き戻しできる必要があるためです。stdin からのアップロード時に必要が生じた場合、アップロード操作は失敗します。

--anyauth の代わりに --digest を使用する必要があります。

于 2012-09-06T15:09:58.947 に答える