public void HelloWorldSync(string keyVaultUrl) { #region Snippet:CertificatesSample1CertificateClient var client = new CertificateClient(new Uri(keyVaultUrl), new DefaultAzureCredential()); #endregion #region Snippet:CertificatesSample1CreateCertificate string certName = $"defaultCert-{Guid.NewGuid()}"; CertificateOperation certOp = client.StartCreateCertificate(certName, CertificatePolicy.Default); while (!certOp.HasCompleted) { certOp.UpdateStatus(); Thread.Sleep(TimeSpan.FromSeconds(1)); } #endregion #region Snippet:CertificatesSample1GetCertificateWithPolicy KeyVaultCertificateWithPolicy certificate = client.GetCertificate(certName); Debug.WriteLine($"Certificate was returned with name {certificate.Name} which expires {certificate.Properties.ExpiresOn}"); #endregion #region Snippet:CertificatesSample1UpdateCertificate CertificateProperties certificateProperties = certificate.Properties; certificateProperties.Enabled = false; KeyVaultCertificate updatedCert = client.UpdateCertificateProperties(certificateProperties); Debug.WriteLine($"Certificate enabled set to '{updatedCert.Properties.Enabled}'"); #endregion #region Snippet:CertificatesSample1CreateCertificateWithNewVersion CertificateOperation newCertOp = client.StartCreateCertificate(certificate.Name, certificate.Policy); while (!newCertOp.HasCompleted) { newCertOp.UpdateStatus(); Thread.Sleep(TimeSpan.FromSeconds(1)); } #endregion #region Snippet:CertificatesSample1DeleteCertificate DeleteCertificateOperation operation = client.StartDeleteCertificate(certName); // To ensure certificate is deleted on server side. while (!operation.HasCompleted) { Thread.Sleep(2000); operation.UpdateStatus(); } #endregion // If the keyvault is soft-delete enabled, then for permanent deletion, the deleted certificate needs to be purged. client.PurgeDeletedCertificate(certName); }
public void DeleteAndPurgeCertificate() { #region Snippet:DeleteAndPurgeCertificate DeleteCertificateOperation operation = client.StartDeleteCertificate("MyCertificate"); // You only need to wait for completion if you want to purge or recover the certificate. // You should call `UpdateStatus` in another thread or after doing additional work like pumping messages. while (!operation.HasCompleted) { Thread.Sleep(2000); operation.UpdateStatus(); } DeletedCertificate secret = operation.Value; client.PurgeDeletedCertificate(secret.Name); #endregion }
public void ImportPfxCertificateSync() { // Environment variable with the Key Vault endpoint. string keyVaultUrl = TestEnvironment.KeyVaultUrl; #region Snippet:CertificatesSample3CertificateClient CertificateClient client = new CertificateClient(new Uri(keyVaultUrl), new DefaultAzureCredential()); #endregion #region Snippet:CertificatesSample3ImportPfxCertificate string name = $"cert-{Guid.NewGuid()}"; #if SNIPPET byte[] pfx = File.ReadAllBytes("certificate.pfx"); #else byte[] pfx = Convert.FromBase64String(s_pfxBase64); #endif ImportCertificateOptions importOptions = new ImportCertificateOptions(name, pfx) { Policy = new CertificatePolicy(WellKnownIssuerNames.Self, "CN=contoso.com") { // Required when setting a policy; if no policy required, Pfx is assumed. ContentType = CertificateContentType.Pkcs12, // Optionally mark the private key exportable. Exportable = true } }; client.ImportCertificate(importOptions); #endregion DeleteCertificateOperation operation = client.StartDeleteCertificate(name); // To ensure certificates are deleted on server side. // You only need to wait for completion if you want to purge or recover the certificate. while (!operation.HasCompleted) { Thread.Sleep(2000); operation.UpdateStatus(); } client.PurgeDeletedCertificate(name); }
public void ImportPemCertificateSync() { // Environment variable with the Key Vault endpoint. string keyVaultUrl = TestEnvironment.KeyVaultUrl; CertificateClient client = new CertificateClient(new Uri(keyVaultUrl), new DefaultAzureCredential()); #region Snippet:CertificatesSample3ImportPemCertificate string name = $"cert-{Guid.NewGuid()}"; //@@ byte[] pem = File.ReadAllBytes("certificate.cer"); /*@@*/ byte[] pem = Encoding.ASCII.GetBytes(s_pem); ImportCertificateOptions importOptions = new ImportCertificateOptions(name, pem) { Policy = new CertificatePolicy(WellKnownIssuerNames.Self, "CN=contoso.com") { // Required when the certificate bytes are a PEM-formatted certificate. ContentType = CertificateContentType.Pem, // Optionally mark the private key exportable. Exportable = true } }; client.ImportCertificate(importOptions); #endregion DeleteCertificateOperation operation = client.StartDeleteCertificate(name); // To ensure certificates are deleted on server side. // You only need to wait for completion if you want to purge or recover the certificate. while (!operation.HasCompleted) { Thread.Sleep(2000); operation.UpdateStatus(); } client.PurgeDeletedCertificate(name); }
public void DownloadCertificateSync() { // Environment variable with the Key Vault endpoint. string keyVaultUrl = TestEnvironment.KeyVaultUrl; #region Snippet:CertificatesSample4CertificateClient CertificateClient client = new CertificateClient(new Uri(keyVaultUrl), new DefaultAzureCredential()); #endregion string certificateName = $"rsa-{Guid.NewGuid()}"; CertificateOperation operation = client.StartCreateCertificate(certificateName, CertificatePolicy.Default); while (!operation.HasCompleted) { operation.UpdateStatus(); Thread.Sleep(TimeSpan.FromSeconds(10)); } using SHA256 sha = SHA256.Create(); byte[] data = Encoding.UTF8.GetBytes("test"); byte[] hash = sha.ComputeHash(data); #region Snippet:CertificatesSample4DownloadCertificate X509KeyStorageFlags keyStorageFlags = X509KeyStorageFlags.MachineKeySet; if (!RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) { keyStorageFlags |= X509KeyStorageFlags.EphemeralKeySet; } DownloadCertificateOptions options = new DownloadCertificateOptions(certificateName) { KeyStorageFlags = keyStorageFlags }; using X509Certificate2 certificate = client.DownloadCertificate(options); using RSA key = certificate.GetRSAPrivateKey(); byte[] signature = key.SignHash(hash, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1); Debug.WriteLine($"Signature: {Convert.ToBase64String(signature)}"); #endregion #region Snippet:CertificatesSample4PublicKey Response <KeyVaultCertificateWithPolicy> certificateResponse = client.GetCertificate(certificateName); using X509Certificate2 publicCertificate = new X509Certificate2(certificateResponse.Value.Cer); using RSA publicKey = publicCertificate.GetRSAPublicKey(); bool verified = publicKey.VerifyHash(hash, signature, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1); Debug.WriteLine($"Signature verified: {verified}"); #endregion Assert.IsTrue(verified); DeleteCertificateOperation deleteOperation = client.StartDeleteCertificate(certificateName); while (!deleteOperation.HasCompleted) { deleteOperation.UpdateStatus(); Thread.Sleep(TimeSpan.FromSeconds(2)); } client.PurgeDeletedCertificate(certificateName); }
public void GetCertificatesSync() { // Environment variable with the Key Vault endpoint. string keyVaultUrl = TestEnvironment.KeyVaultUrl; #region Snippet:CertificatesSample2CertificateClient CertificateClient client = new CertificateClient(new Uri(keyVaultUrl), new DefaultAzureCredential()); #endregion #region Snippet:CertificatesSample2CreateCertificate string certName1 = $"defaultCert-{Guid.NewGuid()}"; CertificateOperation certOp1 = client.StartCreateCertificate(certName1, CertificatePolicy.Default); string certName2 = $"defaultCert-{Guid.NewGuid()}"; CertificateOperation certOp2 = client.StartCreateCertificate(certName2, CertificatePolicy.Default); while (!certOp1.HasCompleted) { certOp1.UpdateStatus(); Thread.Sleep(TimeSpan.FromSeconds(1)); } while (!certOp2.HasCompleted) { certOp2.UpdateStatus(); Thread.Sleep(TimeSpan.FromSeconds(1)); } #endregion #region Snippet:CertificatesSample2ListCertificates foreach (CertificateProperties cert in client.GetPropertiesOfCertificates()) { Debug.WriteLine($"Certificate is returned with name {cert.Name} and thumbprint {BitConverter.ToString(cert.X509Thumbprint)}"); } #endregion #region Snippet:CertificatesSample2CreateCertificateWithNewVersion CertificateOperation newCertOp = client.StartCreateCertificate(certName1, CertificatePolicy.Default); while (!newCertOp.HasCompleted) { newCertOp.UpdateStatus(); Thread.Sleep(TimeSpan.FromSeconds(1)); } #endregion #region Snippet:CertificatesSample2ListCertificateVersions foreach (CertificateProperties cert in client.GetPropertiesOfCertificateVersions(certName1)) { Debug.WriteLine($"Certificate {cert.Name} with name {cert.Version}"); } #endregion #region Snippet:CertificatesSample2DeleteCertificates DeleteCertificateOperation operation1 = client.StartDeleteCertificate(certName1); DeleteCertificateOperation operation2 = client.StartDeleteCertificate(certName2); // To ensure certificates are deleted on server side. // You only need to wait for completion if you want to purge or recover the certificate. while (!operation1.HasCompleted || !operation2.HasCompleted) { Thread.Sleep(2000); operation1.UpdateStatus(); operation2.UpdateStatus(); } #endregion #region Snippet:CertificatesSample2ListDeletedCertificates foreach (DeletedCertificate deletedCert in client.GetDeletedCertificates()) { Debug.WriteLine($"Deleted certificate's recovery Id {deletedCert.RecoveryId}"); } #endregion // If the keyvault is soft-delete enabled, then for permanent deletion, deleted keys needs to be purged. client.PurgeDeletedCertificate(certName1); client.PurgeDeletedCertificate(certName2); }
public void HelloWorldSync() { // Environment variable with the Key Vault endpoint. string keyVaultUrl = TestEnvironment.KeyVaultUrl; #region Snippet:CertificatesSample1CertificateClient CertificateClient client = new CertificateClient(new Uri(keyVaultUrl), new DefaultAzureCredential()); #endregion #region Snippet:CertificatesSample1CreateCertificate string certName = $"defaultCert-{Guid.NewGuid()}"; CertificateOperation certOp = client.StartCreateCertificate(certName, CertificatePolicy.Default); while (!certOp.HasCompleted) { certOp.UpdateStatus(); Thread.Sleep(TimeSpan.FromSeconds(1)); } #endregion #region Snippet:CertificatesSample1GetCertificateWithPolicy Response <KeyVaultCertificateWithPolicy> certificateResponse = client.GetCertificate(certName); KeyVaultCertificateWithPolicy certificate = certificateResponse.Value; Debug.WriteLine($"Certificate was returned with name {certificate.Name} which expires {certificate.Properties.ExpiresOn}"); #endregion #region Snippet:CertificatesSample1UpdateCertificate CertificateProperties certificateProperties = certificate.Properties; certificateProperties.Enabled = false; Response <KeyVaultCertificate> updatedCertResponse = client.UpdateCertificateProperties(certificateProperties); Debug.WriteLine($"Certificate enabled set to '{updatedCertResponse.Value.Properties.Enabled}'"); #endregion #region Snippet:CertificatesSample1CreateCertificateWithNewVersion CertificateOperation newCertOp = client.StartCreateCertificate(certificate.Name, certificate.Policy); while (!newCertOp.HasCompleted) { newCertOp.UpdateStatus(); Thread.Sleep(TimeSpan.FromSeconds(1)); } #endregion #region Snippet:CertificatesSample1DeleteCertificate DeleteCertificateOperation operation = client.StartDeleteCertificate(certName); // You only need to wait for completion if you want to purge or recover the certificate. while (!operation.HasCompleted) { Thread.Sleep(2000); operation.UpdateStatus(); } #endregion // If the keyvault is soft-delete enabled, then for permanent deletion, the deleted certificate needs to be purged. client.PurgeDeletedCertificate(certName); }