如何找出服务器上安装的SSL证书? (使用PHP)

问题描述 投票:3回答:5

如何在SSL上找到该网站是否使用SSL?我正在为实时交易制作一个WP插件,插件检查网站(安装了哪个插件)是否使用SSL非常重要&我必须在结帐页面上显示警告消息,如果网站是不在SSL上。

php wordpress url ssl
5个回答
3
投票

你可以查看$_SERVER['HTTPS']变量。


1
投票
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);
}
}

1
投票

由于这个问题很老,而且答案有点过时,我以为我会参与其中!

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

这是一个例子:


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

0
投票

如果是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');

0
投票

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

更重要的是,不要过分关注检查您通过HTTPS提供服务的页面。客户有责任检查,因为,当它到达服务器时,为时已晚:它可能已经被MITM攻击者截获(即使真正的客户端做了,也可能通过HTTPS发出请求)不)。我在this answer上对这个问题做了更长的解释。从UI的角度来看,您应该明确表示用户将进入“安全”部分,并由他们来检查后续请求是否将通过HTTPS。

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

© www.soinside.com 2019 - 2024. All rights reserved.