Hat jemand mit .net tatsächlich herausgefunden, wie Sie eine Signatur für die Verwendung mit privaten CloudFront-Inhalten erfolgreich signieren können? Nach ein paar Tagen aller Versuche kann ich nur Zugriff verweigert bekommen.So verschlüsseln Sie die Amazon CloudFront-Signatur für den Zugriff auf private Inhalte mithilfe der vordefinierten Richtlinie
Ich habe mit Variationen des folgenden Codes gearbeitet und auch mit OpenSSL.Net und AWSSDK versucht, aber das hat noch keine Zeichenmethode für RSA-SHA1.
Die Signatur (Daten) sieht wie folgt aus
{"Statement":[{"Resource":"http://xxxx.cloudfront.net/xxxx.jpg","Condition":{"DateLessThan":{"AWS:EpochTime":1266922799}}}]}
Update: all dies wird gelöst durch einen einzigen Raum in der obigen Unterschrift zu entfernen.
Wenn ich es schon früher bemerkt hätte!
Diese Methode versucht, die Signatur für die Verwendung in der vordefinierten URL zu signieren. So von den Variationen haben chanding die Padding in der hat und auch die Umkehrung des Bytes [] vor der Unterzeichnung als Lehrling OpenSSL tun es so.
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);
}
}
Sein nützlich zu beachten, dass ich den Inhalt Setup überprüft haben, korrekt in S3 und Cloudfront durch eine Cloudfront in Dosen Politik url Erzeugung mit meinem Cloudberry Explorer ist. Wie machen Sie das?
Alle Ideen würden sehr geschätzt werden. Dank
Chet, Könnte auf Ihrer Lösung näher erläutern? Ich möchte private Inhalte auf dem PostSharp-Download-Manager implementieren (jetzt mit öffentlichem Inhalt von S3 + CloudFront). Ich bin besonders fasziniert, wie Sie die Amazon PEM mit OpenSslKey in XML konvertieren. Könnten Sie einen Link dazu teilen? Danke. -gael –
Um die PEM in XML zu konvertieren, können Sie entweder die Quell- oder die geeichte Version von OpenSSLKey von http://www.jensign.com/opensslkey/index.html herunterladen. Wenn Sie herunterladen, dann führen Sie einfach opensslkey.exe aus die cmd Linie und folgen Sie den Anweisungen – Chet
Danke - Es war nicht zu schwierig, mit dieser Info zu implementieren. Ich empfehle jedoch zu testen, dass S3/CloudFront richtig konfiguriert ist, indem Sie eine GUI verwenden, und dann versuchen Sie nur, dasselbe mit Code zu machen. –