web-dev-qa-db-ja.com

lihgttpdで単一のポートを使用してhttpおよびhttpsリクエストを処理する

現在、httpとhttpsを別のポートとして使用しています。そして、リクエストURIに基づいて、httpからhttpsへの切り替えとその逆のリダイレクトルールを作成しました。しかし、lighttpdのhttpsとhttpsに単一のポートしか使用できない場合。それが最善の解決策になります。

それを行う他の方法はありますか? lighttpd自体で利用できない場合。 Tomcatとlighttpdの組み合わせはどうですか、それでも不可能ですか?

1
agfe2

現実的ではありません。 HTTPとHTTPSは、著しく異なる方法で動作する2つの異なるサービスです(名前とペイロードが類似しているにもかかわらず)。クライアントとサーバーが両方とも理解できる言語で通信できるようにするには、一意のサービスを一意のポートにバインドする必要があります。

これを実現するには、ポートに接続するクライアントを用意し、接続の種類(HTTPまたはHTTPS)をネゴシエートしてから、適切な通信モードに切り替える必要があります。そのネゴシエーションロジックはクライアントに存在しないため、このサーバー側を実装する方法はありません。

3
Chris Thorpe

あなたが望んでいるのは [〜#〜] starttls [〜#〜] HTTPの場合です。これは実際には RFC 2817 によって提案されており、これは現在のYonInterneteのYeOldenDaysで書かれています。 Apacheとlighthttpdの両方がこれをサポートしていることを示唆するいくつかのクイックリファレンスを見つけましたが、さらなる研究はlighttpdに失望しています—それについては申し訳ありません。 Apacheで設定 のドキュメントは次のとおりです。基本的に:

<VirtualHost _default_:80>
SSLEngine optional
...
</VirtualHost> 

クライアントのサポートもありません。 IE7はいくつかの気の利いたTLS拡張機能をサポートしています(名前ベースのSSL証明書は私たちの生涯で可能かもしれません)が、明らかにSTARTTLS/RFC 2817ではありません。そして Mozillaの未解決のバグ があります。うまくいく。問題の1つは、RFCが暗号化を本当にオプションにすることであり、これはインターネット上の暗号化のほとんどのアプリケーションにとって一般的に望ましくありません。ただし、カスタムクライアントを使用しているため、一般的なブラウザサポートの欠如やセキュリティの問題は問題になりません。

2
mattdm