要求使用openssl扩展来保证SSL/TLS安全性。

130
composer create-project flarum/flarum . --stability=beta

我尝试运行这个命令,但是它报了一个错误。

  [RuntimeException]                                                           
  The openssl extension is required for SSL/TLS protection but is not availab  
  le. If you can not enable the openssl extension, you can disable this error  
  , at your own risk, by setting the 'disable-tls' option to true.  

我尝试将"extension=php_openssl.dll"添加到"php.ini"文件中,但仍然出现了这个错误。


3
我尝试在“php.ini”中添加“extension=php_openssl.dll”,但仍然出现了这个错误。 - Mike Yang
你的php是手动安装的还是从软件包中安装的? - apex39
我认为Laragon是最好的本地开发环境。在更改php.ini后,请确保重新加载Apache。 - s3c
14个回答

250

我也遇到了同样的错误。我通过关闭Composer的TLS来解决它,这并不安全,但是我在我的开发机器上承担了风险。

尝试这个:

composer config -g -- disable-tls true

重新运行Composer,这对我有用!

但这是不安全的,不建议在您的服务器上使用。官方网站说:

如果设置为true,则所有HTTPS URL都将尝试改用HTTP,并且不执行任何网络级加密。启用此功能存在安全风险,不建议使用。更好的方法是在php.ini中启用php_openssl扩展。

如果您不想在您的机器/服务器上启用不安全层,则可以设置您的PHP以启用OpenSSL并使其工作。确保已安装PHP Openssl扩展并在php.ini文件中启用它。


要启用OpenSSL,请添加或查找并取消注释php.ini文件中的此行:

Linux/OSx:

extension=php_openssl.so

Windows:

extension=php_openssl.dll

如果需要,重新加载您的php-fpm / web服务器!

更新:

从PHP 7.4开始,该扩展名为extension=openssl(已知适用于Windows)。


29
你没有修复它。你只是隐藏了错误。你需要在Wamp服务器的php.ini文件中启用open_ssl模块。Wamp使用两个php.ini文件,一个用于Apache,另一个用于CLI。 你需要在第二个php.ini文件中启用open_ssl扩展,你可以在C:\wamp\bin\php<phpversion>\php.ini找到它。 - Narendran Parivallal
2
是的,我知道,但出于某些原因,我的公司不允许启用TLS,而用户@thermos评论说打开open_ssl模块并不起作用。然后我为这个问题提供了解决方案。 - Vinícius Medeiros
1
此外,如果您在本地开发机器上运行它,这真的不安全吗?那会如何影响您服务器的安全性呢? - user377628
1
我不太明白这个。如果我在我的开发机上这样做,那么服务器上也会镜像吗?如果不是,那么它怎么能在服务器上运行呢? - Brainmaniac
@Olof 我猜在通过composer安装时会生成SSL密钥。这些密钥将用于稍后保护您的Web服务器。 - Martin Pfeffer
显示剩余4条评论

45

该问题是由于openssl和扩展目录引起的,因此请在php.ini文件中取消以下扩展名的注释:

extension=php_openssl.dll

extension_dir = "ext"

这在我的机器上运行良好。


4
谢谢,这也适用于我的设置环境。 - mukolweke
3
在尝试了许多其他解决方案之后,这个方法对我也起作用了。我不明白为什么没有人提到取消注释 extension_dir = "ext" 这一行。 - Guillem Poy
1
是的,在php.ini中启用extension_dir = "ext"对我来说也是修复方法! - emveeoh

36

我曾经遇到和你完全相同的问题,但却找不到解决方法。后来思考一番并搜寻了一段时间后,我发现我的PHP.INI文件没有指向正确的目录以加载PHP扩展模块,所以我进入了:

"Directory in which the loadable extensions (modules) reside." (指定可加载模块所在的目录。)

然后找到了以下内容:

; http://php.net/extension-dir
; extension_dir = "./"
; On windows:
;extension_dir = "ext"

只需在 "extension_dir = "ext" 前面去掉分号即可,注意这仅适用于Windows,在运行不同操作系统的情况下,请删除第一个 extension_dir 前面的分号。

我不知道为什么我的没有被标记,但如果你遇到问题,可以检查一下这个。


5
这对我非常有效 - 与取消注释/添加php.ini中extension=php_openssl.dll一行的解决方法配合使用。 - Jay-Nicolas Hackleman
1
这对我也起作用了,但我正在运行PHP 8.0; php.ini中有_extension=openssl_而不是_extension=php_openssl.dll_。 - Marcelo Scofano Diniz

30

根据参考文献指出,有两个相关的选项:disable-tlssecure-http,可以使用其中之一。只需通过以下方式编辑配置:nano ~/.composer/config.json

{
    "config": {
        "disable-tls": true,
        "secure-http": false
    }
}

然后它会抱怨:

You are running Composer with SSL/TLS protection disabled.
Warning: Accessing getcomposer.org over http which is an insecure protocol.

但是它执行了composer selfupdate命令(或任何其他命令)。

在Linux上不能简单地“在php.ini中启用SSL”;需要使用openSSL配置为shared库编译PHP,以便能够从PHP CLI SAPI访问它。


不得不采用这种方法,因为我无法在php.ini中设置extension_dir =“ext”(Laragon一直在重写),openssl已经在php.ini中启用,而且由于某些原因我无法通过命令行设置“disable-tls”。谢谢! - Lys777

18

要启用openssl,请进入php.ini并启用此行:

extension=php_openssl.dll

如果您不想启用openssl,您可以使用以下命令设置composer不使用openssl:

composer config -g -- disable-tls true

然而,这是一个安全问题。


3
要在Ubuntu上配置Composer信任CA,您需要将证书放入/usr/local/share/ca-certificates/目录中。而要在Windows上完成此操作,则需要另谋他职了。 - Lauri Elias
实际上这对我有所帮助,加上https://superuser.com/questions/1010080/the-openssl-extension-is-missing-on-windows-while-installing-composer - Mahdi Khalili

7

尝试了各种方法后,我终于解决了这个问题。上面提供的解决方案都对我无效。我的系统是一个Windows 10 PC。为了解决这个问题,我必须更改位于此处的C:\Users\[Your User]\AppData\Roaming\Composer\config.json文件。在那里,你会找到:

{
    "config": {
        "disable-tls": true},
    "repositories": {
        "packagist": {
            "type": "composer",
            "url": "http://repo.packagist.org" // this needs to change to 'https'
        }
    }
}

需要更新packagist仓库的URL,使其指向"https"版本的URL。

我知道上面选择的解决方案对95%的情况都有效,但是像我这样的情况不适用。希望这能帮到某些人。

愉快的编码!


6

我曾遇到同样的问题。我尝试了这个页面上列出的所有方法,但只有重新安装Composer才能让它像以前一样工作。我发现我的PHP版本不匹配,通过重新安装来建立与系统环境变量中安装的PHP路径之间的依赖关系得以解决。

不建议使用composer config -g -- disable-tls true的方法。

顺便提一下,撤销此操作的方法是composer config -g -- disable-tls false


1
我认为这应该是被点赞的答案。 - ii iml0sto1
这不是一个解决方案,而是一种绕过它的方式。 - Timberman
实际上,Michael Neely解决了我的问题。我的Composer指向了错误的PHP版本,因此我一直出现错误信息:“需要openssl扩展进行SSL/TLS保护...”以上任何解决方法对我都无效。卸载Composer并重新安装后,将其指向正确的PHP目录(已启用openssl),错误消失了。这是最佳解决方法,因为它解决了根本问题(Composer使用错误的PHP版本)。这是另一个很好的例子,说明错误信息并没有告诉你实际的问题所在。谢谢你,Michael! - Steve Stilson
实际上,Michael Neely解决了我的问题。我的Composer指向了错误的PHP版本,所以我一直收到错误信息"需要openssl扩展来进行SSL/TLS保护..."以上的解决方案都对我无效。在卸载并重新安装Composer后,将其指向正确的PHP目录(该目录已启用openssl),错误消失了。这是最佳解决方案,因为它解决了根本问题(Composer使用了错误的PHP版本)。这是另一个错误信息没有告诉你实际问题是什么的很好的例子。谢谢你,Michael! - undefined

2

在此输入图像描述 您正在禁用SSL/TLS保护的情况下运行Composer。

 composer config --global disable-tls true
 composer config --global disable-tls false

2
我只是添加这个,因为它对我有用,我使用开发者选项安装了composer(只需在安装程序中勾选该框)。

https://getcomposer.org/Composer-Setup.exe

我认为这个问题可能是当您向wamp服务器添加新版本的php时发生的。 如果您这样做,您必须检查extension_dir变量是否配置为"env"。
然后检查您的phpx.x/ext文件夹中是否存在php_openssl.dll。如果没有php_openssl.dll,您必须在此处下载它: http://www.telecharger-dll.fr/dll-php_openssl.dll.html 如果仍然无法工作,请通过运行以下cmd命令检查您的apache服务器是否使用正确的php.ini文件:
php --ini

Configuration File (php.ini) Path: C:\Windows
Loaded Configuration File:         C:\wamp64\bin\php\php7.4.7x64\php.ini
Scan for additional .ini files in: (none)
Additional .ini files parsed:      (none)

如果加载的配置文件返回 (none),则必须检查您的 appache/apache2.4.41/conf/httpd.conf 文件是否配置了正确的 phpIniDir 和正确的模块。
它应该类似于这样:
PHPIniDir "${APACHE_DIR}/bin"
LoadModule php7_module "${INSTALL_DIR}/bin/php/php7.4.7x64/php7apache2_4.dll"

然后重新启动Apache并检查“apache/apache2.4.41/bin/php.ini”(这是由PHPIniDir上面配置的那个)它必须像这样。

enter image description here


0

我之前也遇到了这个问题,但是这些解决方案并没有起作用,因为我独立安装了PHP和Apache,而没有使用Xampp或Wamp。

对我来说,问题的原因是我试图从Git for Windows运行composer,而不是cmd或PowerShell——结果在后者中它可以正常工作。

我的解决方案是将符号链接从我的/c/php/php.iniC:\php\php.ini)添加到我的/bin/目录(C:\Program Files\Git\bin)。


我将此添加为注释,因为它与问题没有直接关系,但将使上述步骤更容易:在Git for Windows中运行ln -s ...需要三个额外的步骤才能正常工作:在“本地策略>用户权限分配”中启用创建符号链接的权限,并使用setx MSYS winsymlinks:nativestrict设置环境变量。之后,我必须重新启动计算机。这对于跨平台从GitHub进行开发也很有帮助。 - Jacquelyn

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