AWS EC2标准AWS AMI与PHP 7.0 - 安装libsodium配方

时间:2017-08-03 19:20:02

标签: php-7 libsodium

(为清晰起见编辑 - 滚动接受答案)

Libsodium已经为PHP 7做好了准备。在此过程中,删除了名称空间,并添加了钠的前缀和方法的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的帮助。

2 个答案:

答案 0 :(得分:1)

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

使用在PHP 7中运行的libsodium运行测试代码会返回以下错误:

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软件包,那将是一个更小的配方

希望有所帮助

答案 1 :(得分:0)

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

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"

如果在Elastic Beanstalk中运行PHP,则以下文件./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