質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

SSL

SSL(Secure Sockets Layer)とは、暗号化されたプロトコルで、インターネット上での通信セキュリティを提供しています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

1708閲覧

httpsで受け取ったSSLバージョンを、httpで別のサーバーに受け渡す際に引き渡したい。

ressentiment

総合スコア60

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

SSL

SSL(Secure Sockets Layer)とは、暗号化されたプロトコルで、インターネット上での通信セキュリティを提供しています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2020/10/16 05:12

前提・実現したいこと

httpsで受け取ったSSLバージョンを、httpで別のサーバーに受け渡す際に引き渡したい。

発生している問題・エラーメッセージ

セキュリティ対策として、TLSバージョンによって処理を変えようとしています。
フロントサーバーとアプリケーションサーバーを別に用意していて、フロントではhttpsでクライアントとの通信を行っているため暗号化方式も確認できるのですが、フロントとアプリケーションとのサーバー間通信はhttpで行っているためなのか、アプリケーション内で値を取得できません。

アプリケーションはPHPで書かれていて、httpsでのリクエストが来た場合は以下の方法で確認できることまでは把握しています。

PHPでSSLバージョンを判別する方法
https://www.nedia.ne.jp/blog/tech/2018/06/19/11980

また、フロントのhttpd.confないし.htaccessをいじればSSLバージョンによって処理の振り分けが可能そうであることも把握しているのですが、出来ればサーバーを止めること無く(再起動などさせず)、かつアプリケーションサーバー側で振り分け処理を実現したいので別の方法がないか探しています。

Apache httpd で接続を許すSSL/TLSのバージョンを制限する方法
https://weblabo.oscasierra.net/apache-httpd-sslprotocol/

[Apache] TLSのバージョンによって処理を変更する
https://hacknote.jp/archives/27866/

ベストな方法でなくてもとりあえずは構わないので、思いつくことがあれば回答をお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2020/10/16 05:15

「振り分け」ということは、TLS 1.1の場合は1.2と異なるコンテンツを提供する必要がある、ということでしょうか?
ressentiment

2020/10/16 05:20

はい。 ただ遮断するのではなく、別のコンテンツを表示(UserAgent等見てなるべく丁寧にブラウザ更新を促すなど)を行う予定です。
guest

回答2

0

ベストアンサー

フロントの環境変数 SSL_PROTOCOL をアプリケーションサーバーへのリクエストヘッダに含めるといいのではないでしょうか。

(設定例) SSLOptions +StdEnvVars ProxyPass / http://アプリケーションサーバー/ RequestHeader set X-Forwarded-SSL-Protocol %{SSL_PROTOCOL}e

プロキシ対象の URL、パスだと、<Directory> 扱いとならないので、.htaccess では設定できないと思います。

投稿2020/10/16 14:08

TaichiYanagiya

総合スコア12173

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ressentiment

2020/10/20 02:19

ありがとうございます!!試してみます!!
guest

0

フロント(Apache?)とAPサーバがどのような方式で連携しているか、に依るかと思います。
fcgiをmod_proxy_fcgiで連携しているのなら、環境変数を渡すという手があります。
PHPアプリの方では、その環境変数によって情報を得て判断する、ということになります。

参考: mod_proxy_fcgiのProxyFCGISetEnvIfディレクティブ より

ProxyFCGISetEnvIf "true" PATH_INFO "%{reqenv:SCRIPT_NAME}"

これは、Apacheがリクエストに設定された環境変数 SCRIPT_NAME を、fcgiアプリの環境変数 PATH_INFO として(常に)渡す例を示しています。
SSL/TLSのバージョンはmod_sslによって設定される環境変数一覧にある通り、SSL_PROTOCOL として設定されるので、なんらか好きな名前をつけて渡せることになると思います。(mod_sslを使っている場合)
※このディレクティブは、.htaccessコンテキストでも使えるので、サーバ再起動なしで .htaccess の編集だけで済みます

他の連携方法の場合でも類似の方法はありそうな気はしますが、設定のリロードくらいは要るかも知れません。
※例えばmod_fcgidなら DefaultInitEnv/FcgidInitialEnvとか

投稿2020/10/16 14:09

angel_p_57

総合スコア1681

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ressentiment

2020/10/20 02:25

proxyの設定周りが全然分かっていないので理解できてるか怪しいですが、やってみます。ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問