2017-05-17 41 views
7

Tôi đang thử một ví dụ nhỏ với Cổng API AWS và ủy quyền IAM. Cổng API AWS đã tạo Điểm cuối bên dưới:Chữ ký đã hết hạn: hiện đã sớm hơn lỗi: InvalidSignatureException

https://xyz1234.execute-api.us-east-2.amazonaws.com/Users/users 

bằng hành động POST và không có thông số.

Ban đầu tôi đã tắt IAM cho phương thức POST này và tôi đã xác minh kết quả bằng cách sử dụng Postman nó hoạt động. Sau đó, tôi đã tạo một Người dùng IAM mới và Chính sách AmazonAPIGatewayInvokeFullAccess đính kèm cho người dùng qua đó cho phép gọi bất kỳ API nào. Đã bật IAM cho phương thức POST.

sau đó tôi đi đến Postman - và thêm Authorization với accesskey, Secret Key, Region AWS như us-east-2 và Tên dịch vụ như execute-api và cố gắng thực hiện các yêu cầu nhưng tôi đã nhận InvalidSignatureException Lỗi với 403 như mã trở lại.

Cơ thể chứa thông báo sau:

Signature expired: 20170517T062414Z is now earlier than 20170517T062840Z (20170517T063340Z - 5 min.)" 

tôi thiếu gì?

+1

Bạn đã thiết lập vùng đồng hồ và thời gian đúng trên máy mà bạn tạo ra chữ ký? –

+0

Cảm ơn bạn @ Michael-sqlbot - do nhầm lẫn thời gian được đặt thủ công trên máy và không được đặt thành thời gian chuẩn. – j10

Trả lời

5

Yêu cầu được ký với AWS sigV4 bao gồm dấu thời gian cho thời điểm chữ ký được tạo. Chữ ký chỉ hợp lệ trong một khoảng thời gian ngắn sau khi chúng được tạo. (Điều này giới hạn khoảng thời gian có thể thực hiện một cuộc tấn công phát lại.)

Khi chữ ký được xác thực, dấu thời gian được so sánh với thời gian hiện tại. Nếu điều này chỉ ra rằng chữ ký không được tạo gần đây, thì xác thực chữ ký không thành công với thông báo lỗi bạn đã đề cập.

Nguyên nhân phổ biến của việc này là khi đồng hồ cục bộ trên máy chủ tạo chữ ký bị tắt hơn một vài phút.

8

Bạn cần đồng bộ hóa đồng hồ địa phương của máy với NTP.

ví dụ: trên máy ubuntu:

sudo ntpdate pool.ntp.org 

Thời gian hệ thống không đồng bộ hóa thường xuyên. Bạn cần giữ chúng đồng bộ định kỳ.

Bạn có thể chạy một công việc định kỳ hàng ngày để giữ cho thời gian hệ thống của bạn đồng bộ như đã đề cập tại liên kết này: Periodically synchronize time in Linux

Tạo một kịch bản bash để đồng bộ hóa thời gian gọi ntpdate và đặt dưới vào nó

#!/bin/sh 
# sync server time 
/usr/sbin/ntpdate pool.ntp.org >> /tmp/ntpdate.log 

bạn có thể đặt kịch bản này bất cứ nơi nào bạn thích và sau đó thiết lập một cron tôi sẽ được đưa nó vào cro hàng ngày n thư mục để nó chạy một lần mỗi ngày Vì vậy, tập lệnh ntpdate của tôi bây giờ là trong/etc/cron.hàng ngày/ntpdate và nó sẽ chạy mỗi ngày

Hãy kịch bản này thực thi

chmod +x /etc/cron.daily/ntpdate 

thử nghiệm nó bằng cách chạy kịch bản một lần và tìm kiếm một số đầu ra trong /tmp/ntpdate.log

/etc/cron.daily/ntpdate 

Trong log file bạn sẽ thấy một cái gì đó giống như

26 Aug 12:19:06 ntpdate[2191]: adjust time server 206.108.0.131 offset 0.272120 sec 
+0

Cảm ơn bạn đã chia sẻ @Yeshodhan. một đoán - Tôi đã đặt thời gian của tôi MacBook để Auto Set Ngày và Thời gian - Tôi tin rằng điều này sẽ chăm sóc đồng bộ hóa? – j10

Các vấn đề liên quan