/// <summary> /// Gets the certificate for protection key id. /// </summary> /// <param name="mediaContext">The media context.</param> /// <param name="protectionKeyId">The protection key id.</param> /// <returns>The content key.</returns> internal static X509Certificate2 GetCertificateForProtectionKeyId(MediaContextBase mediaContext, string protectionKeyId) { // First check to see if we have the cert in our store already. X509Certificate2 certToUse = EncryptionUtils.GetCertificateFromStore(protectionKeyId); IMediaDataServiceContext dataContext = mediaContext.MediaServicesClassFactory.CreateDataServiceContext(); if ((certToUse == null) && (dataContext != null)) { // If not, download it from Nimbus to use. Uri uriGetProtectionKey = new Uri(String.Format(CultureInfo.InvariantCulture, "/GetProtectionKey?protectionKeyId='{0}'", protectionKeyId), UriKind.Relative); MediaRetryPolicy retryPolicy = mediaContext.MediaServicesClassFactory.GetQueryRetryPolicy(dataContext as IRetryPolicyAdapter); IEnumerable <string> results2 = retryPolicy.ExecuteAction <IEnumerable <string> >(() => dataContext.Execute <string>(uriGetProtectionKey)); string certString = results2.Single(); byte[] certBytes = Convert.FromBase64String(certString); certToUse = new X509Certificate2(certBytes); try { // Finally save it for next time. EncryptionUtils.SaveCertificateToStore(certToUse); } catch { // Azure Web Sites does not allow writing access to the local certificate store (it is blocked by the security model used to isolate each web site). // Swallow the exception and continue executing. } } return(certToUse); }
/// <summary> /// Gets the certificate for protection key id. /// </summary> /// <param name="mediaContext">The media context.</param> /// <param name="protectionKeyId">The protection key id.</param> /// <returns>The content key.</returns> internal static X509Certificate2 GetCertificateForProtectionKeyId(MediaContextBase mediaContext, string protectionKeyId) { // First check to see if we have the cert in our store already. X509Certificate2 certToUse = EncryptionUtils.GetCertificateFromStore(protectionKeyId); IMediaDataServiceContext dataContext = mediaContext.MediaServicesClassFactory.CreateDataServiceContext(); if ((certToUse == null) && (dataContext != null)) { // If not, download it from Nimbus to use. Uri uriGetProtectionKey = new Uri(String.Format(CultureInfo.InvariantCulture, "/GetProtectionKey?protectionKeyId='{0}'", protectionKeyId), UriKind.Relative); MediaRetryPolicy retryPolicy = mediaContext.MediaServicesClassFactory.GetQueryRetryPolicy(); IEnumerable <string> results2 = retryPolicy.ExecuteAction <IEnumerable <string> >(() => dataContext.Execute <string>(uriGetProtectionKey)); string certString = results2.Single(); byte[] certBytes = Convert.FromBase64String(certString); certToUse = new X509Certificate2(certBytes); // Finally save it for next time. EncryptionUtils.SaveCertificateToStore(certToUse); } return(certToUse); }