private static void ReEncryptEdgeSyncCredentials(Server server, X509Certificate2 oldCertificate, X509Certificate2 newCertificate) { if (server.EdgeSyncCredentials == null || server.EdgeSyncCredentials.Count == 0) { return; } if (oldCertificate == null) { throw new InvalidOperationException(Strings.InternalTransportCertificateCorruptedInADOnHub); } if (TlsCertificateInfo.IsCNGProvider(newCertificate)) { throw new InvalidOperationException(Strings.InternalTransportCertificateMustBeCAPICertificate(newCertificate.Thumbprint)); } oldCertificate = ExchangeCertificate.GetCertificateFromStore(StoreName.My, oldCertificate.Thumbprint); if (oldCertificate == null) { throw new InvalidOperationException(Strings.InternalTransportCertificateCorruptedInADOnHub); } EdgeSyncCredential[] array = new EdgeSyncCredential[server.EdgeSyncCredentials.Count]; using (RSACryptoServiceProvider rsacryptoServiceProvider = (RSACryptoServiceProvider)oldCertificate.PrivateKey) { for (int i = 0; i < server.EdgeSyncCredentials.Count; i++) { array[i] = EdgeSyncCredential.DeserializeEdgeSyncCredential(server.EdgeSyncCredentials[i]); try { array[i].EncryptedESRAPassword = rsacryptoServiceProvider.Decrypt(array[i].EncryptedESRAPassword, false); } catch (CryptographicException) { throw new InvalidOperationException(Strings.InternalTransportCertificateCorruptedInADOnHub); } } } using (RSACryptoServiceProvider rsacryptoServiceProvider2 = newCertificate.PublicKey.Key as RSACryptoServiceProvider) { if (rsacryptoServiceProvider2 != null) { for (int j = 0; j < array.Length; j++) { if (array[j].EncryptedESRAPassword != null) { array[j].EncryptedESRAPassword = rsacryptoServiceProvider2.Encrypt(array[j].EncryptedESRAPassword, false); server.EdgeSyncCredentials[j] = EdgeSyncCredential.SerializeEdgeSyncCredential(array[j]); } } } } }
internal static ExchangeCertificate GetCertificateFromStore(StoreName storeName, string thumbprint) { X509Store store = new X509Store(storeName, StoreLocation.LocalMachine); return(ExchangeCertificate.GetCertificateFromStore(store, thumbprint)); }