如何找出服务器上安装的SSL证书? (使用PHP)
如何找出网站是在SSL上还是不在SSL上?我正在为一个WP插件进行实时事务处理,插件检查该站点(安装了哪个插件)使用SSL或不使用&我必须在结帐页面上显示一条警告消息,如果该站点是不在SSL上。如何找出服务器上安装的SSL证书? (使用PHP)
如果是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');
@ Lex,这基本上是如何通过脚本查询脚本HTTPS协议,如果脚本被HTTPS请求,则$ _SERVER ['HTTPS']被设置并且等于'on'。但我试图弄清楚SSL是否安装在网站正在运行的服务器上。我发现php脚本http://uniapple.net/blog/?p=539#comment-2705和我测试,但不知道它在所有方面的作用?谢谢 – 2012-04-05 12:34:24
您所指的代码是使用卷曲,可能无法使用在共享主机检查这个http://*.com/questions/9852937/php-curl-proxy-not-work-with-godaddy-shared-hosting,和代码我给你可以使用当你插件安装,并开始响应请求,你可以要求wordpress给ssl url,并显示警告,如果ssl不存在,并且如果请求没有ssl(使用上面的代码检查),你的插件将不会工作显示错误消息 – 2012-04-05 12:39:40
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);
}
}
在this question中描述的此问题有多种解决方案。 如果您使用的是Apache Httpd,并且您可以缩小某个前缀的路径,则可以在Location
指令中使用SSLRequireSSL
。或者,您可以在PHP中检查$_SERVER['HTTPS']
,如果它已定义(它可能取决于Web服务器,但通常是)。
更重要的是,不要太在意检查您所服务的页面是否通过HTTPS提供服务。客户端负责检查,因为到达服务器时,已经太晚了:它可能已经被MITM攻击者拦截(甚至可能通过HTTPS发出请求,即使真正的客户端也是如此不)。我在this answer中对此问题做了更长时间的解释。从用户界面的角度来看,您应该明确指出用户将进入“安全”部分,由他们来检查后续请求是否通过HTTPS。
检查您的服务器确实是通过HTTPS运行并不一定是坏事,但从安全角度来看,这并没有多大帮助。真正重要的是,所有到那个安全部分的链接必须使用https://
(并且一定不要依靠自动URL重写来这样做)。
由于这个问题很老,而且答案有点过时,所以我以为我会插话!
我看到你问了一个WordPress插件。 WordPress有一个is_ssl()函数来检查一个页面是否从WordPress 2.6开始使用SSL。
我想这个问题是相关http://*.com/questions/4503135/php-get-site-url-protocol-http-vs-https – 2012-04-05 11:42:25
这基本上是如何通过HTTPS协议查询脚本,如果脚本被HTTPS请求,则$ _SERVER ['HTTPS']被设置并且等于'on'。但我试图弄清楚SSL是否安装在网站正在运行的服务器上。我发现php脚本http://uniapple.net/blog/?p=539#comment-2705和我测试,但不知道它在所有方面的作用?谢谢 – 2012-04-05 12:38:20