如何发现SSL证书安装在服务器上?(使用PHP)


How to find out SSL certificate is installed on a server? (Using PHP)

如何确定网站是否使用SSL?我正在为实时交易开发WP插件,插件检查网站(安装了插件)是否使用SSL是很重要的;如果网站不在SSL上,我必须在结账页面上显示一条警告消息。

您可以检查$_SERVER['HTTPS']变量。

function is_exist_ssl($domain){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://".$domain);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt ($ch, CURLOPT_HEADER, 0);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_exec($ch);
if(!curl_error($ch)){
$info = curl_getinfo($ch);
if($info['http_code'] == 200){
return true;
}
return false;
}else{
return false;
}
}

用法:

$domain = 'uniapple.net';
if(is_exist_ssl($domain)){
echo "SSL is enabled!";
}else{
echo "No SSL"; 
}
//usage ::
if(!isset($_SERVER['REDIRECT_HTTPS']) || $_SERVER['REDIRECT_HTTPS'] != 'on'){
if(is_exist_ssl($domain)){
header('location : https://'.$domain);
}
}

由于这个问题很老,而且答案有点过时,我想我应该插话!

我看到你在问一个WordPress插件。自WordPress 2.6以来,WordPress有一个is_ssl()函数来检查页面是否使用ssl。

这里有一个例子:


if ( is_ssl() ) {
  print_r('SSL is running!');
} else {
  print_r('Please install an ssl certificate!');
}

如果是HTTPS请求,则会将超全局$_SERVER数组中的"HTTPS"值设置为"on"。如果不是HTTPS请求,则不会对其进行设置。

因此,要测试它是否是PHP中的HTTPS请求,可以这样做:

    if( isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on' ) {
        ...
    }

或者,如果你需要在代码中多次知道它是否是HTTPS请求,你可以将其设置为常量,如下所示:

define('IS_HTTPS_REQUEST', isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on');

这个问题中描述了许多解决方案。如果您使用的是ApacheHttpd,并且可以将路径缩小到某个前缀,则可以在Location指令中使用SSLRequireSSL。或者,如果$_SERVER['HTTPS']已定义,您可以在PHP中检查它(它可能取决于web服务器,但通常是这样)。

更重要的是,不要过于关注检查您所服务的页面是否通过HTTPS提供服务。客户端有责任进行检查,因为当它到达服务器时,已经太晚了:它可能已经被MITM攻击者拦截(即使真正的客户端没有拦截,他甚至可能通过HTTPS发出请求)。我在这个答案中对这个问题作了较长的解释。从UI的角度来看,您应该明确用户将进入一个"安全"部分,并由他们检查后续请求是否通过HTTPS。

检查服务器是否确实在HTTPS上运行并不一定是坏事,但从安全角度来看,这并没有多大帮助。真正重要的是,到该安全部分的所有链接都必须使用https://(并且不能依赖于自动URL重写)。