2009-05-23 4 views
1

나는 수업 시간에이 기능이 있습니다PHP를 통해 웹 서버에 ssl이 있는지 확인하는 방법은 무엇입니까?

function enable_ssl() { 
    if ($_SERVER[HTTPS] != "on") { 
     $domain = "https://".$_SERVER['HTTP_HOST'] . "/" . $_SERVER['SCRIPT_NAME']; 
     header("Location: {$domain}"); 
    } 
} 

문제는 서버가없는 경우 SSL을 설치하는 것이 내가 페이지를 시작하는이 기능은 404 페이지로 리디렉션합니다. 나는 SSL이 설치되고 작동 할 때만이 기능을 어떻게 사용할 수 있는지 궁금했다.

가능합니까?

감사합니다.

피씨 : 일부 Google 조사를 수행했지만 아무것도 찾을 수 없습니다.

답변

2

* nix 서버의 경우 포트 443에서 수신 대기중인 웹 서버에 대해 netstat -A inet -lnp의 출력을 구문 분석 할 수 있습니다.

더 나은 옵션은 사용자를위한 구성 옵션으로 만드는 것입니다. 앱에서 HTTPS를 사용하도록 설정했는지 알려주도록합니다.

+1

+1 후자의 조언을 위해. – Gumbo

+0

문제는 GUI를 통해 설정을 편집하고 SSL을 사용하면 오류로 인해 SSL을 다시 끌 수 없다는 것입니다. 즉, 소프트웨어 제공 업체가 혼란스러워하는 지원 티켓을 받고 있음을 의미하며, 제공 업체는 웹 사이트 가동 중단 시간을두고 직접 가서 변경해야합니다. –

1

이 아이디어

  1. 설정 포트 443에 대한 소켓 연결하고 연결되는지 확인합니다.
  2. 는 아파치 설정 파일을 읽고 당신은 curl을 사용하여 서버에 연결을 시도 할 수있는 포트
0

에 듣고 아무것도가 있는지. 그러나, 나는 또한 설정 옵션을하려고합니다. 아래를 사용하는 경우 무한 루프가 발생하지 않도록하십시오.

function ignoreHeader($curl, $headerStr) 
{ 
    return strlen($headerStr); 
} 

$curl = curl_init("https://example.com/"); 
curl_setopt($curl, CURLOPT_NOBODY, TRUE); 
curl_setopt($curl, CURL_HEADERFUNCTION, 'ignoreHeader'); 
curl_exec($curl); 
$res = curl_errno($curl); 

if($res == 0) 
{ 
    $info = curl_getinfo($curl); 
    if($info['http_code'] == 200) 
    { 
    # Supports SSL 
    enable_ssl(); 
    } 
} 
else 
{ 
    # Doesn't. 
} 
0

내 랩톱에서 내 개발 서버로 xampp을 사용합니다. 아직 xampp에 SSL 연결을 설정하지 않았습니다. 프로덕션 서버에서 SSL을 사용할 수 있고 올바른 인증서가 있습니다.

$ _SERVER [ 'HTTPS']이 (가) 내 xampp 개발 서버에 존재하지 않지만 프로덕션 서버에 존재한다는 사실을 확인했습니다.

$ _SERVER [ 'HTTPS']가 설정되지 않은 경우 서버에서 SSL을 사용할 수 없다고 가정합니다.

<?php 

if (isset($_SERVER['HTTPS')) echo 'SSL Exists' 
else echo 'No SSL' 

?> 
+1

대부분의 경우 $ _SERVER [ 'HTTPS']는 요청이 SSL을 통해 이루어진 경우에만 설정되며, 설정되어 있으면 현재 요청이 HTTPS 요청인지 여부 만 알려줍니다. 불행히도 SSL을 사용하여 동일한 URI를 요청할 수 있는지 여부는 알려주지 않습니다. – totels

2

확장로드!

http://php.net/manual/en/function.extension-loaded.php

예컨대

if(!extension_loaded('openssl')) 
{ 
    throw new Exception('This app needs the Open SSL PHP extension.'); 
} 
+1

이렇게해도 문제가 해결되지 않습니다. 확장 기능이로드되었다고해서 SSL 인증서가 존재하고 특정 가상 호스트에 대해 켜져 있음을 의미하지는 않습니다. – ceejayoz

-2

이것은 워드 프레스 그것을 수행하는 방법입니다

<?php 
function is_ssl() { 
if (isset($_SERVER['HTTPS'])) { 
return true; 
if ('1' == $_SERVER['HTTPS']) 
return true; 
} elseif (isset($_SERVER['SERVER_PORT']) && ('443' == $_SERVER['SERVER_PORT'])) { 
return true; 
} 
return false; 
} 
?> 

당신은 물건을 'true를 반환'사이에서 유효성 검사를 사용할 수 있습니다! 설명 및 더 자세한 소스 코드를 보려면 http://tutes.in/2012/02/13/check-if-ssl-exists-on-a-webserver-through-php/로 이동하십시오.

0

그냥 file_get_contents을 사용하여 https를 통해 동일한 파일을 열어보고 성공한 경우 강제로 리디렉션합니다.

function IsHttps() 
    { 
     return 
      (!empty($_SERVER["HTTPS"]) && (strtolower($_SERVER["HTTPS"])!=="off")) 
      || ($_SERVER["SERVER_PORT"]==443); 
    } 

    if (!IsHttps() && extension_loaded("openssl")) 
    { 
     $target = "https://".$_SERVER["HTTP_HOST"].$_SERVER["PHP_SELF"]; 
     ini_set("allow_url_fopen", true); 
     if (file_get_contents($target)!==false) 
     { 
      header("Location: https://".$_SERVER["HTTP_HOST"].$_SERVER["URL"]); 
      die(); 
     } 
    } 
관련 문제