所以我今天刚刚安装了XAMPP,我注意到index.php检查了它是否是通过HTTPS访问的。在此之前,我认为为了使用SSL安全性,您需要一个证书,但我现在有疑问。
此时(请纠正我,这就是这个问题的重点!),我自己的研究让我相信证书只提供有关您访问的位置的信息。如果未找到证书,则由客户决定他/她是否信任该连接。
XAMPP索引页面包含此检查:
<?php
if (!empty($_SERVER['HTTPS']) && ('on' == $_SERVER['HTTPS'])) {
$uri = 'https://';
} else {
$uri = 'http://';
}
$uri .= $_SERVER['HTTP_HOST'];
header('Location: '.$uri.'/xampp/');
exit;
?>
好吧,所以我通过https://localhost
访问我的Localhost,以及Firefox“你信任这个网站吗?”页面出现了(问题是:我能相信自己吗?;))。
之后,我使用以下代码创建了我自己的小test.php
:
<?php
echo "Hi. \n";
if(isset($_POST['firstname']) && isset($_POST['lastname']))
{
echo "Your Firstname is ".$_POST['firstname']." and your Lastname is ".$_POST['lastname'];
echo "\r\n\r\n";
if (!empty($_SERVER['HTTPS']) && ('on' == $_SERVER['HTTPS'])) {
echo "You are using SSL, arentcha? :)";
} else {
echo "Hmm.. No SSL!";
}
}
?>
然后我创建了一个Delphi应用程序,它连接到http://localhost/test.php
,https://localhost/test.php
,以及http://jeffijoe.com/test.php
和https://jeffijoe.com/test.php
TIdHTTP
控件(和SSL,我将TIdSSLIOHandlerSocketOpenSSL
连接到TIdHTTP
的{{1}}媒体资源。
以下是代码:
IOHandler
结果如下:
http://localhost/test.php - 预期输出
https://localhost/test.php - 预期输出(我知道我使用的是HTTPS!)
http://jeffijoe.com/test.php - 预期输出
https://jeffijoe.com/test.php - 失败! 404 Not Found!
我的jeffijoe.com托管在常规共享主机帐户上。
所以 - 问题是:到本地主机的HTTPS是否真的“安全”?为什么在我的Localhost上没有连接到Jeffijoe.com位置的HTTPS连接失败了?证书怎么样?他们需要吗?是否可以设置安全连接而无需购买价格过高的证书?
答案 0 :(得分:8)
连接对嗅探器是安全的,即通过线路的连接是加密的。但由于证书是自签名的,因此无法保证对方确实是他们假装的人,这正是证书的要点:第三方保证对方已经被证实是他们假装的人
它在您的本地XAMPP盒子上工作的原因是它带有一个所谓的自签名证书,以及用于管理https通信的服务器基础架构,这两者在您的托管站点上可能都缺乏。
最后,它取决于你想要实现的目标:如果通信必须安全,不能嗅探,自签名证书就可以正常工作。如果你需要证明你是谁,你需要一个专业公司颁发的证书。
编辑:使这个练习更有趣:证书系统可以双向工作,即服务器向您证明它是真的,并且由于所谓的客户证书,您可以向服务器证明您就是谁假装是。根据您的使用案例,探索cllient-side证书可能非常有用,但请注意它并不容易。