web-dev-qa-db-ja.com

httpはHTTPSなしの暗号化をサポートしていますか(STARTTLSなど)?

httpは、httpsSTARTTLSと同様に、smtpなしの暗号化をサポートしますか?

これは愚かな質問のように聞こえるかもしれませんが、考えてみてください。

銀行は強力な暗号化を必要とし、それなしでビジネスを行うことはできません。

ただし、通常のWebサイトは必ずしもそうであるとは限りませんが、それでもカジュアルな暗号化の恩恵を受け、STARTTLSsmtpの場合と同様に、さまざまな種類の攻撃を防ぎます。

そのため、通常のWebサイトの場合、ブラウザーがsslで問題を抱えている場合(そのプロトコルの非互換性、サポートされていないモバイルデバイス、またはユーザーの明示的な設定)、暗号化せずに安全に続行できます。面倒。

HTTPを明示的に使用せずに暗号化できるhttpsプロトコルの拡張機能はありますか?例えば。 Accept-Encoding: gzipContent-Encoding: gzipのようなものまたはSTARTTLS内のsmtp?そうでない場合、なぜそうではないのですか? WiFiのWPA2でさえ暗号化を行いますが、証明書や認証局を気にする必要はありません。

基本的に、私はHTTPS-Everywhere拡張機能のようなものを考えていますが、これはhttps://アドレススキームのバイラルプロパガンダなしで自動的に機能します。 https://アドレススキームと同様に、アドレススキームを分割せずに、コンテンツプロバイダーがhttps://を常にサポートすることをコミットする必要なく、その一部です。

7
cnst

プレーンHTTPのSTARTTLSには 標準 があります。 「STARTTLS」は引き続きSSLであることに注意してください。 dynamicsを変更するだけですが、そのようにして実装の複雑さを回避することはできません。

一般的に言えば、HTTPにSTARTTLSを使用する人はいません。これは、主に安全性が低いためです。実際、SSL-for-Web-browsersの非常に大きな部分は視覚的なフィードバックであり、これによりユーザーは暗号化(有名な「南京錠のアイコン」)を認識できます。それがなければ、ユーザーは本当にSSLを取得しているかどうか、または自分のパスワードと銀行口座を略奪する偽のサイトを閲覧しているかどうかを知る方法がありません。

「プロトコルの非互換性」と「パワー不足のデバイス」は神話です。 Any現在実行中のブラウジング対応デバイスは、少なくともSSL 3.0の実行方法を知っており、適切なセキュリティにはこれで十分です。電力に関しては、私は個人的に実装し、33 M​​Hzの組み込みでSSLを実行していますARM CPU;これは、腕時計としては価値のない種類のデバイスです。基本的な銀行のスマートカードでも、プラスチックの長方形に埋め込まれた小さなチップは、それよりも強力です。電力不足のためにSSLをサポートしていないと人々が言うとき、これは嘘です。彼らがSSLをサポートしていないのは、彼らがSSLをサポートしていないということです。怠惰です。

「ユーザーの好み」に関しては、まあ、それは一種の無形です。ただし、安全ベルトは車に必須であり、それには正当な理由があります。実際、協会は全体として「ユーザーの好み」に関係なく安全帯を施行する権利があります。なぜなら、同じ協会全体が、軽度の事故を起こした不注意なドライバーが劇的な障害に変わった結果をサポートする必要があるためです。彼のベルトは付けていませんでした。同じ理由がSSLにも当てはまります。私はしないので、ユーザーがSSLを「オプトアウト」できるようにしたいのですが、オプトアウトは非常に愚かです。

14
Tom Leek

あなたはすべきではありません

その理由は、https:// URIスキームは、ユーザーとブラウザの両方に安全な環境で動作していることを通知します。安全な情報が安全でない環境に漏洩しないように注意する必要があります。これはよく理解されており、かなり強力なシステムです。安全でない接続から安全な接続に切り替えるためにサーバーが使用するメカニズムは、安全なURLへのリダイレクトです。クライアントが使用するメカニズムは、httpではなくhttpsを使用してURLを要求することです。原則として、この全体は機能します

しかし、より正確にあなたの質問に答えるために、はいそのようなことが存在します。これはHTTP/1.1 pgrade header です。これにより、クライアントとサーバーはプロトコルを直接ネゴシエートできます。 TLSへのアップグレードは RFC 2817 で説明されています。

クライアントは、サーバーがアップグレードをサポートしているかどうかを確認するために、次のようなメッセージを送信する場合があります(RFCの例)。

   OPTIONS * HTTP/1.1
   Host: example.bank.com
   Upgrade: TLS/1.0
   Connection: Upgrade

要求されたリソースを表示するためにアップグレードがrequiredであることを示すサーバー応答は、次のようになります(これもRFCから)。

   HTTP/1.1 426 Upgrade Required
   Upgrade: TLS/1.0, HTTP/1.1
   Connection: Upgrade

上記の理由により、これらはほとんど完全に未使用です。 HTTPS URIを使用する必要があります。 「アップグレード」メカニズムは、セキュリティの観点からは劣ったオプションです。

それにもかかわらず、「アップグレード」メカニズムは他の目的で使用されます。具体的には、それが Webソケット の開始方法であり、クライアントとサーバーが [〜# 〜] spdy [〜#〜] プロトコル。

5
tylerl

STARTTLSを誤解していると思います。このコマンドは、クライアントがTLSを実行することを望んでおり、サーバーが同意した後、通常のTLSハンドシェイクが開始することを他のサーバーに伝えます。証明書とすべてのもので-httpsと同じです。主な違いは、TCP接続の直後にTLSにコミットするのではなく、プレーンテキストデータ(ウェルカムメッセージ、EHLO ...)を交換した後にのみです。) TLSが使用されているかどうかは教えないでください。これは良いことでも悪いことでもあります。

しかし、はい、HTTPには同様に広く使用されているメカニズムがあります。プロキシをトンネリングするときのCONNNECTリクエストです。これはRFC2818で定義されており、同じRFCで、 'Upgrade'ヘッダーを使用してアップグレードの別のメカニズムも定義されています。このアップグレードはオプション(クライアントが要求するがサーバーがサポートしない場合は受け入れる)または必須(サーバーにはhttpsが必要)にすることができます。

今日、UpgradeヘッダーはWebSocket接続を作成するために使用されていますが、SSLアップグレードに使用されるのを見たことはありません。

2
Steffen Ullrich