我正在尝试通过php运行一个openssl命令,它通常运行正常,但是我正在尝试运行一个特定的命令,但它不起作用。
这是手动运行的命令,完美运行:
openssl req -new -newkey rsa:4096 -days 365 -nodes -x509 -subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=www.example.com" -keyout keyfile.key -out requestfile.csr
例如,这是一个PHP的openssl,可以工作:
exec('C:/xampp/apache/bin/openssl ecparam -out keyfile.key -name prime256v1 -genkey');
通过PHP的相同命令不起作用..
exec('C:/xampp/apache/bin/openssl req -new -newkey rsa:4096 -days 365 -nodes -x509 -subj \'/C=US/ST=Denial/L=Springfield/O=Dis/CN=www.example.com\' -keyout keyfile.key -out requestfile.csr');
我认为双引号中的部分有问题" / C ="可能无法正确解释。如果我通过PHP进行类似的openssl调用而没有""命令执行正常。
希望知识渊博的php人员检查其传递是否正确
请不要建议我使用PHP内置的openssl库,我很清楚它们,我有所有的工作在不同的项目,但我需要使用exec()来创建ECC密钥在PHP内置的openssl库中不可用。
答案 0 :(得分:0)
我不认为Windows cmd.exe
允许您使用单引号引用参数,您必须使用双引号。
exec('C:/xampp/apache/bin/openssl req -new -newkey rsa:4096 -days 365 -nodes -x509 -subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=www.example.com" -keyout keyfile.key -out requestfile.csr');