写在前面
使用最新版OpenSSL的原因已在前文Ubuntu 18.04下安装最新版OpenSSL 1.1.1a中说明。最终采用通过PHP来使用OpenSSL的原因是PHP开启OpenSSL较为方便,且满足项目需求。安装Apache服务器和PHP环境本来并不是困难的事情,所以本文还顺带介绍了PHP如何开启最新版的OpenSSL功能,并附带注意事项。
安装流程
首先安装Apache
sudo apt-get install apache2
安装完成之后,在浏览器中输入地址localhost或访问服务器的IP地址,即可查看服务器初始页面,上面显示“It works”,即表示Apache服务器正常工作。
接下来安装PHP
sudo apt-get install php7.0
如果是Ubuntu 18.04版本,虽然输入的是php7.0,但最终安装的是php7.2。在Ubuntu 16.04上执行此命令,安装的是php7.0。对于OpenSSL的使用,这两个版本的选择应该是无伤大雅。
查看PHP版本的命令为
php -v
为了将安装好的Apache服务器与PHP环境关联起来,需要再安装一个PHP插件,插件的版本需要跟随PHP的版本而定。可以首先查询需要安装的插件的版本:
apt-cache search libapache2-mod-php
如果是PHP7.2,则会输出libapache2-mod-php7.2
。如果是PHP7.0,则会输出libapache2-mod-php7.0
。
根据具体情况进行安装,这里安装的是PHP7.2。
sudo apt-get install libapache2-mod-php7.2
至此Apache和PHP环境就安装完成。可以在/var/www/html
目录下新建index.php
文件,测试安装好的环境:
<?php
// index.php
phpinfo();
?>
保存退出后,浏览器访问localhost/index.php,即可查看已安装好的PHP环境信息详情页面。详情页面中有关于OpenSSL版本的信息,如果此前安装好了OpenSSL 1.1.1a,那么页面上的OpenSSL Library Version将会是OpenSSL 1.1.1a。如果未安装最新版OpenSSL,在Ubuntu 18.04下,版本为OpenSSL 1.1.0。在Ubuntu 16.04下,版本为OpenSSL 1.0.1。
注意事项
目前对PHP环境下的OpenSSL 1.1.1a测试经验并不丰富,只有一个需要特别提出的注意事项。
当在PHP代码中使用执行系统命令行的函数时:
<?php
exec("$command");
?>
如果执行的是OpenSSL相关的命令行,如使用SM4算法进行对称加密:
openssl sm4 -e -in inputfile -out outputfile -k passphrase
其中inputfile
是加密的输入文件的文件名,outputfile
是加密后输出文件的文件名,passphrase
是密码短语。
在PHP的exec()
函数中执行此命令,需要首先授予服务器根目录权限
sudo chmod -R 777 /var/www/html
/var/www/html
是Apache服务器的根目录。授予了文件读写的权限后,才能正常执行相关命令。
最后
如对项目感兴趣,可参考Github-GMencryption。