Problemas com o OpenSSL no PHP - comportamento diferente para diferentes versões
(Esta questão foi originalmente publicada em ServerFault - eu a deletei e a movi para cá.)
Eu tenho uma máquina de desenvolvimento rodando o PHP 5.3.5 e uma máquina de produção rodando o PHP 5.3.8.
O código a seguir é executado na máquina de desenvolvimento:
<?php
$key = "-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC0x+2RiQ+LCZNAUcl/Ecf1NrTr
lhjOiHaVC+w/y+UJevqVcDstD22OJGwT13B9T47OuQG9BmzcZQYLcShUMhVD/Owu
9+8PcK51EnBd0lym6+z/WixpnqfQonyKiqq5ytmYKUlUv39J8QQUI2geyvY9VpWS
wyNcFUs7wPl2zsLCPQIDAQAB
-----END PUBLIC KEY-----";
$data = "Hello, world!";
$key1 = openssl_get_publickey($key);
print_r ($key1);
echo "<p>";
$res = openssl_public_encrypt($data, $encrypted_data, $key1, OPENSSL_PKCS1_PADDING);
echo base64_encode($encrypted_data);
Na minha máquina de desenvolvimento, esse código gera um recurso e uma string codificada. Eu copiaria aqui, mas é claro que muda a cada vez. Na máquina de produção, esse código produz o número do recurso e os seguintes erros do PHP:
PHP Warning: openssl_public_encrypt(): Don't know how to get public key from this private key in C:\xxx\test.php on line 15
PHP Warning: openssl_public_encrypt(): key parameter is not a valid public key in C:\xxx\test.php on line 15
Infelizmente, instalar uma versão mais antiga do PHP na máquina de produção não é uma opção no momento por causa de outros aplicativos que estão rodando nela, o que requer o mínimo de 5.3.8.
Ajudaria se eu atualizasse para a versão 5.4.x?
Eu sei que a versão do OpenSSL em 5.3.5 é 0.9.8, enquanto a versão em 5.3.8 é 1.0.0. Eu imagino que possa haver um problema lá. Existe alguma maneira de contornar isso?
Eu tentei descobrir o máximo possível do site OpenSSL.org e do rastreador de bugs do PHP, mas não sei o que estou procurando.
Saudações,
Philip