質問
SSLのページかどうか判別する方法
- 投稿日時:2005/05/30 15:46
情報漏えい防止のため、PCからのアクセスをSSLに限定したいのですが、SSLかどうかを判別する方法で困っています。
あるサーバでは以下のスクリプトでうまく稼動しています。
しかし、別のサーバでは「サーバが見つかりません」となってしまいます。
// SSLかチェック(SETTLEMENT_SCRIPTにはSSLのアドレス)
//if( !$_SERVSER["SSL_SERVER_DN"] && !$_SESSION["user_mobile"] ) header("Location: " . SETTLEMENT_SCRIPT );
$_SERVSERの値を調べてみたら通常のページでもSSLのページでも値が変わる変数はなく、$_SERVSER["SSL_SERVER_DN"]という変数もないためでした。
レンタルサーバに問い合わせると、「SSLはもっと前の段階で振り分けているため機能しない」というようなことを言われました。(聞いてもよく分からなかった)
こういう場合、どう処理してよいのかわかりません。
携帯でアクセスしてきたユーザーがアドレスを見て、同じURLでPCでアクセスしてきてしまったらお手上げです。
携帯もSSLで接続できればいいのですが、携帯で接続しようとすると「このサイトは安全でない可能性があるため接続できません(発行者エラー)」と表示され、接続できません。
どうしたらよいのでしょう?
環境:
PHP Version 4.3.0
SSLはレンタルサーバの共有SSL
回答 (6件)
- 最新から表示
- 回答順に表示
No.6
- 回答日時:2006/06/12 04:38
PHPは解らないのですが、perlで行った事があります。
同様のSERVER_PORT=80のサーバでSSLかどうか確認するために、他の環境変数でチェックしました。
プロキシサーバを経由するためなのか、HTTP_VIA(phpにあるかどうかはわからないけれど)と言う環境変数ができていたので、それでチェックしました。
httpと、httpsで環境変数一覧を出して比較してみると常時違う環境変数があれば、それでチェックできるかもしれません。
No.5
- 回答日時:2005/05/31 07:24
SERVER_PORT => 80
ということは、SSLがかかってないということだと思いますが・・・。
HTTPと違うポートでリスニングするというのは大前提ではないのかいな?
apache(レンタルサーバ)の設定がちがうんじゃないでしょうか?
DOCUMENT_ROOTが違うとか・・・
スクリプトで悩む前に レンタルサーバー側をよく調べたほうがいいと思います。
この回答への補足
レンタルサーバーに問い合わせてみました。
以下、回答です。
-----------------------------------------------------
■SSL通信につきまして
弊社で提供しておりますの共有SSLの仕組みにつきまして説明させていただきます。
SSLアクセラレーターを通じてSSL通信を実現しております。
SSL通信を行う際、閲覧者とSSLアクセラレーター間はSSL通信を行いますが、
SSLアクセラレーターからお客様サーバー間は通常のHTTP通信となります。
従いまして、お客様のご指摘通り、SSL通信であるか否かの判定が行えない環境で
ございます。
■独自SSLでは
共有SSLのほかにベリサインなどの独自SSLの場合につきましても、同様の仕組みを
採っていますが、こちらに関しましてはお客様のご要望に応じてSSLアクセラレーター
経由ではなく、サイトに直接、証明書をインストールする対応をさせていただいて
おります。
この場合にはSSL通信の判定が可能になります。
大変恐縮ではございますが、結果としまして共有SSLの場合には、お客様のご要望に
ございます、SSL通信の判定が行えない環境でございます。
-----------------------------------------------------
ということは、あきらめるしかないということですね。。。
- 質問者のみ
- この回答をベストアンサーに選ぶ
- この回答にお礼をつける
No.4
- 回答日時:2005/05/30 18:11
>>$_SERVSERの値を調べてみたら通常のページでもSSLのページでも値が変わる変数はなく、$_SERVSER
を見落としてました。
$_SERVSER ?? $_SERVER とは違うもの?
↓も使えるかもです。
.htaccess
<Files *>
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} !^DoCoMo/ [NC]
RewriteCond %{SERVER_PORT} ^80$
RewriteRule ([^/]*)$ https://%{HTTP_HOST}/$0
</Files>
(DoCoMoじゃないやつが、80でアクセスしてきたら、httpsにとばす)
この回答への補足
回答ありがとうございます。
すいません$_SERVSER → $_SERVER の間違いです。
SERVER_PORT も調べてみましたが、両方とも80なので不可です(;;
- 質問者のみ
- この回答をベストアンサーに選ぶ
- この回答にお礼をつける
No.3
- 回答日時:2005/05/30 17:37
Apacheのhttpd.confに下記3行を○の部分を書き換えて追加する
<Directory /home/○○○/public_html/○○○>
SSLRequireSSL
</Directory>
又は.htaccessが利用できるならば、SSL用のディレクトリに下記1行を書いた.htaccessをUPする
SSLRequireSSL
これでSSL以外ではエラーになり接続できない。
この回答への補足
.htaccessで設定してみましたが、SSL、通常、どちらでアクセスしてもInternal Server Errorとなってしまいました。(;;
- 質問者のみ
- この回答をベストアンサーに選ぶ
- この回答にお礼をつける
No.2
- 回答日時:2005/05/30 17:34
$_SERVER['SERVER_PORT']
が 80 か 443
ちなみに
while(list($key,$val) = each($_SERVER)){
echo $key.'---'.$val.'<BR>';
}
で変数確認してみればいいんじゃないでしょうか
この回答への補足
SSLで接続した時の$_SERVERの一覧です
SERVER
DOCUMENT_ROOT => /var/www/html
HTTP_ACCEPT => */*
HTTP_ACCEPT_ENCODING => gzip, deflate
HTTP_ACCEPT_LANGUAGE => ja
HTTP_CONNECTION => Keep-Alive
HTTP_HOST => **********.jp
HTTP_USER_AGENT => Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)
PATH => /sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin
REMOTE_ADDR => ***.***.**.**
REMOTE_PORT => 4012
SCRIPT_FILENAME => /var/www/html/*****/ini.php
SERVER_ADDR => ***.***.*.**
SERVER_ADMIN => ******@*******.jp
SERVER_NAME => www.*******.jp
SERVER_PORT => 80
SERVER_SIGNATURE =>
Apache/1.3.27 Server at www.********.jp Port 80
SERVER_SOFTWARE => Apache/1.3.27 (Unix) (Red-Hat/Linux) FrontPage/5.0.2.2626 PHP/4.3.0 mod_perl/1.27
GATEWAY_INTERFACE => CGI/1.1
SERVER_PROTOCOL => HTTP/1.1
REQUEST_METHOD => GET
QUERY_STRING =>
REQUEST_URI => /******/ini.php
SCRIPT_NAME => /******/ini.php
PATH_TRANSLATED => /var/www/html/******/ini.php
PHP_SELF => /*****/ini.php
argv => Array
argc => 0
- 質問者のみ
- この回答をベストアンサーに選ぶ
- この回答にお礼をつける
No.1
- 回答日時:2005/05/30 16:56
正確かどうかは分からないが(Apacheの設定によっても変わるのかも)、HTTPSという環境変数が設定されないかなぁ?
if(isset($_SERVER['HTTPS']))
print "SSLです";
else
print "SSLじゃないあるね";
この回答への補足
回答ありがとうございます。
$_SERVER['HTTPS']という変数はSSLでも設定されていませんでした。(;;
- 質問者のみ
- この回答をベストアンサーに選ぶ
- この回答にお礼をつける
- 質問者のみ
- ベストアンサーを選ばずに質問を締め切る
このQ&Aを見た人はこんなQ&Aも見ています
- 4PHPで余りを求めるには
- 5【PHP 正規表現を使って文字列を抽出】
- 6<div align="center">を使わずにCSSだけでセンター表示する方法?
- 7セッション(session)ってクッキー(cookie)とどう違うの?
- 8文字列を含まないという正規表現は?
- 9First nameとLast nameを教えていただきたいです。
- 10Inner join と Left joinの明確な違いは?
- 11PHPで偶数と奇数を判断するには
- 12php.ini を設定を変更すると再起動しなければいけないのでしょうか?
- 13フォームのボタンをSUBMITから画像にしたいのですが…
- 14Maximum execution time of 30 seconds exceededの対応方法
- 15了解と承知の違いって?
- 16インラインフレームから親ウィンドウの操作
- 17リダイレクトでPOST
- 18linuxでディレクトリをコピーしようとするとomitting directoryというエラー
- 19javascriptにてHTMLのhiddenエリアのvalueを変更したい
- 20Javascriptで引数の参照渡しか戻り値を複数取得したい
注目の記事
失敗しない!スマホデビュー講座
勉強をやる環境のつくり方は?英語に慣れされるには?みんなの疑問をピックアップしました。
このQ&Aを見た人がよく見るQ&A
このカテゴリで人気のQ&Aランキング
- 4文字列から、特定の文字を削除したい
- 5PHPを覚えると何ができるのか??
- 6phpでmb_send_mailを用いてメールの...
- 7【cakephp】validationエラー
- 8Maximum execution time of 30 seco...
- 9Parse error: syntax error, unexpe...
- 10syntax error, unexpected $end ...
- 11QRコードで画像や音声が作成出来ま...
- 12PHPでメールを送信するには
- 13php mysql で WHERE句内に変数を入...
- 14PHPの関数実行
- 15リダイレクトでPOST
- 16csvファイル出力時に文字化けしてし...
- 17syntax error, unexpected '}' とい...
- 18PHPで作成するログイン画面の作り方...
- 19PHPで配列から値を取得したい
- 20php.ini を設定を変更すると再起動...