<div class="gmail_extra">Hi Daniel,</div><div class="gmail_extra"><br></div><div class="gmail_extra">I used port 8443, for sugestion in </div><div class="gmail_extra"><a href="http://opennebula.org/documentation:archives:rel3.2:ec2qcg#configuring_a_ssl_proxy">http://opennebula.org/documentation:archives:rel3.2:ec2qcg#configuring_a_ssl_proxy</a></div>
<div class="gmail_extra"><br></div><div class="gmail_extra">I changed  :ssl_server parameter to localhost:8443, restart econe-server, and the problem continues (Test 1).</div><div class="gmail_extra">I changed the configuration to 443 in ssl/httpd and econe-server, restart httpd and econe-server, and the problem continues too (Test 2 and 3).</div>
<div class="gmail_extra"><br></div><div class="gmail_extra"><br></div><div class="gmail_extra"><br></div><div class="gmail_extra">Cheers </div><div class="gmail_extra"><br></div><div class="gmail_extra">Charles Rodamilans </div>
<div class="gmail_extra"><br></div><div class="gmail_extra"><b>Test 1</b></div><div class="gmail_extra"><br></div><div class="gmail_extra"><div class="gmail_extra">[oneadmin@lahpc_cloud_server ~]$ vim /etc/one/econe.conf</div>
<div class="gmail_extra"><b>:server: 127.0.0.1</b></div><div><b>:ssl_server: localhost:8443</b></div></div><div class="gmail_extra"><div><br></div><div><div class="gmail_extra"><div class="gmail_extra">[root@lahpc_cloud_server ~]# vim /etc/httpd/conf.d/ssl.conf </div>
<div class="gmail_extra">Listen 8443 </div><div><VirtualHost _default_:8443></div></div><div class="gmail_extra"><div class="gmail_extra"><b>ServerName localhost:8443 </b></div><div class="gmail_extra">ProxyPass / <a href="http://127.0.0.1:4567">http://127.0.0.1:4567</a></div>
</div></div><div><br></div></div><div class="gmail_extra"><div class="gmail_extra">[oneadmin@lahpc_cloud_server ~]$ econe-describe-images  -U <a href="https://localhost:8443">https://localhost:8443</a> -K oneadmin -S 5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8</div>
<div class="gmail_extra">econe-describe-images: Unexpected server error. response.body is: <Response><Errors><Error><Code>AuthFailure</Code><Message>User not authorized</Message></Error></Errors><RequestID>0</RequestID></Response></div>
</div><div class="gmail_extra"><br></div><div class="gmail_extra"><b>Teste 2 :</b></div><div class="gmail_extra"><div class="gmail_extra"><div class="gmail_extra"><br></div><div class="gmail_extra">[oneadmin@lahpc_cloud_server ~]$ vim /etc/one/econe.conf</div>
<div class="gmail_extra"><b>:server: 127.0.0.1</b></div><div><b>:ssl_server: localhost </b></div></div><div class="gmail_extra"><div><br></div></div><div class="gmail_extra">[root@lahpc_cloud_server ~]# vim /etc/httpd/conf.d/ssl.conf </div>
<div>Listen 443 </div><div><VirtualHost _default_:443></div></div><div class="gmail_extra"><div class="gmail_extra"><b>ServerName localhost:443 </b></div><div class="gmail_extra">ProxyPass / <a href="http://127.0.0.1:4567">http://127.0.0.1:4567</a></div>
<div><br></div></div><div class="gmail_extra"><div class="gmail_extra">[oneadmin@lahpc_cloud_server ~]$ econe-describe-images  -U <a href="https://localhost">https://localhost</a> -K oneadmin -S 5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8</div>
<div class="gmail_extra">econe-describe-images: Unexpected server error. response.body is: <Response><Errors><Error><Code>AuthFailure</Code><Message>User not authorized</Message></Error></Errors><RequestID>0</RequestID></Response></div>
<div><br></div><div><div class="gmail_extra">[oneadmin@lahpc_cloud_server ~]$ econe-describe-images  -U <a href="https://localhost:443">https://localhost:443</a> -K oneadmin -S 5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8</div>
<div class="gmail_extra">econe-describe-images: Unexpected server error. response.body is: <Response><Errors><Error><Code>AuthFailure</Code><Message>User not authorized</Message></Error></Errors><RequestID>0</RequestID></Response></div>
</div><div><br></div><div>The error is the same with</div><div> :ssl_server: localhost:443</div><div><br></div></div><div class="gmail_extra"><div class="gmail_extra"><b>Teste 3</b></div><div class="gmail_extra"><div class="gmail_extra">
<br></div><div class="gmail_extra"><div class="gmail_extra">[oneadmin@lahpc_cloud_server ~]$ vim /etc/one/econe.conf</div><div class="gmail_extra"><b>:server: 127.0.0.1</b></div><div><b>:ssl_server: localhost </b></div></div>
<div class="gmail_extra"><br></div><div class="gmail_extra">[root@lahpc_cloud_server ~]# vim /etc/httpd/conf.d/ssl.conf </div><div><div class="gmail_extra"><b>ServerName localhost</b></div></div><div><br></div><div><div class="gmail_extra">
[oneadmin@lahpc_cloud_server ~]$ econe-describe-images  -U <a href="https://localhost">https://localhost</a> -K oneadmin -S 5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8</div><div class="gmail_extra">econe-describe-images: Unexpected server error. response.body is: <Response><Errors><Error><Code>AuthFailure</Code><Message>User not authorized</Message></Error></Errors><RequestID>0</RequestID></Response></div>
</div><div class="gmail_extra"><br></div><div class="gmail_extra"><div class="gmail_extra">[oneadmin@lahpc_cloud_server ~]$ econe-describe-images  -U <a href="https://localhost:443">https://localhost:443</a> -K oneadmin -S 5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8</div>
<div class="gmail_extra">econe-describe-images: Unexpected server error. response.body is: <Response><Errors><Error><Code>AuthFailure</Code><Message>User not authorized</Message></Error></Errors><RequestID>0</RequestID></Response></div>
</div><div class="gmail_extra"><br></div><div>The error is the same with</div><div><div> :ssl_server: localhost:443</div></div><div><br></div></div></div><div class="gmail_extra"><br></div><div class="gmail_extra"><br><br>
<div class="gmail_quote">Em 23 de abril de 2012 09:44, Daniel Molina <span dir="ltr"><<a href="mailto:dmolina@opennebula.org" target="_blank">dmolina@opennebula.org</a>></span> escreveu:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi Charles,<br>
<div><div class="h5"><br>
On 20 April 2012 22:31, Charles Rodamilans <<a href="mailto:charlesrodamilans@gmail.com">charlesrodamilans@gmail.com</a>> wrote:<br>
> Hi,<br>
><br>
> now I tried to configure ec2 and ssl, but econe tools don't work. I am<br>
> using apache 2 and centos 6.<br>
><br>
> [oneadmin@lahpc_cloud_server ~]$ oneuser show<br>
> USER 0 INFORMATION<br>
><br>
> ID             : 0<br>
> NAME           : oneadmin<br>
> GROUP          : oneadmin<br>
> PASSWORD       : 5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8<br>
> AUTH_DRIVER    : core<br>
> ENABLED        : Yes<br>
><br>
> USER TEMPLATE<br>
><br>
><br>
><br>
> [oneadmin@lahpc_cloud_server ~]$ econe-describe-images  -U<br>
> <a href="https://localhost:8443" target="_blank">https://localhost:8443</a> -K oneadmin -S<br>
> 5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8<br>
> econe-describe-images: Unexpected server error. response.body is:<br>
> <Response><Errors><Error><Code>AuthFailure</Code><Message>User not<br>
> authorized</Message></Error></Errors><RequestID>0</RequestID></Response><br>
><br>
><br>
> Opennebula and apache  setup :<br>
><br>
> [oneadmin@lahpc_cloud_server ~]$ vim /etc/one/econe.conf<br>
> :server: 127.0.0.1<br>
> :port: 4567<br>
> :ssl_server: localhost<br>
><br>
><br>
> [root@lahpc_cloud_server ~]# vim  /etc/httpd/conf.d/ssl.conf<br>
><br>
> <VirtualHost _default_:8443><br>
><br>
> # General setup for the virtual host, inherited from global configuration<br>
> DocumentRoot "/var/www/html"<br>
> ServerName localhost:8443<br>
><br>
> ProxyPass / <a href="http://127.0.0.1:4567" target="_blank">http://127.0.0.1:4567</a><br>
><br>
><br>
> I tried replace localhost by IP, but I have not succeeded. Any helps?<br>
<br>
</div></div>I think the problem is you are using the port 8443 instead of the<br>
default one. Please, try changing the the :ssl_server parameter to<br>
"localhost:8443" instead of "localhost", otherwise the signature will<br>
be generated using the default 443 port.<br>
<br>
Cheers<br>
<div class="HOEnZb"><div class="h5"><br>
><br>
><br>
> Thanks,<br>
><br>
> Charles Rodamilans<br>
><br>
><br>
> Em 20 de abril de 2012 10:50, Charles Rodamilans<br>
> <<a href="mailto:charlesrodamilans@gmail.com">charlesrodamilans@gmail.com</a>> escreveu:<br>
><br>
>> Hi Daniel,<br>
>><br>
>> it was the problem. Thanks for help.<br>
>><br>
>> Charles Rodamilans<br>
>><br>
>> Em 19 de abril de 2012 11:08, Daniel Molina <<a href="mailto:dmolina@opennebula.org">dmolina@opennebula.org</a>><br>
>> escreveu:<br>
>>><br>
>>> Hi Charles,<br>
>>><br>
>>><br>
>>> Are you using the plain password for the awsSecretKey? If so, use the<br>
>>> sha1 hashed version instead. You can retrieve it from the oneuser show<br>
>>> output.<br>
>>><br>
>>> Hope this helps<br>
>>><br>
>>> On 19 April 2012 13:54, Charles Rodamilans <<a href="mailto:charlesrodamilans@gmail.com">charlesrodamilans@gmail.com</a>><br>
>>> wrote:<br>
>>> > Yes. I encode the password in String url = signed.sign(params);<br>
>>> ><br>
>>> >  You can see &Signature parameter in url.<br>
>>> ><br>
>>> > Em 17 de abril de 2012 12:53, Olivier Sallou <<a href="mailto:olivier.sallou@irisa.fr">olivier.sallou@irisa.fr</a>><br>
>>> > escreveu:<br>
>>> ><br>
>>> >> Did you encode the password in the url?<br>
>>> >><br>
>>> >> Le 4/17/12 5:28 PM, Charles Rodamilans a écrit :<br>
>>> >><br>
>>> >> Hi,<br>
>>> >><br>
>>> >> i tried to use ec2 interface with opennebula 3.2, but I have problem.<br>
>>> >><br>
>>> >> Ec2 tools work well.<br>
>>> >><br>
>>> >> [oneadmin@lahpc_cloud_server ~]$ econe-describe-instances<br>
>>> >> oneadmin    i-74                        running     192.168.0.22<br>
>>> >>  small<br>
>>> >><br>
>>> >> oneadmin    i-75                        running     192.168.0.20<br>
>>> >>  small<br>
>>> >><br>
>>> >> oneadmin    i-76                        running     192.168.0.21<br>
>>> >>  small<br>
>>> >><br>
>>> >><br>
>>> >><br>
>>> >> I use the java code, bellow, to generate url. It works well in amazon<br>
>>> >> ec2<br>
>>> >> (<a href="http://ec2.amazonaws.com" target="_blank">ec2.amazonaws.com</a>), but  is not working in opennebula.<br>
>>> >><br>
>>> >> [oneadmin@lahpc_cloud_server ~]$ curl<br>
>>> >><br>
>>> >> "<a href="http://localhost:4567/?AWSAccessKeyId=oneadmin&Action=DescribeInstances&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2012-04-17T14%3A58%3A07Z&Version=2011-01-01&Signature=LdbPDicLCFY%2BLNOqblKTBoY6sNl5jTJezV%2FCTmr5uBs%3D" target="_blank">http://localhost:4567/?AWSAccessKeyId=oneadmin&Action=DescribeInstances&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2012-04-17T14%3A58%3A07Z&Version=2011-01-01&Signature=LdbPDicLCFY%2BLNOqblKTBoY6sNl5jTJezV%2FCTmr5uBs%3D</a>"<br>

>>> >> <Response><Errors><Error><Code>AuthFailure</Code><Message>User not<br>
>>> >><br>
>>> >> authorized</Message></Error></Errors><RequestID>0</RequestID></Response><br>
>>> >><br>
>>> >><br>
>>> >><br>
>>> >> I tried with others users (serveradmin and clouduser), but problem is<br>
>>> >> the<br>
>>> >> same.<br>
>>> >><br>
>>> >><br>
>>> >><br>
>>> >> [oneadmin@lahpc_cloud_server ~]$ oneuser list<br>
>>> >>   ID GROUP    NAME            AUTH<br>
>>> >>       PASSWORD<br>
>>> >>    0 oneadmin oneadmin        core<br>
>>> >> b8c388d2e366b7835bcd9fe565fb67a17f84302f<br>
>>> >>    1 oneadmin serveradmin     server_c<br>
>>> >> 96b438cf52a49348d0fbe773ff2c119bb4707994<br>
>>> >>   22 ec2      clouduser       public<br>
>>> >> b8c388d2e366b7835bcd9fe565fb67a17f84302f<br>
>>> >><br>
>>> >> [oneadmin@lahpc_cloud_server ~]$ curl<br>
>>> >><br>
>>> >> "<a href="http://localhost:4567/?AWSAccessKeyId=serveradmin&Action=DescribeInstances&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2012-04-17T15%3A16%3A06Z&Version=2011-01-01&Signature=J3SPezX2sDZt8XPOKqkqa8Xw0AHyFNMedLJtGZ7IvUQ%3D" target="_blank">http://localhost:4567/?AWSAccessKeyId=serveradmin&Action=DescribeInstances&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2012-04-17T15%3A16%3A06Z&Version=2011-01-01&Signature=J3SPezX2sDZt8XPOKqkqa8Xw0AHyFNMedLJtGZ7IvUQ%3D</a>"<br>

>>> >> <Response><Errors><Error><Code>AuthFailure</Code><Message>User not<br>
>>> >><br>
>>> >> authorized</Message></Error></Errors><RequestID>0</RequestID></Response><br>
>>> >><br>
>>> >> [oneadmin@lahpc_cloud_server ~]$ curl<br>
>>> >><br>
>>> >> "<a href="http://localhost:4567/?AWSAccessKeyId=clouduser&Action=DescribeInstances&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2012-04-17T15%3A18%3A51Z&Version=2011-01-01&Signature=t58LIMq7WYW0EslTkyn7CKVAX7BdWcw27jsRwSecGe0%3D" target="_blank">http://localhost:4567/?AWSAccessKeyId=clouduser&Action=DescribeInstances&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2012-04-17T15%3A18%3A51Z&Version=2011-01-01&Signature=t58LIMq7WYW0EslTkyn7CKVAX7BdWcw27jsRwSecGe0%3D</a>"<br>

>>> >> <Response><Errors><Error><Code>AuthFailure</Code><Message>User not<br>
>>> >><br>
>>> >> authorized</Message></Error></Errors><RequestID>0</RequestID></Response><br>
>>> >><br>
>>> >><br>
>>> >> What is the problem? Any suggestion?<br>
>>> >><br>
>>> >> Thanks,<br>
>>> >><br>
>>> >> Charles Rodamilans<br>
>>> >><br>
>>> >><br>
>>> >><br>
>>> >> import java.util.Map;<br>
>>> >><br>
>>> >><br>
>>> >> import org.junit.Test;<br>
>>> >><br>
>>> >><br>
>>> >> public class SignedRequestsTest {<br>
>>> >><br>
>>> >><br>
>>> >> @Test<br>
>>> >><br>
>>> >> public void signed() {<br>
>>> >><br>
>>> >> SignedRequests signed = new SignedRequests( "oneadmin", "password");<br>
>>> >><br>
>>> >> // SignedRequests signed = new SignedRequests( "serveradmin",<br>
>>> >> "password");<br>
>>> >><br>
>>> >> // SignedRequests signed = new SignedRequests( "clouduser",<br>
>>> >> "password");<br>
>>> >><br>
>>> >><br>
>>> >> Map<String, String> params = new java.util.HashMap<String, String>();<br>
>>> >><br>
>>> >> params.put("Action", "DescribeInstances");<br>
>>> >><br>
>>> >> params.put("SignatureMethod", "HmacSHA256");<br>
>>> >><br>
>>> >> params.put("SignatureVersion", "2");<br>
>>> >><br>
>>> >> params.put("Version", "2010-06-15");<br>
>>> >><br>
>>> >> String url = signed.sign(params);<br>
>>> >><br>
>>> >> System.out.println(url);<br>
>>> >><br>
>>> >> }<br>
>>> >><br>
>>> >> }<br>
>>> >><br>
>>> >><br>
>>> >><br>
>>> >><br>
>>> >><br>
>>> >> /*<br>
>>> >><br>
>>> >>  * Code Reference<br>
>>> >><br>
>>> >><br>
>>> >><br>
>>> >>  * <a href="http://docs.amazonwebservices.com/AWSECommerceService/latest/DG/AuthJavaSampleSig2.html" target="_blank">http://docs.amazonwebservices.com/AWSECommerceService/latest/DG/AuthJavaSampleSig2.html</a><br>

>>> >><br>
>>> >>  */<br>
>>> >><br>
>>> >><br>
>>> >> import java.io.UnsupportedEncodingException;<br>
>>> >><br>
>>> >> import java.net.URLEncoder;<br>
>>> >><br>
>>> >> import java.security.InvalidKeyException;<br>
>>> >><br>
>>> >> import java.security.NoSuchAlgorithmException;<br>
>>> >><br>
>>> >> import java.text.DateFormat;<br>
>>> >><br>
>>> >> import java.text.SimpleDateFormat;<br>
>>> >><br>
>>> >> import java.util.Calendar;<br>
>>> >><br>
>>> >> import java.util.Iterator;<br>
>>> >><br>
>>> >> import java.util.Map;<br>
>>> >><br>
>>> >> import java.util.SortedMap;<br>
>>> >><br>
>>> >> import java.util.TimeZone;<br>
>>> >><br>
>>> >> import java.util.TreeMap;<br>
>>> >><br>
>>> >><br>
>>> >> import javax.crypto.Mac;<br>
>>> >><br>
>>> >> import javax.crypto.spec.SecretKeySpec;<br>
>>> >><br>
>>> >><br>
>>> >> import org.apache.commons.codec.binary.Base64;<br>
>>> >><br>
>>> >><br>
>>> >> import com.lahpc.cloud.essential.HTTPVerb;<br>
>>> >><br>
>>> >><br>
>>> >> public class SignedRequests {<br>
>>> >><br>
>>> >> private static final String UTF8_CHARSET = "UTF-8";<br>
>>> >><br>
>>> >> private static final String HMAC_SHA256_ALGORITHM = "HmacSHA256";<br>
>>> >><br>
>>> >> private static final String REQUEST_URI = "/";<br>
>>> >><br>
>>> >> /**<br>
>>> >><br>
>>> >> * @uml.property  name="requestMethod"<br>
>>> >><br>
>>> >> * @uml.associationEnd  multiplicity="(1 1)"<br>
>>> >><br>
>>> >> */<br>
>>> >><br>
>>> >> private HTTPVerb requestMethod = HTTPVerb.GET;<br>
>>> >><br>
>>> >><br>
>>> >><br>
>>> >> /**<br>
>>> >><br>
>>> >> * @uml.property  name="endpoint"<br>
>>> >><br>
>>> >> */<br>
>>> >><br>
>>> >> // private String endpoint = "<a href="http://ec2.amazonaws.com" target="_blank">ec2.amazonaws.com</a>"; // must be lowercase<br>
>>> >><br>
>>> >> private String endpoint = "localhost:4567"; // must be lowercase<br>
>>> >><br>
>>> >> /**<br>
>>> >><br>
>>> >> * @uml.property  name="awsAccessKeyId"<br>
>>> >><br>
>>> >> */<br>
>>> >><br>
>>> >> private String awsAccessKeyId;<br>
>>> >><br>
>>> >> /**<br>
>>> >><br>
>>> >> * @uml.property  name="awsSecretKey"<br>
>>> >><br>
>>> >> */<br>
>>> >><br>
>>> >> private String awsSecretKey;<br>
>>> >><br>
>>> >><br>
>>> >> /**<br>
>>> >><br>
>>> >> * @uml.property  name="secretKeySpec"<br>
>>> >><br>
>>> >> * @uml.associationEnd  multiplicity="(1 1)"<br>
>>> >><br>
>>> >> */<br>
>>> >><br>
>>> >> private SecretKeySpec secretKeySpec = null;<br>
>>> >><br>
>>> >> /**<br>
>>> >><br>
>>> >> * @uml.property  name="mac"<br>
>>> >><br>
>>> >> * @uml.associationEnd  multiplicity="(1 1)"<br>
>>> >><br>
>>> >> */<br>
>>> >><br>
>>> >> private Mac mac = null;<br>
>>> >><br>
>>> >> public SignedRequests(String awsAccessKeyId, String awsSecretKey)<br>
>>> >><br>
>>> >> {<br>
>>> >><br>
>>> >> this.setAwsAccessKeyId(awsAccessKeyId);<br>
>>> >><br>
>>> >> this.setAwsSecretKey(awsSecretKey);<br>
>>> >><br>
>>> >> setDefault();<br>
>>> >><br>
>>> >> }<br>
>>> >><br>
>>> >><br>
>>> >> private void setDefault() {<br>
>>> >><br>
>>> >><br>
>>> >> try<br>
>>> >><br>
>>> >> {<br>
>>> >><br>
>>> >> byte[] secretyKeyBytes = awsSecretKey.getBytes(UTF8_CHARSET);<br>
>>> >><br>
>>> >> secretKeySpec =<br>
>>> >><br>
>>> >> new SecretKeySpec(secretyKeyBytes, HMAC_SHA256_ALGORITHM);<br>
>>> >><br>
>>> >> mac = Mac.getInstance(HMAC_SHA256_ALGORITHM);<br>
>>> >><br>
>>> >> mac.init(secretKeySpec);<br>
>>> >><br>
>>> >> } catch (UnsupportedEncodingException e) {<br>
>>> >><br>
>>> >> e.printStackTrace();<br>
>>> >><br>
>>> >> } catch (NoSuchAlgorithmException e) {<br>
>>> >><br>
>>> >> e.printStackTrace();<br>
>>> >><br>
>>> >> } catch (InvalidKeyException e) {<br>
>>> >><br>
>>> >> e.printStackTrace();<br>
>>> >><br>
>>> >> }<br>
>>> >><br>
>>> >> }<br>
>>> >><br>
>>> >><br>
>>> >> public String sign(Map<String, String> params) {<br>
>>> >><br>
>>> >> params.put("AWSAccessKeyId", awsAccessKeyId);<br>
>>> >><br>
>>> >> params.put("Timestamp", timestamp());<br>
>>> >><br>
>>> >><br>
>>> >> SortedMap<String, String> sortedParamMap =<br>
>>> >><br>
>>> >> new TreeMap<String, String>(params);<br>
>>> >><br>
>>> >> String canonicalQS = canonicalize(sortedParamMap);<br>
>>> >><br>
>>> >> String toSign =<br>
>>> >><br>
>>> >> requestMethod.toString() + "\n"<br>
>>> >><br>
>>> >> + endpoint + "\n"<br>
>>> >><br>
>>> >> + REQUEST_URI + "\n"<br>
>>> >><br>
>>> >> + canonicalQS;<br>
>>> >><br>
>>> >><br>
>>> >> String hmac = hmac(toSign);<br>
>>> >><br>
>>> >> String sig = percentEncodeRfc3986(hmac);<br>
>>> >><br>
>>> >> // String url = "https://" + endpoint + REQUEST_URI + "?" +<br>
>>> >><br>
>>> >> // canonicalQS + "&Signature=" + sig;<br>
>>> >><br>
>>> >> String url = "http://" + endpoint + REQUEST_URI + "?" +<br>
>>> >><br>
>>> >> canonicalQS + "&Signature=" + sig;<br>
>>> >><br>
>>> >><br>
>>> >> return url;<br>
>>> >><br>
>>> >> }<br>
>>> >><br>
>>> >><br>
>>> >> private String hmac(String stringToSign) {<br>
>>> >><br>
>>> >> String signature = null;<br>
>>> >><br>
>>> >> byte[] data;<br>
>>> >><br>
>>> >> byte[] rawHmac;<br>
>>> >><br>
>>> >> try {<br>
>>> >><br>
>>> >> data = stringToSign.getBytes(UTF8_CHARSET);<br>
>>> >><br>
>>> >> rawHmac = mac.doFinal(data);<br>
>>> >><br>
>>> >> Base64 encoder = new Base64();<br>
>>> >><br>
>>> >> signature = new String(encoder.encode(rawHmac));<br>
>>> >><br>
>>> >> } catch (UnsupportedEncodingException e) {<br>
>>> >><br>
>>> >> throw new RuntimeException(UTF8_CHARSET + " is unsupported!", e);<br>
>>> >><br>
>>> >> }<br>
>>> >><br>
>>> >> return signature;<br>
>>> >><br>
>>> >> }<br>
>>> >><br>
>>> >><br>
>>> >> private String timestamp() {<br>
>>> >><br>
>>> >> String timestamp = null;<br>
>>> >><br>
>>> >> Calendar cal = Calendar.getInstance();<br>
>>> >><br>
>>> >> DateFormat dfm = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");<br>
>>> >><br>
>>> >> dfm.setTimeZone(TimeZone.getTimeZone("GMT"));<br>
>>> >><br>
>>> >> timestamp = dfm.format(cal.getTime());<br>
>>> >><br>
>>> >> return timestamp;<br>
>>> >><br>
>>> >> }<br>
>>> >><br>
>>> >><br>
>>> >> private String canonicalize(SortedMap<String, String> sortedParamMap)<br>
>>> >><br>
>>> >> {<br>
>>> >><br>
>>> >> if (sortedParamMap.isEmpty()) {<br>
>>> >><br>
>>> >> return "";<br>
>>> >><br>
>>> >> }<br>
>>> >><br>
>>> >><br>
>>> >> StringBuffer buffer = new StringBuffer();<br>
>>> >><br>
>>> >> Iterator<Map.Entry<String, String>> iter =<br>
>>> >><br>
>>> >> sortedParamMap.entrySet().iterator();<br>
>>> >><br>
>>> >><br>
>>> >> while (iter.hasNext()) {<br>
>>> >><br>
>>> >> Map.Entry<String, String> kvpair = iter.next();<br>
>>> >><br>
>>> >> buffer.append(percentEncodeRfc3986(kvpair.getKey()));<br>
>>> >><br>
>>> >> buffer.append("=");<br>
>>> >><br>
>>> >> buffer.append(percentEncodeRfc3986(kvpair.getValue()));<br>
>>> >><br>
>>> >> if (iter.hasNext()) {<br>
>>> >><br>
>>> >> buffer.append("&");<br>
>>> >><br>
>>> >> }<br>
>>> >><br>
>>> >> }<br>
>>> >><br>
>>> >> String cannoical = buffer.toString();<br>
>>> >><br>
>>> >> return cannoical;<br>
>>> >><br>
>>> >> }<br>
>>> >><br>
>>> >><br>
>>> >> private String percentEncodeRfc3986(String s) {<br>
>>> >><br>
>>> >> String out;<br>
>>> >><br>
>>> >> try {<br>
>>> >><br>
>>> >> out = URLEncoder.encode(s, UTF8_CHARSET)<br>
>>> >><br>
>>> >> .replace("+", "%20")<br>
>>> >><br>
>>> >> .replace("*", "%2A")<br>
>>> >><br>
>>> >> .replace("%7E", "~");<br>
>>> >><br>
>>> >> } catch (UnsupportedEncodingException e) {<br>
>>> >><br>
>>> >> out = s;<br>
>>> >><br>
>>> >> }<br>
>>> >><br>
>>> >> return out;<br>
>>> >><br>
>>> >> }<br>
>>> >><br>
>>> >><br>
>>> >> /**<br>
>>> >><br>
>>> >> * @param verb<br>
>>> >><br>
>>> >> * @uml.property  name="requestMethod"<br>
>>> >><br>
>>> >> */<br>
>>> >><br>
>>> >> public void setRequestMethod(HTTPVerb verb )<br>
>>> >><br>
>>> >> {<br>
>>> >><br>
>>> >> this.requestMethod = verb;<br>
>>> >><br>
>>> >> }<br>
>>> >><br>
>>> >><br>
>>> >> /**<br>
>>> >><br>
>>> >> * @return<br>
>>> >><br>
>>> >> * @uml.property  name="requestMethod"<br>
>>> >><br>
>>> >> */<br>
>>> >><br>
>>> >> public HTTPVerb getRequestMethod()<br>
>>> >><br>
>>> >> {<br>
>>> >><br>
>>> >> return requestMethod;<br>
>>> >><br>
>>> >> }<br>
>>> >><br>
>>> >><br>
>>> >> /**<br>
>>> >><br>
>>> >> * @param keyId<br>
>>> >><br>
>>> >> * @uml.property  name="awsAccessKeyId"<br>
>>> >><br>
>>> >> */<br>
>>> >><br>
>>> >> public void setAwsAccessKeyId(String keyId)<br>
>>> >><br>
>>> >> {<br>
>>> >><br>
>>> >> this.awsAccessKeyId = keyId;<br>
>>> >><br>
>>> >> }<br>
>>> >><br>
>>> >><br>
>>> >> /**<br>
>>> >><br>
>>> >> * @return<br>
>>> >><br>
>>> >> * @uml.property  name="awsAccessKeyId"<br>
>>> >><br>
>>> >> */<br>
>>> >><br>
>>> >> public String getAwsAccessKeyId()<br>
>>> >><br>
>>> >> {<br>
>>> >><br>
>>> >> return this.awsAccessKeyId;<br>
>>> >><br>
>>> >> }<br>
>>> >><br>
>>> >><br>
>>> >> /**<br>
>>> >><br>
>>> >> * @param secretKey<br>
>>> >><br>
>>> >> * @uml.property  name="awsSecretKey"<br>
>>> >><br>
>>> >> */<br>
>>> >><br>
>>> >> public void setAwsSecretKey (String secretKey)<br>
>>> >><br>
>>> >> {<br>
>>> >><br>
>>> >> this.awsSecretKey = secretKey;<br>
>>> >><br>
>>> >> }<br>
>>> >><br>
>>> >><br>
>>> >> /**<br>
>>> >><br>
>>> >> * @return<br>
>>> >><br>
>>> >> * @uml.property  name="awsSecretKey"<br>
>>> >><br>
>>> >> */<br>
>>> >><br>
>>> >> public String getAwsSecretKey ()<br>
>>> >><br>
>>> >> {<br>
>>> >><br>
>>> >> return this.awsSecretKey;<br>
>>> >><br>
>>> >> }<br>
>>> >><br>
>>> >><br>
>>> >><br>
>>> >> }<br>
>>> >><br>
>>> >><br>
>>> >><br>
>>> >><br>
>>> >> _______________________________________________<br>
>>> >> Users mailing list<br>
>>> >> <a href="mailto:Users@lists.opennebula.org">Users@lists.opennebula.org</a><br>
>>> >> <a href="http://lists.opennebula.org/listinfo.cgi/users-opennebula.org" target="_blank">http://lists.opennebula.org/listinfo.cgi/users-opennebula.org</a><br>
>>> >><br>
>>> >><br>
>>> >> --<br>
>>> >> Olivier Sallou<br>
>>> >> IRISA / University of Rennes 1<br>
>>> >> Campus de Beaulieu, 35000 RENNES - FRANCE<br>
>>> >> Tel: 02.99.84.71.95<br>
>>> >><br>
>>> >> gpg key id: 4096R/326D8438  (<a href="http://keyring.debian.org" target="_blank">keyring.debian.org</a>)<br>
>>> >> Key fingerprint = 5FB4 6F83 D3B9 5204 6335  D26D 78DC 68DB 326D 8438<br>
>>> >><br>
>>> >><br>
>>> >> _______________________________________________<br>
>>> >> Users mailing list<br>
>>> >> <a href="mailto:Users@lists.opennebula.org">Users@lists.opennebula.org</a><br>
>>> >> <a href="http://lists.opennebula.org/listinfo.cgi/users-opennebula.org" target="_blank">http://lists.opennebula.org/listinfo.cgi/users-opennebula.org</a><br>
>>> >><br>
>>> ><br>
>>> ><br>
>>> > _______________________________________________<br>
>>> > Users mailing list<br>
>>> > <a href="mailto:Users@lists.opennebula.org">Users@lists.opennebula.org</a><br>
>>> > <a href="http://lists.opennebula.org/listinfo.cgi/users-opennebula.org" target="_blank">http://lists.opennebula.org/listinfo.cgi/users-opennebula.org</a><br>
>>> ><br>
>>><br>
>>><br>
>>><br>
>>> --<br>
>>> Daniel Molina<br>
>>> Project Engineer<br>
>>> OpenNebula - The Open Source Solution for Data Center Virtualization<br>
>>> <a href="http://www.OpenNebula.org" target="_blank">www.OpenNebula.org</a> | <a href="mailto:dmolina@opennebula.org">dmolina@opennebula.org</a> | @OpenNebula<br>
>><br>
>><br>
><br>
><br>
> _______________________________________________<br>
> Users mailing list<br>
> <a href="mailto:Users@lists.opennebula.org">Users@lists.opennebula.org</a><br>
> <a href="http://lists.opennebula.org/listinfo.cgi/users-opennebula.org" target="_blank">http://lists.opennebula.org/listinfo.cgi/users-opennebula.org</a><br>
><br>
<br>
<br>
<br>
--<br>
Daniel Molina<br>
Project Engineer<br>
OpenNebula - The Open Source Solution for Data Center Virtualization<br>
<a href="http://www.OpenNebula.org" target="_blank">www.OpenNebula.org</a> | <a href="mailto:dmolina@opennebula.org">dmolina@opennebula.org</a> | @OpenNebula<br>
</div></div></blockquote></div><br></div>