PHPで接続がSSLであるかを調べる方法

2016年8月14日

PHPスクリプト内でSSL暗号化通信(https://)で接続されているかを調べる方法です。

SSLで接続している場合のURLの例

$_SERVER['HTTPS']

スーパーグローバル変数 $_SERVER を利用します。$_SERVERは接続しているサーバーやファイルのパスなどの情報を格納している配列になっています。

$_SERVER のインデックスに HTTPS を指定すると、HTTPSプロトコル(https://)で接続していた場合、文字列 on を受け取ることができます。

<?php
  echo $_SERVER['HTTPS']; //httpsで通信しているときは on と表示される
?>

逆に、HTTPSプロトコルでなかった場合、このインデックスは設定すらされないので、isset で判定を行うと false が返されます。

このことを利用して、以下のようにSSL接続かどうかを判定できます。

<?php

function isHttps() {
  // httpsで通信しているかどうか
  return (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on');
}

?>

この関数は、SSL接続であれば true を返します。

$_SERVER['HTTPS']の注意点

HTTPSでないときに $_SERVER['HTTPS'] が設定されないのであれば、わざわざ中身が on であるかを確認しなくても、以下のようにすれば良いのでは? と思われるかもしれません。

function isHttps() {
  // httpsで通信しているかどうか
  return (isset($_SERVER['HTTPS']));
}

しかし、HTTPS通信が行われていないときでも、例外的に $_SERVER['HTTPS'] が設定されてしまう場合があります。

注意: ISAPI を IIS で使用している場合は、HTTPS プロトコルを通さないでリクエストが行われたときの値は off となることに注意しましょう。

PHP: $_SERVER - Manual

このように off が設定されてしまうことあるので、確実にHTTPS通信であるかどうかを判定するために、$_SERVER['HTTPS']の中身が on であるかどうかをチェックしています。

以上、PHPでSSL通信が行われているかどうかを調べる方法でした。

PHPで接続がSSLであるかを調べる方法」への1件のフィードバック

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です