在本地xampp/apache服务器上设置SSL

23

我正在尝试从本地的Web服务器访问Active Directory。为此,我正在使用最新版本的xampp和名为adLDAP的PHP脚本。如果我理解正确,我需要启用SSL才能访问https URL。我试图在Google上搜索相关信息,但没有成功:( 有人可以提供教程链接或者向我解释如何在Windows 7 64位上为xampp / apache安装SSL吗?任何帮助都将不胜感激:)


当我导航到 \adLDAP\examples\authenticate.php 文件时,它将我重定向到 https:// URL。Firefox 显示访问被禁止!错误 403,因为我没有启用 SSL。 - horgen
7个回答

28

Apache部分 - 可以让您打开https://localhost/xyz

有一个配置文件xampp/apache/conf/extra/httpd-ssl.conf,其中包含所有特定于ssl的配置。它有相当好的文档说明,所以请阅读注释并查看http://httpd.apache.org/docs/2.2/ssl/。 该文件以<IfModule ssl_module>开头,因此仅在apache使用其mod_ssl模块启动时才会生效。

在编辑器中打开文件xampp/apache/conf/httpd.conf,并搜索以下行:

#LoadModule ssl_module modules/mod_ssl.so

去掉井号,保存文件并重新启动apache。现在,Web服务器应该使用xampp的基本/默认ssl配置开始;足够用于测试,但您可能想多了解一些关于apache文档中的mod_ssl。


PHP部分-使adldap能够使用ldap over ssl

adldap需要php的openssl扩展来使用“ldap over ssl”连接。openssl扩展随xampp一起提供。您必须“告诉”php加载此dll,例如在您的php.ini中有一个extension=nameofmodule.dll
运行

echo 'ini: ', get_cfg_var('cfg_file_path');

它应该向您显示PHP安装使用的ini文件(可能在php-apache模块和php-cli版本之间有所不同)。 打开此文件并搜索

;extension=php_openssl.dll

去掉分号,保存文件并重新启动Apache。

另请参阅:http://docs.php.net/install.windows.extensions


1
回显行显示如下答案:C:\xampp\php\php.ini,但此文件中没有 ;extension=php_openssl.dll。我还检查了 \php\ext 文件夹,也没有 php_openssl.dll :\ - horgen
1
好的,php_openssl 已经启用。看一下修订答案的第一部分。 - VolkerK
1
xampp/apache/bin 目录下有一个 openssl.exe。很可能在 stackoverflow 或 http://serverfault.com 上会有一两个关于如何在 win32 下创建证书的问题。 - VolkerK
哦,我的天。看起来当我重新安装XAMPP并使用默认的htdocs文件夹时,https就可以工作了。:P - horgen
2
@VolkerK,谢谢,这篇文章帮了很大的忙。对于未来的搜索者,extension=php_openssl.dll行实际上在XMAPP 1.7.4的php.ini中缺失...但这是一个简单的修复。 - Courtney Christensen
显示剩余5条评论

6

原来,在 XAMPP 1.7.2 的 PHP 5.3 中已经编译并启用了 OpenSSL,因此不再需要单独的扩展 DLL 文件。

但是,请务必在 PHP.ini 文件中启用该功能,添加以下行:extension=php_openssl.dll


4

我已经尝试了这里建议的大部分步骤,但仍然无法解决问题。尝试以下方法可以解决: 打开XAMPP控制面板,找到Apache模块配置按钮。点击“配置”按钮,选择PHP(php.ini)。用任何文本编辑器打开并删除php_openssl前的分号。保存并重新启动Apache。问题应该就解决了!


2
您可以通过创建自签名证书并安装这些证书来在XAMPP上启用SSL。输入以下命令以生成并将证书移动到ssl文件夹中。

openssl genrsa -des3 -out server.key 1024

openssl req -new -key server.key -out server.csr

cp server.key server.key.org

openssl rsa -in server.key.org -out server.key

openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

cp server.crt /opt/lampp/etc/ssl.crt/domainname.crt

cp server.key /opt/lampp/etc/ssl.key/domainname.key

(如果您不是超级用户,请在每个命令前使用sudo)
现在,请检查[XAMPP_HOME]/etc/httpd.conf中是否启用了mod_ssl:

LoadModule ssl_module modules/mod_ssl.so

通过编辑[XAMPP_HOME]/etc/extra/httpd-ssl.conf添加一个虚拟主机,例如"localhost.domainname.com",如下所示:
<virtualhost 127.0.1.4:443>
    ServerName localhost.domainname.com
    ServerAlias localhost.domainname.com *.localhost.domainname.com
    ServerAdmin admin@localhost

    DocumentRoot "/opt/lampp/htdocs/"

    DirectoryIndex index.php

    ErrorLog /opt/lampp/logs/domainname.local.error.log
    CustomLog /opt/lampp/logs/domainname.local.access.log combined

    SSLEngine on
    SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
    SSLCertificateFile /opt/lampp/etc/ssl.crt/domainname.crt
    SSLCertificateKeyFile /opt/lampp/etc/ssl.key/domainname.key

    <directory /opt/lampp/htdocs/>
            Options Indexes FollowSymLinks
            AllowOverride All
            Order allow,deny
            Allow from all
    </directory>
    BrowserMatch ".*MSIE.*" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0
</virtualhost>

将以下条目添加到 /etc/hosts 文件中:

127.0.1.4 localhost.domainname.com

现在,请尝试安装证书或将证书导入浏览器中。我已经检查过,在Ubuntu上可以正常工作。


1
我已经查看了所有互联网上的答案和教程,以下是在本地主机上使用XAMPP启用SSL(https)的基本步骤:

必须:

  1. 运行 -> "C:\xampp\apache\makecert.bat"(在Windows上双击) 输入您选择的密码,对于除“localhost”之外的所有内容都按Enter键!在此处提问时要小心:

    Common Name (e.g. server FQDN or YOUR name) []:localhost

    (证书仅针对域名区域发布!)

  2. 重新启动apache
  3. Chrome -> 设置 -> 搜索“Certificate” -> 管理证书 -> 受信任的根证书颁发机构 -> 导入 -> “C:\xampp\apache\conf\ssl.crt\server.crt” -> 必须确认“YES”!
  4. https://localhost/testssl.php -> [OK,现在变成绿色了!](任何html测试文件)

可选:(如果上述方法不起作用,请执行以下更多步骤)

  1. 以管理员身份运行XAMPP(开始 -> XAMPP -> 右键单击 -> 以管理员身份运行)
  2. XAMPP -> Apache -> Config -> httpd.conf(“C:\ xampp \ apache \ conf \ httpd.conf”)

    LoadModule ssl_module modules / mod_ssl.so(删除行首的#)

  3. XAMPP -> Apache -> Config -> php.ini(“C:\ xampp \ php \ php.ini”)

    extension = php_openssl.dll(从行首删除;)

  4. 重新启动Apache和Chrome!

检查证书的任何问题或状态:

Chrome -> F12 -> Security -> View Certificate


0

我已经按照建议的步骤做了所有事情,但我的代码仍然无法工作,因为我正在使用curl

如果您在php文件中使用curl,则curl似乎默认拒绝所有ssl流量。对我有效的快速修复方法是添加:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

调用之前:

 curl_exec():

在 PHP 文件中。 我相信这将禁用所有 SSL 证书的验证。

4
禁用证书验证会打开潜在的中间人攻击漏洞,而SSL/TLS旨在防范此类攻击。不要这样做!请勿禁用证书验证。 - Bruno
1
是的。我在回答中应该更加注意这一点。只有在你没有处理重要事情时才可以这样做。我将其用于本地主机上访问我个人编写的网站。 - Chris Dutrow

0
在Chrome中启用此设置的方法是:
chrome://flags/#allow-insecure-localhost

只需将此输入到URL输入框中并启用它。重新启动浏览器。必须在浏览器中导入SSL server.crt到"受信任的根证书颁发机构"中。
https已按预期开始工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接