No se puede firmar nada con PHP openssl_sign?

Estoy intentando usar PHP-DKIM para enviar correos electrónicos firmados por DKIM. Es un poco viejo, así que he tenido que cambiar algunas cosas, pero esto me detiene:

Warning: openssl_sign() [function.openssl-sign]: supplied key param cannot be coerced into a private key in /.../pages/user/dkim.php on line 66 Cannot sign 

Sección relevante del código (nota He añadido $ pkeyid, originalmente la clave privada acaba de pasar directamente a la función open_ssl , que tampoco funcionó)

 $pkeyid = openssl_get_privatekey($open_SSL_priv); if (openssl_sign($s, $signature, $pkeyid)) return base64_encode($signature) ; else die("Cannot sign") ; 

Entonces, obviamente, algo realmente malo está sucediendo aquí. Sin embargo, sé que mi clave privada y clave pública son válidas. Incluso probé la clave de ejemplo proporcionada en los comentarios para openssl_sign que no funcionó

 $open_SSL_pub=<<<EOD -----BEGIN PUBLIC KEY----- MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBANDiE2+Xi/WnO+s120NiiJhNyIButVu6 zxqlVzz0wy2j4kQVUC4ZRZD80IY+4wIiX2YxKBZKGnd2TtPkcJ/ljkUCAwEAAQ== -----END PUBLIC KEY----- EOD; $open_SSL_priv=<<<EOD -----BEGIN RSA PRIVATE KEY----- MIIBOgIBAAJBANDiE2+Xi/WnO+s120NiiJhNyIButVu6zxqlVzz0wy2j4kQVUC4Z RZD80IY+4wIiX2YxKBZKGnd2TtPkcJ/ljkUCAwEAAQJAL151ZeMKHEU2c1qdRKS9 sTxCcc2pVwoAGVzRccNX16tfmCf8FjxuM3WmLdsPxYoHrwb1LFNxiNk1MXrxjH3R 6QIhAPB7edmcjH4bhMaJBztcbNE1VRCEi/bisAwiPPMq9/2nAiEA3lyc5+f6DEIJ h1y6BWkdVULDSM+jpi1XiV/DevxuijMCIQCAEPGqHsF+4v7Jj+3HAgh9PU6otj2n Y79nJtCYmvhoHwIgNDePaS4inApN7omp7WdXyhPZhBmulnGDYvEoGJN66d0CIHra I2SvDkQ5CmrzkW5qPaE2oO7BSqAhRZxiYpZFb5CI -----END RSA PRIVATE KEY----- EOD; 

No sé qué hacer. OpenSSL “0.9.8e-fips-rhel5 01 Jul 2008” está instalado y activo en PHP. Se sabe que tanto la clave que generé como la clave funcionan. Entonces, ¿por qué openssl_sign sigue fallando?

Tuve el mismo error al usar PHP-DKIM

Sin ver el rest de su código, es difícil ver si es por la misma razón.

Sin embargo, mi problema era que estaba incluyendo el script PHP-DKIM dentro de una función.

es decir

 function sendEmail(){ require 'dkim.php'; //DO STUFF HERE } 

incluyendo el archivo fuera de la función detuvo el error.

es decir

 require 'dkim.php'; function sendEmail(){ //DO STUFF HERE } 

Espero que esto ayude.

Personalmente, recomendaría phpseclib, una implementación pura de PHP RSA, se utilizará. p.ej.

 loadKey(file_get_contents('privatekey.txt')); $rsa->setSignatureMode(CRYPT_RSA_SIGNATURE_PKCS1); file_put_contents('signature.txt', $rsa->sign(file_get_contents('plaintext.txt'))); ?> 

Eso es completamente interoperable con OpenSSL ya que lo siguiente demuestra:

 openssl dgst -sha1 -prverify privatekey.txt -signature signature plaintext.txt 

Tuve este problema hoy, y el problema fue ligeramente diferente; Tenía mi privateKey como cadena en PHP, en lugar de almacenarla en un archivo y recuperarla usando file_get_contents . Tan pronto como cambié a una solución basada en archivos, todo comenzó a funcionar.