una studio servidor para datos crear conexion conectar con como aplicacion php android openssl in-app-purchase signature

servidor - login android studio mysql php json



Verificación de la firma del servidor de compra en la aplicación de Android usando php OpenSSL (2)

En un intento de seguir algunas de las pautas de seguridad para la compra desde la aplicación aquí: http://developer.android.com/guide/market/billing/billing_best_practices.html

Estoy tratando de hacer la validación de firmas en un servidor en lugar de hacerlo en la propia aplicación. Idealmente, me gustaría usar las bibliotecas de PHP openssl y parece que un código como el siguiente debería funcionar:

<?php // $data and $signature are assumed to contain the data and the signature // fetch public key from certificate and ready it $fp = fopen("/src/openssl-0.9.6/demos/sign/cert.pem", "r"); $cert = fread($fp, 8192); fclose($fp); $pubkeyid = openssl_get_publickey($cert); // state whether signature is okay or not $ok = openssl_verify($data, $signature, $pubkeyid); if ($ok == 1) { echo "good"; } elseif ($ok == 0) { echo "bad"; } else { echo "ugly, error checking signature"; } // free the key from memory openssl_free_key($pubkeyid); ?>

Reemplazo la firma con la cadena de firma descodificada base64 en el paquete de compra de la aplicación y uso los datos del mismo paquete. La clave pública debe estar en formato PEM y agregué los tokens BEGIN y END y algunos saltos de línea.

Mi problema es que no puedo obtener este código PHP para verificar con éxito los datos / firma y no sé qué es necesario cambiar para que funcione correctamente.

Si uso openssl, creo una clave privada y pública, crea una firma para los mismos datos usando sha1 y ejecútela a través del código de PHP anterior, funciona bien y se valida con éxito.

Aquí es cómo uso OpenSSL:

openssl genrsa -out private.pem openssl rsa -in private.pem -pubout -out public.pem

Luego uso private.pem y algunos códigos php para generar una firma:

... openssl_sign($data, $signature, $pkeyid); ...

¿Alguien tiene algún código PHP de muestra que funcione con la validación del lado del servidor de firmas en la aplicación?

Simplemente podría ejecutar el código java equivalente que está en la aplicación de ejemplo, y parece que funciona bien, pero me gustaría usar php directamente si es posible.


¿Es posible utilizar cURL en su script PHP, en lugar de las cosas integradas en las secuencias de PHP? Los he usado antes y he encontrado los problemas más raros y los mensajes de error más detallados.


He escrito una biblioteca para verificar las respuestas de licencias de Android Market y está disponible en Google Code .

Solo se necesitan unas pocas líneas de PHP para verificar una licencia, y el formato de las claves y OpenSSL se encarga de usted.