Help with OpenSSL request using Python
Posted
by Ldn
on Stack Overflow
See other posts from Stack Overflow
or by Ldn
Published on 2010-04-17T15:44:00Z
Indexed on
2010/04/19
11:43 UTC
Read the original article
Hit count: 421
Hi
i'm creating a program that has to make a request and then obtain some info. For doing that the website had done some API that i will use.
There is an how-to about these API but every example is made using PHP. But my app is done using Python so i need to convert the code.
here is the how-to:
The request string is sealed with OpenSSL. The steps for sealing are as follows:
• Random 128-bit key is created.
• Random key is used to RSA-RC4 symettrically encrypt the request string.
• Random key is encrypted with the public key using OpenSSL RSA asymmetrical encryption.
• The encrypted request and encrypted key are each base64 encoded and placed in the appropriate fields. In PHP a full request to our API can be accomplished like so:
<?php // initial request.
$request = array('object' => 'Link',
'action' => 'get',
'args' => array(
'app_id' => 303612602
)
);
// encode the request in JSON
$request = json_encode($request);
// when you receive your profile, you will be given a public key to seal your request in.
$key_pem = "-----BEGIN PUBLIC KEY----- MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALdu5C6d2sA1Lu71NNGBEbLD6DjwhFQO VLdFAJf2rOH63rG/L78lrQjwMLZOeHEHqjaiUwCr8NVTcVrebu6ylIECAwEAAQ== -----END PUBLIC KEY-----";
// load the public key
$pkey = openssl_pkey_get_public($key_pem);
// seal! $newrequest and $enc_keys are passed by reference.
openssl_seal($request, $enc_request, $enc_keys, array($pkey));
// then wrap the request
$wrapper = array( 'profile' => 'ProfileName',
'format' => 'RSA_RC4_Sealed',
'enc_key' => base64_encode($enc_keys[0]),
'request' => base64_encode($enc_request)
);
// json encode the wrapper. urlencode it as well.
$wrapper = urlencode(json_encode($wrapper));
// we can send the request wrapper via the cURL extension
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://api.site.com/');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "request=$wrapper");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = curl_exec($ch);
curl_close($ch);
?>
Of all of that, i was able to convert "$request" and i'v also made the JSON encode. This is my code:
import urllib
import urllib2
import json
url = 'http://api.site.com/'
array = {'app_id' : "303612602"}
values = {
"object" : "Link",
"action": "get",
"args" : array
}
data = urllib.urlencode(values)
json_data = json.dumps(data)
What stop me is the sealing with OpenSSL and the publi key (that obviously i have) Using PHP OpenSSL it's so easy, but in Python i don't really know how to use it
Please, help me!
© Stack Overflow or respective owner