private X509Certificate2 GetX509Certificate()
{
lock (certificateCache)
{
if (certificateCache.ContainsKey(this.SigningCertURL))
{
return certificateCache[this.SigningCertURL];
}
else
{
for (int retries = 1; retries <= MAX_RETRIES; retries++)
{
try
{
HttpWebRequest request = HttpWebRequest.Create(this.SigningCertURL) as HttpWebRequest;
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
using (var reader = new StreamReader(response.GetResponseStream()))
{
var content = reader.ReadToEnd().Trim();
var pemObject = new PemReader(new StringReader(content)).ReadPemObject();
X509Certificate2 certificate = new X509Certificate2(pemObject.Content);
certificateCache[this.SigningCertURL] = certificate;
return certificate;
}
}
catch(Exception e)
{
if (retries == MAX_RETRIES)
throw new AmazonClientException(string.Format(CultureInfo.InvariantCulture,
"Unable to download signing cert after {0} retries", MAX_RETRIES), e);
else
AWSSDKUtils.Sleep((int)(Math.Pow(4, retries) * 100));
}
}
}
throw new AmazonClientException(string.Format(CultureInfo.InvariantCulture,
"Unable to download signing cert after {0} retries", MAX_RETRIES));
}
}
#endregion