| HTTP |
|---|
| リクエストメソッド |
| ヘッダーフィールド |
| レスポンスステータスコード |
| セキュリティアクセス制御方法 |
| セキュリティの脆弱性 |
セキュアハイパーテキスト転送プロトコル(S-HTTP)は、インターネット上で行われるウェブ通信を暗号化するためのHTTPSプロトコルの廃止された代替手段です。1994年にEITのEric RescorlaとAllan M. Schiffmanによって開発され[ 1 ] 、1999年にRFC 2660 として公開されました。Netscapeがブラウザ市場を支配していたため、HTTPSはウェブ通信を保護するための 事実上の標準となりました
S-HTTPは、提供されたページデータとPOSTフィールドなどの送信データのみを暗号化し、プロトコルの初期化部分は変更しません。そのため、S-HTTPは、暗号化されていないヘッダーによって残りの伝送が暗号化されるかどうかが決定されるため、同じポートでHTTP(セキュアでない)と同時に使用できます。
対照的に、HTTP over TLSは通信全体をトランスポート層セキュリティ(TLS、旧SSL)で保護するため、プロトコルデータが送信される前に暗号化が開始されます。これにより、名前ベースの仮想ホスティングでは、リクエストの対象となるDNS名を特定する上で「鶏が先か卵が先か」という問題が発生します。
つまり、サーバー名表示(SNI)をサポートしていないHTTPS実装では、DNS名ごとに別々のIPアドレスが必要となり、すべてのHTTPS実装では暗号化を明確に使用するために別々のポート(通常はHTTPの標準80ではなく443)[ 2 ]が必要になります(ほとんどのブラウザでは別のURIスキーム、https://として扱われます)。
RFC 2817に記載されているように、HTTPはHTTP/1.1アップグレードヘッダーを実装し、TLSにアップグレードすることでもセキュリティを確保できます。このようにネゴシエートされたTLS上でHTTPを実行する場合、名前ベースの仮想ホスティング(追加のIPアドレス、ポート、URI空間は不要)に関してHTTPSのような影響はありません。ただし、この方法をサポートする実装は限られています。
S-HTTPでは、目的のURLは平文ヘッダーで送信されず、空白のままとなります。別のヘッダーセットは暗号化されたペイロード内に存在します。HTTP over TLSでは、すべてのヘッダーが暗号化されたペイロード内に含まれており、サーバーアプリケーションは通常、TLSの致命的なエラー(「クライアント証明書が信頼されていません」や「クライアント証明書の有効期限が切れています」など)から正常に回復する機会がありません。[ 2 ]