我正在为我的服务器编写一个控制面板,我正在使用shell_exec来运行一个使用letsencrypt api创建证书的命令。
我从https://zerossl.com/usage.html获得了shell命令。 (我根据他们的指令设置了所有内容,并且直接在shell中直接执行时它确实正确运行.N.B。它根本不需要用户输入)
这是shell_exec行
shell_exec("le.pl --key '$uname'.key --csr '$domain'.csr --csr-key '$domain'.key --crt '$domain'.crt --domains \"www.'$domain','$domain'\" --path /home/'$uname'/web/'$domain'/public_html/.well-known/acme-challenge --generate-missing --unlink --live");
变量$ uname和$ domain从数据库中获取并可以成功回显。在这种情况下,它们分别是admin和plenixdev.tk。
当前的工作目录(由chdir()设置)是/ tmp / $ uname,我确保实际创建了/webroot/.well-known/acme-challenge/文件夹以防止脚本在那里绊倒
我首先通过运行:
在脚本中创建必要的键shell_exec("openssl genrsa -out '$uname'.key 4096");
和
shell_exec("openssl genrsa -out '$domain'.key 4096");
我在开始时提到的shell_exec接受了这些密钥和变量,并且用于创建$ domain.csr文件(它所做的)和证书文件。
但是,它只设法创建.csr文件(即使所有需要的文件都在同一个文件夹中),并且在创建证书之前以某种方式停止执行或无形错误。当我在.csr等相同的文件夹中手动运行命令时,它完全运行完全。
我似乎无法弄清楚出了什么问题,或者在页面上转储输出以便能够看到任何错误。
答案 0 :(得分:0)
按照@ JonathanKuhn的建议,我删除了围绕变量的shell_exec中的引号,并且它有效。发布此答案,以便其他人可以看到它