PHP Encryption openssl_pkcs7_encrypt () não
-
21-08-2019 - |
Pergunta
Eu tenho esse código:
$fp = fopen($unenc_path, "w");
fwrite($fp, $msg);
fclose($fp);
$easy_access_emails = 'person@##.com';
$headers = "From: support@##.com <support@##.com>\n" .
"Reply-to: support@##.com\n" .
"Subject: " . $subject . "\n";
$key = implode("", file("../newcert.pem"));
$ArrayMessageProperties = explode("\n", $headers);
$unenc_path = '..\\tmp\\'. preg_replace('/[^0-9]/','', microtime()) . rand(0,1000) . "msg.txt";
$enc_path = '..\\tmp\\'. preg_replace('/[^0-9]/','', microtime()) . rand(0,1000) . "enc.txt";
if (openssl_pkcs7_encrypt($unenc_path, $enc_path, $key, $ArrayMessageProperties))
{
$info = file_get_contents($enc_path);
foreach ($easy_access_emails as $email)
{
mail($email, $subject, $info, $headers);
}
} else {
die("Failed Encryption");
}
Que funciona corretamente em meu ambiente de dev local (Macbook correndo LAMP). I mudou-se para um servidor Windows para testar e agora openssl_pkcs7_encrypt
falhar cada vez. Eu suponho que este é um problema de permissões, uma vez que a função precisa de escrever para $enc_path
; Mas eu fiz o diretório no servidor de janelas tão abertas quanto possível. (Definir o controle completo para apenas sobre cada usuário / grupo que pode ter algo a ver com isso. Alguém sabe um bom método para depurar isso? Parece que a função simplesmente retorna false quando ele falha com nenhuma indicação de como isso.
Ao investigar mais parece que o script tem acesso de gravação ao diretório. Ele escreve para o $ unenc_path nenhum problema, apenas falha na chamada para openssl_pkcs7_encrypt
.
Outra atualização: Eu estou usando filemon para assistir a solicitação alguns em e eu vê-lo abrir e gravar o arquivo não criptografado, mas não há saída para ainda tentar escrever para o arquivo criptografado.
Também foi adicionado a linha que carrega a chave. Eu tenho verificado que o carregamento por ecoando-lo e parece ser bom.
Outra atualização: Assistindo filemon novamente, em torno do tempo que deveria estar chamando openssq_pkcs7_encrypt
eu estou vendo uma entrada que ele está olhando para a mensagem sem criptografia no diretório das janelas tmp.
w3wp.exe:4172 C:\windows\system32\tmp\04277530010012336..msg.txt
PATH NOT FOUND Options: Open Access: Read
Solução
Acabou Windows / openssl_pkcs7_encrypt
não gostava que caminho relativo, dando um caminho completo depois de brincar com frente e barras invertidas (/. \\
) para um pouco fixado.
Outras dicas
Você está colocando a chave na em algum lugar $key
em seu código? Eu não posso vê-lo no trecho