使用函数openssl_get_cipher_methods() ,打印的数组里不包含sm4
服务器上查看openssl版本是1.1.1w,官网消息1.1.1+的算法里面是支持sm4算法的
使用命令行:
openssl enc -ciphers | grep sm4
得到的结果中,包含sm4,有一点奇怪。
由于Openssl是后期升级的,PHP是集成环境中的,然后查看PHP编译的openssl版本
php -i | grep -i openssl
得到结果:
Configure Command => './configure' '--prefix=/usr/local/php' '--with-config-file-path=/usr/local/php/etc' '--with-config-file-scan-dir=/usr/local/php/conf.d' '--enable-fpm' '--with-fpm-user=www' '--with-fpm-group=www' '--enable-mysqlnd' '--with-mysqli=mysqlnd' '--with-pdo-mysql=mysqlnd' '--with-iconv=/usr/local' '--with-freetype=/usr/local/freetype' '--with-jpeg' '--with-zlib' '--enable-xml' '--disable-rpath' '--enable-bcmath' '--enable-shmop' '--enable-sysvsem' '--with-curl' '--enable-mbregex' '--enable-mbstring' '--enable-intl' '--enable-ftp' '--enable-gd' '--with-openssl' '--with-mhash' '--enable-pcntl' '--enable-sockets' '--with-zip' '--enable-soap' '--with-gettext' '--enable-opcache' '--with-xsl' '--with-pear' '--with-webp' 'PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/opt/rh/devtoolset-9/root/usr/lib64/pkgconfig' openssl OpenSSL support => enabled OpenSSL Library Version => OpenSSL 1.0.2k-fips 26 Jan 2017 OpenSSL Header Version => OpenSSL 1.0.2k 26 Jan 2017 Openssl default config => /etc/pki/tls/openssl.cnf openssl.cafile => no value => no value openssl.capath => no value => no value Native OpenSSL support => enabled
找到问题原因,PHP编译的是1.0.2k,所以不支持sm4,解决办法就是重新编译PHP
编译的时候指定openssl地址,同时还有两个前提条件
#编译时加上 --with-openssl=/usr/local/openssl-1.1.1w
这个地址如何获取呢?
openssl version -a
这个命令可以获取到你openssl实际所在地址,新版的Openssl
然后,编译PHP前,先执行:
export PKG_CONFIG_PATH=/usr/local/openssl-1.1.1w/lib/pkgconfig:$PKG_CONFIG_PATH ldconfig -v /usr/local/openssl-1.1.1w/lib
重新编译PHP后,使用命令查看是否是最新的openssl
php -i | grep -i openssl # 预期输出OpenSSL Library Version为1.1.1w
------------正 文 已 结 束, 感 谢 您 的 阅 读 (折雨的天空)--------------------
转载请注明本文标题和链接:《记录一次PHP下调用sm4算法遇到的问题》
发表评论