Qualcuno che ha utilizzato .net ha effettivamente elaborato come firmare correttamente una firma da utilizzare con contenuto privato CloudFront? Dopo un paio di giorni di tentativi tutto ciò che posso ottenere è Accesso negato.Come crittografare la firma di Amazon CloudFront per l'accesso al contenuto privato utilizzando criteri predefiniti
Ho lavorato con varianti del seguente codice e ho anche provato a utilizzare OpenSSL.Net e AWSSDK ma non ha ancora un metodo di firma per RSA-SHA1.
La firma (dati) si presenta così
{"Statement":[{"Resource":"http://xxxx.cloudfront.net/xxxx.jpg","Condition":{"DateLessThan":{"AWS:EpochTime":1266922799}}}]}
Aggiornamento: Risolto tutto questo rimuovendo un singolo spazio nella firma sopra.
Se solo l'avessi notato prima!
Questo metodo tenta di firmare la firma per l'utilizzo nell'URL in scatola. Quindi tra le varianti è incluso il chanding del padding usato nell'hash e anche il contrario del byte [] prima di firmare come OpenSSL appropriatamente.
public string Sign(string data)
{
using (SHA1Managed SHA1 = new SHA1Managed())
{
RSACryptoServiceProvider provider = new RSACryptoServiceProvider();
RSACryptoServiceProvider.UseMachineKeyStore = false;
// Amazon PEM converted to XML using OpenSslKey
provider.FromXmlString("<RSAKeyValue><Modulus>.....");
byte[] plainbytes = System.Text.Encoding.UTF8.GetBytes(data);
byte[] hash = SHA1.ComputeHash(plainbytes);
//Array.Reverse(sig); // I have see some examples that reverse the hash
byte[] sig = provider.SignHash(hash, "SHA1");
return Convert.ToBase64String(sig);
}
}
Il suo utile notare che ho verificato il contenuto è configurato correttamente in S3 e CloudFront generando un URL politica in scatola CloudFront usando il mio CloudBerry Explorer. Come lo fanno?
Qualsiasi idea sarebbe molto apprezzata. Grazie
Chet, Potrebbe approfondire la vostra soluzione? Vorrei implementare il contenuto privato nel gestore di download PostSharp (che ora utilizza il contenuto pubblico S3 + CloudFront). Sono particolarmente incuriosito dal modo in cui converti il PEM di Amazon in XML con OpenSslKey. Potresti condividere un link a questo? Grazie. -gael –
Per convertire il PEM in XML è possibile prendere la sorgente o versione ridotta di OpenSSLKey da http://www.jensign.com/opensslkey/index.html Se si esegue il download, eseguire semplicemente opensslkey.exe da la linea cmd e segui le istruzioni – Chet
Grazie - Non è stato troppo difficile da implementare con tali informazioni. Tuttavia, ti consiglio di provare che S3/CloudFront sia configurato correttamente usando una GUI, e quindi provi solo a fare la stessa cosa con il codice. –