개발 Q&A

제목 아마존 AWS SignatureDoesNotMatch
글쓴이 고민중 작성시각 2016/02/12 14:55:12
댓글 : 3 추천 : 0 스크랩 : 0 조회수 : 30370   RSS

아마존 서명에서 계속 안되네요 ㅠ.ㅠ

일단 버킷리스트를 불러오려고 하는데요

GET / HTTP/1.1
Host: s3.amazonaws.com
Date: date
Authorization: authorization string (see Authenticating Requests (AWS Signature Version
		4))

사이트에는 단순이 이렇게 나와있긴 합니다.

 curl로

Request -> GET

Headers -> Host, Date, (x-amz-date, x-amz-content-sha256) , Authorization

URL -> http://s3-ap-northeast-2.amazonaws.com/

이렇게 보내려고 합니다.

궁금한 점은 x-amz-* 은 여기 넣는건가요? 사이트 예시에는 없어서 질문드립니다.

빼면 

[UnsignedContentSHA256NotAllowed] x-amz-content-sha256 must be STREAMING-AWS4-HMAC-SHA256-PAYLOAD or a valid sha256 value.

이렇게 되서요. 밑에는 요청에 보내는 headers 입니다.

Array ( [0] => Host: s3-ap-northeast-2.amazonaws.com [1] => Date: Fri, 12 Feb 2016 06:04:02 GMT [2] => x-amz-content-sha256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 [3] => x-amz-date: 20160212T060402Z [4] => Authorization: AWS4-HMAC-SHA256 Credential=AKIAJOF72LDQSQ5ZHDSA/20160212/ap-northeast-2/s3/aws4_request, SignedHeaders=host;date;x-amz-content-sha256;x-amz-date, Signature=0235f0952ea7494f1166e591c02df706d7d554f78aa815032ad3551aa21cf1b4 )

-------------------------------------------------------------------------------------------------------------------------------------------------

Authorization Signature 질문

Canonical Reqest

사이트 예시는

아마존 서명

되어 있구요 

저는

GET + "\n"

'/' + "\n"

"\n"

host:s3-ap-northeast-2.amazonaws.com + "\n"

date:Fri, 12 Feb 2016 03:47:48 GMT + "\n"x-amz-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855(empty value) + "\n"x-amz-date:20160212T034748Z + "\n" ( + "\n" )

host;date;x-amz-content-sha256;x-amz-date + "\n"

e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855(empty value)

이렇게 했습니다. 여기서 궁금한점이 몇가지 있습니다.

첫번째로 "\n" 인데요, '\n' 로 했을때랑 상관이 없나요? 출력했을때 '\n'는 직접적으로 노출이 됩니다.

두번째로 위 그림에서 canonical headers 뒤에 "\n"이 있습니다. 안에 내용에도 "\n"이 붙는데요 그럼 두개가 됩니다.

세번째로 혹시 위에 틀린점이 있는지 궁금합니다. 

 

 다음글 $(this).closest('li'); 이게 이해하는... (6)
 이전글 빈값 검증의 이상적인 방법? (6)

댓글

kaido / 2016/02/12 15:26:42 / 추천 0

음... 일일이 다 설명해 드리기에는 뭐라 적기 그렇네요.

저게 대체 뭔말이지 싶기도 한데 완성된 코드를 보면 저 그림안에 들어있는 말이 다 들어가 있긴 합니다.

 

 ==https://s3.ap-northeast-2.amazonaws.com/movie-seoul/filename.mp4
?response-content-disposition=attachment%3B%20filename%3D
filename.mp4
&X-Amz-Content-Sha256=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855&X-Amz-Algorithm=AWS4-HMAC-SHA256
&X-Amz-Credential=AAAAAAAAAA%2F20160212%2Fap-northeast-2%2Fs3%2Faws4_request
&X-Amz-Date=20160212T065413Z&X-Amz-SignedHeaders=Host
&X-Amz-Expires=600&X-Amz-Signature=8c527d3a17feb45f0531a4fe3972cd2ada4082ddea564abe3c4b2cf70b42975e

정상 호출시의 주소내역입니다. [일부 값은 임의로 바꾸어 놓았습니다. 파일명과 키값등]

 

요약하면 이렇게 보내집니다.

 

Accept-Ranges:bytes
Content-Disposition:attachment; filename=filename.mp4
Content-Length:71162424
Content-Type:application/octet-stream
Date:Fri, 12 Feb 2016 06:52:51 GMT
ETag:"7ec391d65ad3c928bb97620bb15955d3"
Last-Modified:Wed, 03 Feb 2016 00:33:49 GMT
Server:AmazonS3
x-amz-id-2:ReUeJXE/TeqRXrQEkc0ffbjOB5PjLbxtqd96rT0Ddgg0W6yG9bE7if/EaBbHRHjju21v16Q2/W0=
x-amz-request-id:55F29AED126001F5

 

 

response-content-disposition:attachment; filename=filename.mp4
X-Amz-Content-Sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
X-Amz-Algorithm:AWS4-HMAC-SHA256
X-Amz-Credential:AKIAIUZRQN2M4XEEEDQA/20160212/ap-northeast-2/s3/aws4_request
X-Amz-Date:20160212T065413Z
X-Amz-SignedHeaders:Host
X-Amz-Expires:600
X-Amz-Signature:8c527d3a17feb45f0531a4fe3972cd2ada4082ddea564abe3c4b2cf70b42975e

위에 설명들은 이 값을 그림으로 표현한 것입니다.

 

가능하면 sdk 사용하세요.

임의로 만들어서 만들어 넣을려면 생각보다 걸리는게 많아서 시간을 많이 소모 합니다.

 

참고로 모든 파라메터는 url encodeing 되어 있어야 하고, 요청시의 시간은 타임존 설정 해서 시그니쳐에 같이 넣어서 암호를 해야합니다.

고민중 / 2016/02/12 16:15:51 / 추천 0

아 해결됬습니다.

두번째 질문에 "\n"이 두번들어가야 정상 서명으로 되는군요 !

SDK사용하고 싶은데 만들어도 보고싶어서요 ...

kaido / 2016/02/12 16:18:27 / 추천 0

수고하셨습니다 ^^

aws가 쓸데없이 사람 잡아요. 아엉.