带有 PHP 7.0 的 AWS EC2 标准 AWS AMI - 安装 libsodium 配方

AWS EC2 standard AWS AMI with PHP 7.0 - install libsodium recipe

(为清楚起见进行了编辑 - 已接受答案)

Libsodium 已经为 PHP7 做好了准备。在这样做的过程中,名称空间被删除,并为方法添加了 sodium_ 前缀,为常量添加了 SODIUM_ 前缀。版本方法也被删除。

此 github 页面记录了所有新函数和常量,并且该项目提供了与 \Sodium 命名空间的向后兼容性:https://github.com/Firehed/sodium/blob/master/src/we_cant_have_nice_things.php

秘诀:在 PHP 7 和 AWS AMI

上安装 Libsodium
# PHP 7.0 Libsodium install AWS AMI
yum install -y php7-pear re2c php70-devel
yum groupinstall -y "Development Tools"

pecl7 install libsodium

vi /etc/php-7.0.d/20-libsodium.ini
    ; Enable libsodium extension module
    extension=sodium.so

service httpd restart

命令行测试以验证钠已安装

php7 --info | grep sodium

测试 php 函数以验证密码散列的调用模式

<?php
$password = "hello";
$hash_str = sodium_crypto_pwhash_str(
    $password,
    \SODIUM_CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE,
    \SODIUM_CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE
);
var_dump($password, $hash_str);

感谢@GracefulRestart 的帮助。

我在这里看到几个问题,第一个是您的测试文件似乎无法正常工作。

运行 你的测试代码与 libsodium 一起工作 PHP 7 returns 出现以下错误:

PHP Fatal error:  Uncaught Error: Call to undefined function Sodium\library_version_major() 

如果要查看版本,从phpinfo()函数中搜索数据可能更方便:

<?php phpinfo(); ?>
# or from CLI
php7 --info |grep sodium

我注意到的另一个问题是在您的安装步骤中,您从源代码和 PECL 安装了 libsodium。默认情况下,make install 命令将库放在 /usr/local/lib 中,而 pecl7 install libsodium 通常会将库安装到默认的 PHP 模块目录中。

如果您尝试从源安装,您的 /etc/php-7.0.d/20-libsodium.ini 文件不正确,因为它正在加载您从 PECL 安装的 libsodium 库(您可以检查哪个目录它是通过检查来自 phpinfo() 的 extension_dir ini 设置来加载的。

如果你只需要从PECL安装,你不需要所有的开发包或任何手动编译。

编辑我修改了您发布的食谱以删除下载源代码的无关步骤,只需使用 PECL 完成所有操作:

yum install -y php7-pear re2c php70-devel
yum groupinstall -y "Development Tools"
# PHP 7.0
pecl7 install libsodium
vi /etc/php-7.0.d/20-libsodium.ini
    ; Enable libsodium extension module
    extension=sodium.so
service httpd restart

如果您的发行版的 YUM 存储库提供 php7-libsodium 软件包,那将是一个更小的配方

希望对您有所帮助

这是我对这个食谱的解决方案。

wget -c https://download.libsodium.org/libsodium/releases/libsodium-1.0.18.tar.gz 
tar -xvf libsodium-1.0.18.tar.gz  
cd libsodium-1.0.18 
./configure
make && make check
make install
sudo pecl7 install -f libsodium

pecl7 应安装并修改 php.ini 文件以在 php.ini

中包含以下内容
extension="sodium.so"

如果您 运行 PHP 在 Elastic Beanstalk 中,以下文件 ./ebextentions/script.config :

files:
  "/opt/elasticbeanstalk/hooks/appdeploy/pre/001_libsodium.sh":
    mode: "000755"
    owner: root
    group: root
    content: |
      #!/usr/bin/env bash
      wget -c https://download.libsodium.org/libsodium/releases/libsodium-1.0.18.tar.gz && tar -xvf libsodium-1.0.18.tar.gz &&  cd libsodium-1.0.18 && ./configure && make && make check && sudo make install && sudo pecl7 install -f libsodium