2010-12-30 8 views
4

私はRESTfulなAPIを作成していますが、各リクエストがSSLを使用して行われる場合、サーバーの計算コストがどれくらいかと思っていますか?おそらく定量化は難しいですが、SSL以外のリクエストと比較すると便利です(たとえば、1つのSSLは30件の非SSLリクエストと同じくらい高価です)。RESTful APIのSSLはどれくらいの費用がかかりますか?

SSL接続を確立するには、両方の当事者が公開鍵と秘密鍵を生成し、それらを互いに共有し、通信を開始する必要があると思います。 RESTful APIを使用している場合、このプロセスは各リクエストで行われますか?あるいは、あるホストのキーを一定の期間再利用する何らかのキャッシングがあります(もしそうなら、期限が切れるまでの時間?)。

最後に質問したのは、Facebookに接続しているアプリを作っているのですが、誰かのFacebookアカウントにアクセス権を与えるアクセストークンがいくつかあります。暗号化されていない接続上のこれらのアクセストークン?確かに、ユーザー名/パスワードのコンボだけでアクセストークンを保護し、SSL接続を強制する必要があります。しかし、そうではありません。

EDIT:facebookは、実際には、access_tokenが送信されているときは常にHTTPS接続を強制します。次のように

+0

最後の質問に答えるには、アクセストークンなどの秘密情報を含むも​​のにSSL接続が必要です。しかし、Facebookはプライバシー保護のために献身していない。 –

+0

@Cameron、アクセストークンが送信されているときにhttps経由で接続する必要があることが判明しました。私の悪い – lms

答えて

2

http://www.imperialviolet.org/2010/06/25/overclocking-ssl.html

、SSL/TLSは、接続ごとにメモリの10キロバイトより少ないCPU負荷の1%未満、を占め、の2%未満ネットワークオーバーヘッド。多くの人々は、SSLが多くのCPU時間を要すると考えており、上記の数字(初めて公開された)がそれを払拭するのに役立つことを願っています。

ここで読書を止めれば、1つのことを覚えておく必要があります.SSL/TLSは計算上高価ではありません。

+0

これは興味深いことです。しかし、私は、サーバーマシンは通常、証明書の検証を行わないことを考慮しなければならないと考えています。 – mtraut

1

SSL処理はおおよそである:

  • サーバ(および必要に応じてクライアント)を一緒に署名されたチャレンジと、証明書を使用して(発生していない、既存の)公開鍵を提示します。相手は、署名(その数学的妥当性、CAまでの証明書パス、失効ステータス、...)を検証して相手が誰であるかを確かめます。

  • 認証された当事者の間で、秘密のセッションキーが(例えば、Diffie Hellmanアルゴリズムを使用して)ネゴシエートされます。

  • 当事者は、これがここまで高価なプロトコルであり、ソケットが確立されるたびに発生した暗号化通信に

を切り替えます。 「相手側の人」のチェックをキャッシュすることはできません。このため、永続ソケット(RESTのイベント)を行う必要があります。

+2

これはあなたが記述した通りではありません - TLSはセッションの再開をサポートしているため、毎回完全なハンドシェイクを実行する必要はありません。 –

+0

私は公開/秘密鍵のペアが** once **で生成され、接続ごとに一度生成されないという事実を強調したいと思います。これは、パブリック/プライベートキーのペアの生成は非常に高価ですが、セッションキーのネゴシエーションははるかに少ないため、重要です。 –

+0

@Cameron秘密鍵/公開鍵は、ハンドシェイク中はまったく生成されません。 –

1

mtrautはSSLの仕組みを説明しましたが、TLS セッションの再開をサポートしているという事実を省略しています。ただし、セッションの再開がプロトコル自体と多くの準拠サーバーでサポートされている場合でも、クライアント側の実装では常にサポートされているわけではありません。だから、あなたはレジュームに頼るべきではなく、できるだけ永続的なセッションを保つ方がよいでしょう。

一方、SSLハンドシェイクは今日では非常に速く(約10ミリ秒)、ほとんどの場合、最大のボトルネックではありません。私たちの[Googleの編]生産フロントエンドマシンで

+0

私はこれらのプロトコルにあまり親しみません。しかし、私はセッションの再開が同じソケット接続でない場合にどのように起こるか想像できません。とにかく再認証でなければなりません(ソケットが閉じられていないことを除いて)。何かお見逃しですか? – mtraut

+0

@mtraut私は深く、私たちの開発者が行う詳細を知らない。 http://www.ietf.org/rfc/rfc2246.txt、F.1.4が役立ちます。 –

+0

@mtraut:ソケットはそれとは関係ありません。セッションは、新しいソケットで最も頻繁に再開されます。 Eugeneが述べているように、詳細はRFCにあります。しかし、私はwiresharkとの独自の接続を見て、何が起こるかを見ることをお勧めします。 –

関連する問題