5

顧客に Web サービスを提供します。何らかのイベントが発生したときに、顧客が指定した URL にリクエストを送信して顧客に通知する機能を提供したいと考えています。

たとえば、注文の発送の通知は、GET リクエストhttps://customer.example.com/order/12345?status=shippedを介して送信される場合があります。

顧客は、この要求が本物であるとどのように信頼できますか?

お客様がこのリクエストを受け取ったら、そのリクエストが本当にサービスからのものであり、改ざんされておらず、非公開であることを確認する必要があります。

SSL のみを介して顧客に送信することが頭に浮かびますが、顧客は署名付き証明書を使用して SSL 対応の Web サーバーを実行する必要があります。さらに、サービス (この要求のクライアント) を認証するには、クライアント側の証明書が必要です。ただし、SSL は、暗号化、中間者攻撃、メッセージ署名、およびリプレイ攻撃を処理する必要があります。

サービスの IP アドレスは変更される可能性があるため、認証には使用できません。

PayPal の IPN システムでは、別のアプローチが使用されています。PayPal は顧客 (この例ではマーチャント) に通知を送信し、顧客は確認のために SSL 経由でペイロードを PayPal に送り返します。基本的には、「ねえ、PayPal。これを送ってくれましたか?」と尋ねます。

他のアプローチを考えることができますか?

4

1 に答える 1

2

秘密鍵と公開鍵のペアでメッセージに署名した場合でも、リプレイ攻撃を防ぐために何かを実装する必要があります。

おそらく、何か新しいものがあることを彼らに通知し、サーバーにアクセスして新しいものを取得することをお勧めします。その後、サーバーをポーリングして SSL 証明書を検証するだけです。

データを送信する前に、あなたの側でそれらを認証する必要があります。

通知については、最新の通知の日付と時刻を署名して投稿するだけです。このようにして、その通知が再生されたとしても、時刻と日付が最後のものより新しくならないので、彼らは知ることができます.

于 2012-08-29T14:58:15.897 に答える