From 239c3c9f54c554d241e0aaad5d3847a2fa46cedb Mon Sep 17 00:00:00 2001 From: George Arama <50641385+gearama@users.noreply.github.com> Date: Tue, 12 Oct 2021 17:30:53 -0700 Subject: [PATCH] Get and update certificate policy (#2958) * Get and update certificate policy * build issue --- .../certificates/certificate_client.hpp | 33 ++++ .../src/certificate_client.cpp | 27 +++ .../src/certificate_serializers.cpp | 12 ++ .../src/private/certificate_constants.hpp | 4 +- .../src/private/certificate_serializers.hpp | 1 + .../test/ut/certificate_client_test.cpp | 158 ++++++++++++++++ ...ficateClientTest.GetCertificatePolicy.json | 142 +++++++++++++++ ...ateClientTest.UpdateCertificatePolicy.json | 169 ++++++++++++++++++ 8 files changed, 545 insertions(+), 1 deletion(-) create mode 100644 sdk/keyvault/azure-security-keyvault-certificates/test/ut/recordings/KeyVaultCertificateClientTest.GetCertificatePolicy.json create mode 100644 sdk/keyvault/azure-security-keyvault-certificates/test/ut/recordings/KeyVaultCertificateClientTest.UpdateCertificatePolicy.json diff --git a/sdk/keyvault/azure-security-keyvault-certificates/inc/azure/keyvault/certificates/certificate_client.hpp b/sdk/keyvault/azure-security-keyvault-certificates/inc/azure/keyvault/certificates/certificate_client.hpp index 33568d77c..54d21f6d0 100644 --- a/sdk/keyvault/azure-security-keyvault-certificates/inc/azure/keyvault/certificates/certificate_client.hpp +++ b/sdk/keyvault/azure-security-keyvault-certificates/inc/azure/keyvault/certificates/certificate_client.hpp @@ -287,6 +287,39 @@ namespace Azure { namespace Security { namespace KeyVault { namespace Certificat std::string const& name, Azure::Core::Context const& context = Azure::Core::Context()) const; + /** + * @brief "List the policy for a certificate. + * + * @details The GetCertificatePolicy operation returns the specified certificate policy + * resources in the specified key vault. + * + * @remark This operation requires the certificates/get permission. + * + * @param name The name of the certificate + * @param context The context for the operation can be used for request cancellation. + * @return The contact properties. + */ + Azure::Response GetCertificatePolicy( + std::string const& name, + Azure::Core::Context const& context = Azure::Core::Context()) const; + + /** + * @brief Update the policy for a certificate. + * + * @details Set specified members in the certificate policy. Leave others as null. + * + * @remark This operation requires the certificates/update permission. + * + * @param name The name of the certificate + * @param certificatePolicy The updated certificate policy. + * @param context The context for the operation can be used for request cancellation. + * @return The updated contact properties. + */ + Azure::Response UpdateCertificatePolicy( + std::string const& name, + CertificatePolicy const& certificatePolicy, + Azure::Core::Context const& context = Azure::Core::Context()) const; + private: /** * @brief Gets the creation operation of a certificate. diff --git a/sdk/keyvault/azure-security-keyvault-certificates/src/certificate_client.cpp b/sdk/keyvault/azure-security-keyvault-certificates/src/certificate_client.cpp index db7041818..d26453642 100644 --- a/sdk/keyvault/azure-security-keyvault-certificates/src/certificate_client.cpp +++ b/sdk/keyvault/azure-security-keyvault-certificates/src/certificate_client.cpp @@ -282,4 +282,31 @@ RecoverDeletedCertificateOperation CertificateClient::StartRecoverDeletedCertifi return RecoverDeletedCertificateOperation( std::make_shared(*this), std::move(responseT)); } +Azure::Response CertificateClient::GetCertificatePolicy( + std::string const& name, + Azure::Core::Context const& context) const +{ + auto request = CreateRequest(HttpMethod::Get, {CertificatesPath, name, PolicyPath}); + auto rawResponse = SendRequest(request, context); + + auto value = CertificatePolicySerializer::Deserialize(*rawResponse); + return Azure::Response(std::move(value), std::move(rawResponse)); +} + +Azure::Response CertificateClient::UpdateCertificatePolicy( + std::string const& name, + CertificatePolicy const& certificatePolicy, + Azure::Core::Context const& context) const +{ + auto payload = CertificatePolicySerializer::Serialize(certificatePolicy); + Azure::Core::IO::MemoryBodyStream payloadStream( + reinterpret_cast(payload.data()), payload.size()); + auto request + = CreateRequest(HttpMethod::Patch, {CertificatesPath, name, PolicyPath}, &payloadStream); + auto rawResponse = SendRequest(request, context); + + auto value = CertificatePolicySerializer::Deserialize(*rawResponse); + return Azure::Response(std::move(value), std::move(rawResponse)); +} + const ServiceVersion ServiceVersion::V7_2("7.2"); diff --git a/sdk/keyvault/azure-security-keyvault-certificates/src/certificate_serializers.cpp b/sdk/keyvault/azure-security-keyvault-certificates/src/certificate_serializers.cpp index 0914ca6ae..f0dc42dc2 100644 --- a/sdk/keyvault/azure-security-keyvault-certificates/src/certificate_serializers.cpp +++ b/sdk/keyvault/azure-security-keyvault-certificates/src/certificate_serializers.cpp @@ -125,6 +125,18 @@ Azure::Core::Json::_internal::json CertificatePropertiesSerializer::JsonSerializ return attributes; } +CertificatePolicy CertificatePolicySerializer::Deserialize( + Azure::Core::Http::RawResponse const& rawResponse) +{ + CertificatePolicy policy; + auto const& body = rawResponse.GetBody(); + auto jsonResponse = json::parse(body); + + Deserialize(policy, jsonResponse); + + return policy; +} + void CertificatePolicySerializer::Deserialize( CertificatePolicy& policy, Azure::Core::Json::_internal::json fragment) diff --git a/sdk/keyvault/azure-security-keyvault-certificates/src/private/certificate_constants.hpp b/sdk/keyvault/azure-security-keyvault-certificates/src/private/certificate_constants.hpp index a7cd86fd1..6e10ff3d0 100644 --- a/sdk/keyvault/azure-security-keyvault-certificates/src/private/certificate_constants.hpp +++ b/sdk/keyvault/azure-security-keyvault-certificates/src/private/certificate_constants.hpp @@ -18,10 +18,10 @@ namespace Azure { namespace Security { namespace KeyVault { namespace Certificat constexpr static const char CertificatesCreatePath[] = "create"; constexpr static const char IssuersPath[] = "issuers"; constexpr static const char ContactsPath[] = "contacts"; - constexpr static const char ContactsPropertyName[] = "contacts"; constexpr static const char PendingPath[] = "pending"; constexpr static const char DeletedCertificatesPath[] = "deletedcertificates"; constexpr static const char RecoverPath[] = "recover"; + constexpr static const char PolicyPath[] = "policy"; /***************** Certificates Properties *****************/ constexpr static const char IdName[] = "id"; @@ -116,6 +116,8 @@ namespace Azure { namespace Security { namespace KeyVault { namespace Certificat constexpr static const char EmailPropertyName[] = "email"; constexpr static const char NamePropertyName[] = "name"; constexpr static const char PhonePropertyName[] = "phone"; + constexpr static const char ContactsPropertyName[] = "contacts"; + /****************** Certificate Operation Properties **********/ constexpr static const char CsrPropertyName[] = "csr"; constexpr static const char StatusPropertyName[] = "status"; diff --git a/sdk/keyvault/azure-security-keyvault-certificates/src/private/certificate_serializers.hpp b/sdk/keyvault/azure-security-keyvault-certificates/src/private/certificate_serializers.hpp index ed151c706..15ecb2131 100644 --- a/sdk/keyvault/azure-security-keyvault-certificates/src/private/certificate_serializers.hpp +++ b/sdk/keyvault/azure-security-keyvault-certificates/src/private/certificate_serializers.hpp @@ -95,6 +95,7 @@ namespace Azure { namespace Security { namespace KeyVault { namespace Certificat static void Deserialize( CertificatePolicy& policy, Azure::Core::Json::_internal::json fragment); + static CertificatePolicy Deserialize(Azure::Core::Http::RawResponse const& rawResponse); }; class CertificateCreateParametersSerializer final { diff --git a/sdk/keyvault/azure-security-keyvault-certificates/test/ut/certificate_client_test.cpp b/sdk/keyvault/azure-security-keyvault-certificates/test/ut/certificate_client_test.cpp index e79f2a58a..7d039c631 100644 --- a/sdk/keyvault/azure-security-keyvault-certificates/test/ut/certificate_client_test.cpp +++ b/sdk/keyvault/azure-security-keyvault-certificates/test/ut/certificate_client_test.cpp @@ -558,3 +558,161 @@ TEST_F(KeyVaultCertificateClientTest, GetContactsDuplicateEmail) CheckContactsCollections(contacts, response2.Value); } + +TEST_F(KeyVaultCertificateClientTest, GetCertificatePolicy) +{ + // cspell: disable-next-line + std::string const certificateName("certPolicy"); + + auto const& client + = GetClientForTest(::testing::UnitTest::GetInstance()->current_test_info()->name()); + + auto params = CertificateCreateParameters(); + params.Policy.Subject = "CN=xyz"; + params.Policy.ValidityInMonths = 12; + params.Policy.Enabled = true; + + params.Properties.Enabled = true; + params.Properties.Name = certificateName; + params.Policy.ContentType = CertificateContentType::Pkcs12; + params.Policy.IssuerName = "Self"; + + LifetimeAction action; + action.LifetimePercentage = 80; + action.Action = CertificatePolicyAction::AutoRenew; + params.Policy.LifetimeActions.emplace_back(action); + + { + auto response = client.StartCreateCertificate(certificateName, params); + response.PollUntilDone(m_defaultWait); + } + + { + auto response = client.GetCertificatePolicy(certificateName); + auto const& policy = response.Value; + + // Key props + EXPECT_TRUE(policy.Exportable.HasValue()); + EXPECT_TRUE(policy.KeyType.HasValue()); + EXPECT_TRUE(policy.ReuseKey.HasValue()); + // Recording uses RSA with no curve-name. Use RSA key when running LIVE + EXPECT_FALSE(policy.KeyCurveName.HasValue()); + EXPECT_TRUE(policy.KeySize.HasValue()); + // enabled + EXPECT_TRUE(policy.Enabled.HasValue()); + EXPECT_TRUE(policy.Enabled.Value()); + // validity + EXPECT_TRUE(policy.ValidityInMonths.HasValue()); + EXPECT_EQ(policy.ValidityInMonths.Value(), 12); + // Secret props + EXPECT_TRUE(policy.ContentType.HasValue()); + EXPECT_EQ(policy.ContentType.Value(), CertificateContentType::Pkcs12); + // x509_props + EXPECT_TRUE(policy.Subject.size() > 0); + EXPECT_EQ(policy.Subject, "CN=xyz"); + // issuer + EXPECT_TRUE(policy.IssuerName.HasValue()); + EXPECT_EQ(policy.IssuerName.Value(), "Self"); + // attributes + EXPECT_TRUE(policy.CreatedOn.HasValue()); + // lifetime_actions + EXPECT_TRUE(policy.LifetimeActions.size() > 0); + EXPECT_NE(policy.LifetimeActions[0].Action.ToString(), ""); + } +} + +TEST_F(KeyVaultCertificateClientTest, UpdateCertificatePolicy) +{ + // cspell: disable-next-line + std::string const certificateName("updateCertPolicy"); + + auto const& client + = GetClientForTest(::testing::UnitTest::GetInstance()->current_test_info()->name()); + + auto params = CertificateCreateParameters(); + params.Policy.Subject = "CN=xyz"; + params.Policy.ValidityInMonths = 12; + params.Policy.Enabled = true; + + params.Properties.Enabled = true; + params.Properties.Name = certificateName; + params.Policy.ContentType = CertificateContentType::Pkcs12; + params.Policy.IssuerName = "Self"; + + LifetimeAction action; + action.LifetimePercentage = 80; + action.Action = CertificatePolicyAction::AutoRenew; + params.Policy.LifetimeActions.emplace_back(action); + + { + auto response = client.StartCreateCertificate(certificateName, params); + response.PollUntilDone(m_defaultWait); + } + + { + auto response = client.GetCertificatePolicy(certificateName); + auto policy = response.Value; + + // Key props + EXPECT_TRUE(policy.Exportable.HasValue()); + EXPECT_TRUE(policy.KeyType.HasValue()); + EXPECT_TRUE(policy.ReuseKey.HasValue()); + // Recording uses RSA with no curve-name. Use RSA key when running LIVE + EXPECT_FALSE(policy.KeyCurveName.HasValue()); + EXPECT_TRUE(policy.KeySize.HasValue()); + // enabled + EXPECT_TRUE(policy.Enabled.HasValue()); + EXPECT_TRUE(policy.Enabled.Value()); + // validity + EXPECT_TRUE(policy.ValidityInMonths.HasValue()); + EXPECT_EQ(policy.ValidityInMonths.Value(), 12); + // Secret props + EXPECT_TRUE(policy.ContentType.HasValue()); + EXPECT_EQ(policy.ContentType.Value(), CertificateContentType::Pkcs12); + // x509_props + EXPECT_TRUE(policy.Subject.size() > 0); + EXPECT_EQ(policy.Subject, "CN=xyz"); + // issuer + EXPECT_TRUE(policy.IssuerName.HasValue()); + EXPECT_EQ(policy.IssuerName.Value(), "Self"); + // attributes + EXPECT_TRUE(policy.CreatedOn.HasValue()); + // lifetime_actions + EXPECT_TRUE(policy.LifetimeActions.size() > 0); + EXPECT_NE(policy.LifetimeActions[0].Action.ToString(), ""); + + policy.ValidityInMonths = 8; + policy.Subject = "CN=twa"; + + auto updateResponse = client.UpdateCertificatePolicy(certificateName, policy); + auto const& updatedPolicy = updateResponse.Value; + + // Key props + EXPECT_TRUE(updatedPolicy.Exportable.HasValue()); + EXPECT_TRUE(updatedPolicy.KeyType.HasValue()); + EXPECT_TRUE(updatedPolicy.ReuseKey.HasValue()); + // Recording uses RSA with no curve-name. Use RSA key when running LIVE + EXPECT_FALSE(updatedPolicy.KeyCurveName.HasValue()); + EXPECT_TRUE(updatedPolicy.KeySize.HasValue()); + // enabled + EXPECT_TRUE(updatedPolicy.Enabled.HasValue()); + EXPECT_TRUE(updatedPolicy.Enabled.Value()); + // validity + EXPECT_TRUE(updatedPolicy.ValidityInMonths.HasValue()); + EXPECT_EQ(updatedPolicy.ValidityInMonths.Value(), 8); + // Secret props + EXPECT_TRUE(updatedPolicy.ContentType.HasValue()); + EXPECT_EQ(updatedPolicy.ContentType.Value(), CertificateContentType::Pkcs12); + // x509_props + EXPECT_TRUE(updatedPolicy.Subject.size() > 0); + EXPECT_EQ(updatedPolicy.Subject, "CN=twa"); + // issuer + EXPECT_TRUE(updatedPolicy.IssuerName.HasValue()); + EXPECT_EQ(updatedPolicy.IssuerName.Value(), "Self"); + // attributes + EXPECT_TRUE(updatedPolicy.CreatedOn.HasValue()); + // lifetime_actions + EXPECT_TRUE(updatedPolicy.LifetimeActions.size() > 0); + EXPECT_NE(updatedPolicy.LifetimeActions[0].Action.ToString(), ""); + } +} diff --git a/sdk/keyvault/azure-security-keyvault-certificates/test/ut/recordings/KeyVaultCertificateClientTest.GetCertificatePolicy.json b/sdk/keyvault/azure-security-keyvault-certificates/test/ut/recordings/KeyVaultCertificateClientTest.GetCertificatePolicy.json new file mode 100644 index 000000000..8b673fdb4 --- /dev/null +++ b/sdk/keyvault/azure-security-keyvault-certificates/test/ut/recordings/KeyVaultCertificateClientTest.GetCertificatePolicy.json @@ -0,0 +1,142 @@ +{ + "networkCallRecords": [ + { + "Headers": { + "content-type": "application/json", + "user-agent": "azsdk-cpp-keyvault-certificates/4.0.0-beta.1 (Windows 10 Enterprise 6.3 22000 22000.1.amd64fre.co_release.210604-1628)", + "x-ms-client-request-id": "37e9d518-cace-4531-5ee5-606759096cbd" + }, + "Method": "POST", + "Response": { + "BODY": "{\"id\":\"https://REDACTED.vault.azure.net/certificates/certPolicy/pending\",\"issuer\":{\"name\":\"Self\"},\"csr\":\"MIICfzCCAWcCAQAwDjEMMAoGA1UEAxMDeHl6MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvTkrkBwaWRHcw2De07MxKJpPoOxwSE0KEgJOlH1/xWI/OOvie/SSQhYnWrMCfhWbmE8YCT/LKpehvxaJh2zMpE+EjFBtajaQgKIRZxHVFZXnyOvIPhn2O0Jq1vFzEixhwCF8ZTJ59MUcpcva9/UFDEBM0xoahrzBYEQ1DmsAr0ef1Tjg3BTXvL8hetsAvCtGdRxP45cJOj6Wtiha6nvf7ycRamQWWBgji1RL9IPr5mbIOG3Iw9xBVv4Kdive4Z0I763NomApyCGCbEK8OiQbDyVf1e46E9Zg82ONYNC9RnuPSHde+ZZ2QmQtqZgNf5KPBgAFNA75fAQVt7KxWk0bAQIDAQABoCwwKgYJKoZIhvcNAQkOMR0wGzAOBgNVHQ8BAf8EBAMCBaAwCQYDVR0TBAIwADANBgkqhkiG9w0BAQsFAAOCAQEAqLeuRrTPQUmNx+Tgcc3PIkAWDDEBfRqwFifpIogxHB2oVbfEOZ+14A3/wQnleCQSqbtrb76XwcMyA+gj3o2kATj9HhIR+cDJB4wHo6q7JwvycN/dw8ggQTlzKNv0Ibe+VXmbJSrBiSwqkA3vEsrzNqH99HZ7/awfJHtGW4JcgzoNFK69RKrbNPa8MSWAnJDiBdkLcpta2iows1/pv02aGWFJ39J6ud3yYoCF3UCVuUrGbI2eqnNBpw4SL/21TWFZB9R8bdF4pqUXz0B7ex4geXn3sfhCsikNn86TTRTlxkjeMu4wXjJBm/V4Pgb00TdE2OMGovlxoopLasS/RyCMig==\",\"cancellation_requested\":false,\"status\":\"inProgress\",\"status_details\":\"Pending certificate created. Certificate request is in progress. This may take some time based on the issuer provider. Please check again later.\",\"request_id\":\"1563c46626b74c938a861a0f5ce92673\"}", + "STATUS_CODE": "202", + "cache-control": "no-cache", + "content-length": "1237", + "content-type": "application/json; charset=utf-8", + "date": "Thu, 07 Oct 2021 23:33:28 GMT", + "expires": "-1", + "location": "https://REDACTED.vault.azure.net/certificates/certPolicy/pending?api-version=7.2&request_id=1563c46626b74c938a861a0f5ce92673", + "pragma": "no-cache", + "retry-after": "10", + "strict-transport-security": "max-age=31536000;includeSubDomains", + "x-content-type-options": "nosniff", + "x-ms-client-request-id": "37e9d518-cace-4531-5ee5-606759096cbd", + "x-ms-keyvault-network-info": "conn_type=Ipv4;addr=24.22.157.72;act_addr_fam=InterNetwork;", + "x-ms-keyvault-region": "westus2", + "x-ms-keyvault-service-version": "1.9.132.3", + "x-ms-request-id": "d0d7851f-c136-4783-9885-94e64eb2ab94", + "x-powered-by": "ASP.NET" + }, + "Url": "https://REDACTED.vault.azure.net/certificates/certPolicy/create?api-version=7.2" + }, + { + "Headers": { + "content-type": "application/json", + "user-agent": "azsdk-cpp-keyvault-certificates/4.0.0-beta.1 (Windows 10 Enterprise 6.3 22000 22000.1.amd64fre.co_release.210604-1628)", + "x-ms-client-request-id": "611b7e40-3ae3-4e0c-4b93-b550c9326439" + }, + "Method": "GET", + "Response": { + "BODY": "{\"id\":\"https://REDACTED.vault.azure.net/certificates/certPolicy/pending\",\"issuer\":{\"name\":\"Self\"},\"csr\":\"MIICfzCCAWcCAQAwDjEMMAoGA1UEAxMDeHl6MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvTkrkBwaWRHcw2De07MxKJpPoOxwSE0KEgJOlH1/xWI/OOvie/SSQhYnWrMCfhWbmE8YCT/LKpehvxaJh2zMpE+EjFBtajaQgKIRZxHVFZXnyOvIPhn2O0Jq1vFzEixhwCF8ZTJ59MUcpcva9/UFDEBM0xoahrzBYEQ1DmsAr0ef1Tjg3BTXvL8hetsAvCtGdRxP45cJOj6Wtiha6nvf7ycRamQWWBgji1RL9IPr5mbIOG3Iw9xBVv4Kdive4Z0I763NomApyCGCbEK8OiQbDyVf1e46E9Zg82ONYNC9RnuPSHde+ZZ2QmQtqZgNf5KPBgAFNA75fAQVt7KxWk0bAQIDAQABoCwwKgYJKoZIhvcNAQkOMR0wGzAOBgNVHQ8BAf8EBAMCBaAwCQYDVR0TBAIwADANBgkqhkiG9w0BAQsFAAOCAQEAqLeuRrTPQUmNx+Tgcc3PIkAWDDEBfRqwFifpIogxHB2oVbfEOZ+14A3/wQnleCQSqbtrb76XwcMyA+gj3o2kATj9HhIR+cDJB4wHo6q7JwvycN/dw8ggQTlzKNv0Ibe+VXmbJSrBiSwqkA3vEsrzNqH99HZ7/awfJHtGW4JcgzoNFK69RKrbNPa8MSWAnJDiBdkLcpta2iows1/pv02aGWFJ39J6ud3yYoCF3UCVuUrGbI2eqnNBpw4SL/21TWFZB9R8bdF4pqUXz0B7ex4geXn3sfhCsikNn86TTRTlxkjeMu4wXjJBm/V4Pgb00TdE2OMGovlxoopLasS/RyCMig==\",\"cancellation_requested\":false,\"status\":\"inProgress\",\"status_details\":\"Pending certificate created. Certificate request is in progress. This may take some time based on the issuer provider. Please check again later.\",\"request_id\":\"1563c46626b74c938a861a0f5ce92673\"}", + "STATUS_CODE": "200", + "cache-control": "no-cache", + "content-length": "1237", + "content-type": "application/json; charset=utf-8", + "date": "Thu, 07 Oct 2021 23:33:28 GMT", + "expires": "-1", + "pragma": "no-cache", + "retry-after": "10", + "strict-transport-security": "max-age=31536000;includeSubDomains", + "x-content-type-options": "nosniff", + "x-ms-client-request-id": "611b7e40-3ae3-4e0c-4b93-b550c9326439", + "x-ms-keyvault-network-info": "conn_type=Ipv4;addr=24.22.157.72;act_addr_fam=InterNetwork;", + "x-ms-keyvault-region": "westus2", + "x-ms-keyvault-service-version": "1.9.132.3", + "x-ms-request-id": "6876879f-f212-4115-b8d8-84da7b037d10", + "x-powered-by": "ASP.NET" + }, + "Url": "https://REDACTED.vault.azure.net/certificates/certPolicy/pending?api-version=7.2" + }, + { + "Headers": { + "content-type": "application/json", + "user-agent": "azsdk-cpp-keyvault-certificates/4.0.0-beta.1 (Windows 10 Enterprise 6.3 22000 22000.1.amd64fre.co_release.210604-1628)", + "x-ms-client-request-id": "c2d525de-c9e6-446f-5e30-48862f590aa9" + }, + "Method": "GET", + "Response": { + "BODY": "{\"id\":\"https://REDACTED.vault.azure.net/certificates/certPolicy/pending\",\"issuer\":{\"name\":\"Self\"},\"csr\":\"MIICfzCCAWcCAQAwDjEMMAoGA1UEAxMDeHl6MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvTkrkBwaWRHcw2De07MxKJpPoOxwSE0KEgJOlH1/xWI/OOvie/SSQhYnWrMCfhWbmE8YCT/LKpehvxaJh2zMpE+EjFBtajaQgKIRZxHVFZXnyOvIPhn2O0Jq1vFzEixhwCF8ZTJ59MUcpcva9/UFDEBM0xoahrzBYEQ1DmsAr0ef1Tjg3BTXvL8hetsAvCtGdRxP45cJOj6Wtiha6nvf7ycRamQWWBgji1RL9IPr5mbIOG3Iw9xBVv4Kdive4Z0I763NomApyCGCbEK8OiQbDyVf1e46E9Zg82ONYNC9RnuPSHde+ZZ2QmQtqZgNf5KPBgAFNA75fAQVt7KxWk0bAQIDAQABoCwwKgYJKoZIhvcNAQkOMR0wGzAOBgNVHQ8BAf8EBAMCBaAwCQYDVR0TBAIwADANBgkqhkiG9w0BAQsFAAOCAQEAqLeuRrTPQUmNx+Tgcc3PIkAWDDEBfRqwFifpIogxHB2oVbfEOZ+14A3/wQnleCQSqbtrb76XwcMyA+gj3o2kATj9HhIR+cDJB4wHo6q7JwvycN/dw8ggQTlzKNv0Ibe+VXmbJSrBiSwqkA3vEsrzNqH99HZ7/awfJHtGW4JcgzoNFK69RKrbNPa8MSWAnJDiBdkLcpta2iows1/pv02aGWFJ39J6ud3yYoCF3UCVuUrGbI2eqnNBpw4SL/21TWFZB9R8bdF4pqUXz0B7ex4geXn3sfhCsikNn86TTRTlxkjeMu4wXjJBm/V4Pgb00TdE2OMGovlxoopLasS/RyCMig==\",\"cancellation_requested\":false,\"status\":\"completed\",\"target\":\"https://REDACTED.vault.azure.net/certificates/certPolicy\",\"request_id\":\"1563c46626b74c938a861a0f5ce92673\"}", + "STATUS_CODE": "200", + "cache-control": "no-cache", + "content-length": "1145", + "content-type": "application/json; charset=utf-8", + "date": "Thu, 07 Oct 2021 23:33:58 GMT", + "expires": "-1", + "pragma": "no-cache", + "strict-transport-security": "max-age=31536000;includeSubDomains", + "x-content-type-options": "nosniff", + "x-ms-client-request-id": "c2d525de-c9e6-446f-5e30-48862f590aa9", + "x-ms-keyvault-network-info": "conn_type=Ipv4;addr=24.22.157.72;act_addr_fam=InterNetwork;", + "x-ms-keyvault-region": "westus2", + "x-ms-keyvault-service-version": "1.9.132.3", + "x-ms-request-id": "2448f578-4f68-4124-ba59-dfa20192f63f", + "x-powered-by": "ASP.NET" + }, + "Url": "https://REDACTED.vault.azure.net/certificates/certPolicy/pending?api-version=7.2" + }, + { + "Headers": { + "content-type": "application/json", + "user-agent": "azsdk-cpp-keyvault-certificates/4.0.0-beta.1 (Windows 10 Enterprise 6.3 22000 22000.1.amd64fre.co_release.210604-1628)", + "x-ms-client-request-id": "34152d29-43cf-44e1-7067-edc53e49a627" + }, + "Method": "GET", + "Response": { + "BODY": "{\"id\":\"https://REDACTED.vault.azure.net/certificates/certPolicy/96879775f7294d088949be1e56640a2e\",\"kid\":\"https://REDACTED.vault.azure.net/keys/certPolicy/96879775f7294d088949be1e56640a2e\",\"sid\":\"https://REDACTED.vault.azure.net/secrets/certPolicy/96879775f7294d088949be1e56640a2e\",\"x5t\":\"sdAdFXJXjaqi_Hm2yOj7JjiDIPE\",\"cer\":\"MIIDAzCCAeugAwIBAgIQZh2Ywub9Ro6U3WtA1tvi3DANBgkqhkiG9w0BAQsFADAOMQwwCgYDVQQDEwN4eXowHhcNMjExMDA3MjMyMzMyWhcNMjIxMDA3MjMzMzMyWjAOMQwwCgYDVQQDEwN4eXowggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC9OSuQHBpZEdzDYN7TszEomk+g7HBITQoSAk6UfX/FYj846+J79JJCFidaswJ+FZuYTxgJP8sql6G/FomHbMykT4SMUG1qNpCAohFnEdUVlefI68g+GfY7QmrW8XMSLGHAIXxlMnn0xRyly9r39QUMQEzTGhqGvMFgRDUOawCvR5/VOODcFNe8vyF62wC8K0Z1HE/jlwk6Ppa2KFrqe9/vJxFqZBZYGCOLVEv0g+vmZsg4bcjD3EFW/gp2K97hnQjvrc2iYCnIIYJsQrw6JBsPJV/V7joT1mDzY41g0L1Ge49Id175lnZCZC2pmA1/ko8GAAU0Dvl8BBW3srFaTRsBAgMBAAGjXTBbMA4GA1UdDwEB/wQEAwIFoDAJBgNVHRMEAjAAMB8GA1UdIwQYMBaAFBlblUgl5i+6/mlufYx1TBPoOpKmMB0GA1UdDgQWBBQZW5VIJeYvuv5pbn2MdUwT6DqSpjANBgkqhkiG9w0BAQsFAAOCAQEAblMkCSgeiXXLVIWpI9AUD2HK4U1cEnJiT+6Mtn1KLVj+XsfzILGgWTIeRHbQFg4ezNkntQ++CCDJYSuLtk6PTATNtSdgE0UH4eeo3U7Jo6w6wjughUOq5xD1JH191Ml61KQUdM/b7q8QKb7n0mu01s3cfUqSqcGtgY0jgq/ZLkgFYupkSgd5bw7ejjbqi3aQbmw35v4j3731bEwAnspwEO4icQ4Zn/fHe+rEwfPoPSRYAD88k6LiVVq6mqqpJP0CCeotX9Pny0VJXPtNUbdivRy00r5nlYR2acJFLaPL6X4ZvxFoCnZKVIkbE4HaZ3Fync59Z4rPekVxgU/GkYtU9A==\",\"attributes\":{\"enabled\":true,\"nbf\":1633649012,\"exp\":1665185612,\"created\":1633649612,\"updated\":1633649612,\"recoveryLevel\":\"Recoverable+Purgeable\",\"recoverableDays\":90},\"tags\":{},\"policy\":{\"id\":\"https://REDACTED.vault.azure.net/certificates/certPolicy/policy\",\"key_props\":{\"exportable\":true,\"kty\":\"RSA\",\"key_size\":2048,\"reuse_key\":false},\"secret_props\":{\"contentType\":\"application/x-pkcs12\"},\"x509_props\":{\"subject\":\"CN=xyz\",\"ekus\":[],\"key_usage\":[\"digitalSignature\",\"keyEncipherment\"],\"validity_months\":12,\"basic_constraints\":{\"ca\":false}},\"lifetime_actions\":[{\"trigger\":{\"lifetime_percentage\":80},\"action\":{\"action_type\":\"AutoRenew\"}}],\"issuer\":{\"name\":\"Self\"},\"attributes\":{\"enabled\":true,\"created\":1633649608,\"updated\":1633649608}},\"pending\":{\"id\":\"https://REDACTED.vault.azure.net/certificates/certPolicy/pending\"}}", + "STATUS_CODE": "200", + "cache-control": "no-cache", + "content-length": "2205", + "content-type": "application/json; charset=utf-8", + "date": "Thu, 07 Oct 2021 23:33:58 GMT", + "expires": "-1", + "pragma": "no-cache", + "strict-transport-security": "max-age=31536000;includeSubDomains", + "x-content-type-options": "nosniff", + "x-ms-client-request-id": "34152d29-43cf-44e1-7067-edc53e49a627", + "x-ms-keyvault-network-info": "conn_type=Ipv4;addr=24.22.157.72;act_addr_fam=InterNetwork;", + "x-ms-keyvault-region": "westus2", + "x-ms-keyvault-service-version": "1.9.132.3", + "x-ms-request-id": "c9f4835a-5c97-4818-8250-79164842e80b", + "x-powered-by": "ASP.NET" + }, + "Url": "https://REDACTED.vault.azure.net/certificates/certPolicy?api-version=7.2" + }, + { + "Headers": { + "content-type": "application/json", + "user-agent": "azsdk-cpp-keyvault-certificates/4.0.0-beta.1 (Windows 10 Enterprise 6.3 22000 22000.1.amd64fre.co_release.210604-1628)", + "x-ms-client-request-id": "5d310870-049f-47c8-4815-87c02a93d796" + }, + "Method": "GET", + "Response": { + "BODY": "{\"id\":\"https://REDACTED.vault.azure.net/certificates/certPolicy/policy\",\"key_props\":{\"exportable\":true,\"kty\":\"RSA\",\"key_size\":2048,\"reuse_key\":false},\"secret_props\":{\"contentType\":\"application/x-pkcs12\"},\"x509_props\":{\"subject\":\"CN=xyz\",\"ekus\":[],\"key_usage\":[\"digitalSignature\",\"keyEncipherment\"],\"validity_months\":12,\"basic_constraints\":{\"ca\":false}},\"lifetime_actions\":[{\"trigger\":{\"lifetime_percentage\":80},\"action\":{\"action_type\":\"AutoRenew\"}}],\"issuer\":{\"name\":\"Self\"},\"attributes\":{\"enabled\":true,\"created\":1633649608,\"updated\":1633649608}}", + "STATUS_CODE": "200", + "cache-control": "no-cache", + "content-length": "552", + "content-type": "application/json; charset=utf-8", + "date": "Thu, 07 Oct 2021 23:33:58 GMT", + "expires": "-1", + "pragma": "no-cache", + "strict-transport-security": "max-age=31536000;includeSubDomains", + "x-content-type-options": "nosniff", + "x-ms-client-request-id": "5d310870-049f-47c8-4815-87c02a93d796", + "x-ms-keyvault-network-info": "conn_type=Ipv4;addr=24.22.157.72;act_addr_fam=InterNetwork;", + "x-ms-keyvault-region": "westus2", + "x-ms-keyvault-service-version": "1.9.132.3", + "x-ms-request-id": "6a30a919-3d6c-4c0d-b6a0-5f99d53fa2e2", + "x-powered-by": "ASP.NET" + }, + "Url": "https://REDACTED.vault.azure.net/certificates/certPolicy/policy?api-version=7.2" + } + ] +} diff --git a/sdk/keyvault/azure-security-keyvault-certificates/test/ut/recordings/KeyVaultCertificateClientTest.UpdateCertificatePolicy.json b/sdk/keyvault/azure-security-keyvault-certificates/test/ut/recordings/KeyVaultCertificateClientTest.UpdateCertificatePolicy.json new file mode 100644 index 000000000..8a54e5ddf --- /dev/null +++ b/sdk/keyvault/azure-security-keyvault-certificates/test/ut/recordings/KeyVaultCertificateClientTest.UpdateCertificatePolicy.json @@ -0,0 +1,169 @@ +{ + "networkCallRecords": [ + { + "Headers": { + "content-type": "application/json", + "user-agent": "azsdk-cpp-keyvault-certificates/4.0.0-beta.1 (Windows 10 Enterprise 6.3 22000 22000.1.amd64fre.co_release.210604-1628)", + "x-ms-client-request-id": "d3e6195d-100d-4653-4d58-a729de14a47c" + }, + "Method": "POST", + "Response": { + "BODY": "{\"id\":\"https://REDACTED.vault.azure.net/certificates/updateCertPolicy/pending\",\"issuer\":{\"name\":\"Self\"},\"csr\":\"MIICfzCCAWcCAQAwDjEMMAoGA1UEAxMDeHl6MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA10feChrRnLp+/sDvxvctiJnrwfL1s7FehGYP7OACZoezhhmaDOIyokd91hqfrGInFbzyI2wpb9GZkLR1Bc94g6wNrb8V2pKIG4ya8s5uWKSpcog6H9eeHzfasYOhqBzQzmT6MsvMYd5FfwItgTXzd3u70T/wXr2joiP0L1YX7xwoVJkUet1w3VHxR6j6z9o5GIIxYn282KiwMC+2j2JhitxitU5ky0NsM92erfFOu9RkHP/QotMDOhV72x6q4vKIjlhT85HTgCDr27Z0ly+XnlV83M/kHb02MdeCEZjYlOw/9LzM9mQwUOCRtp6qo+onyrPymh7WETAA1qqOc7I5WQIDAQABoCwwKgYJKoZIhvcNAQkOMR0wGzAOBgNVHQ8BAf8EBAMCBaAwCQYDVR0TBAIwADANBgkqhkiG9w0BAQsFAAOCAQEAJ/Cf73NH+MzWsti7NWWvsGv8Xfuk/J4Rsr99g0ovPj51weIipct00nbRhbMWdTJ9v0EkRlJw3HPc1VCBWBeLx3ovTd8lT6VV9ZgtxQ7QECAMnoQWe4zBSqJmdphwSdJ7YgZPCU+8iaV1Cjz7X6weoUMJeMcJS6zaMrEru0/V9SA7xC+zeeNMz0S44gQKxIZVQYnRFLhIaobDunWrCgemdp9CgZ9sqHB9C1CuhYncum60aMmHnDpj7+VOvS/Bw7PoHqiNq1Q3MdXwOY2rh36zq7gT5AKtIQVzP52kw8n38tCBANo77Kx6V8FrmpCtTCPJu2ITUBRF1PHFkYHHa20F4g==\",\"cancellation_requested\":false,\"status\":\"inProgress\",\"status_details\":\"Pending certificate created. Certificate request is in progress. This may take some time based on the issuer provider. Please check again later.\",\"request_id\":\"dfecdbbfe81c4eb5b63b25c90e98620f\"}", + "STATUS_CODE": "202", + "cache-control": "no-cache", + "content-length": "1243", + "content-type": "application/json; charset=utf-8", + "date": "Thu, 07 Oct 2021 23:52:45 GMT", + "expires": "-1", + "location": "https://REDACTED.vault.azure.net/certificates/updateCertPolicy/pending?api-version=7.2&request_id=dfecdbbfe81c4eb5b63b25c90e98620f", + "pragma": "no-cache", + "retry-after": "10", + "strict-transport-security": "max-age=31536000;includeSubDomains", + "x-content-type-options": "nosniff", + "x-ms-client-request-id": "d3e6195d-100d-4653-4d58-a729de14a47c", + "x-ms-keyvault-network-info": "conn_type=Ipv4;addr=24.22.157.72;act_addr_fam=InterNetwork;", + "x-ms-keyvault-region": "westus2", + "x-ms-keyvault-service-version": "1.9.132.3", + "x-ms-request-id": "344b923f-817f-4bb2-baa4-f0436c30cab7", + "x-powered-by": "ASP.NET" + }, + "Url": "https://REDACTED.vault.azure.net/certificates/updateCertPolicy/create?api-version=7.2" + }, + { + "Headers": { + "content-type": "application/json", + "user-agent": "azsdk-cpp-keyvault-certificates/4.0.0-beta.1 (Windows 10 Enterprise 6.3 22000 22000.1.amd64fre.co_release.210604-1628)", + "x-ms-client-request-id": "4352dc35-7a2d-4588-6951-6d996913ffe6" + }, + "Method": "GET", + "Response": { + "BODY": "{\"id\":\"https://REDACTED.vault.azure.net/certificates/updateCertPolicy/pending\",\"issuer\":{\"name\":\"Self\"},\"csr\":\"MIICfzCCAWcCAQAwDjEMMAoGA1UEAxMDeHl6MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA10feChrRnLp+/sDvxvctiJnrwfL1s7FehGYP7OACZoezhhmaDOIyokd91hqfrGInFbzyI2wpb9GZkLR1Bc94g6wNrb8V2pKIG4ya8s5uWKSpcog6H9eeHzfasYOhqBzQzmT6MsvMYd5FfwItgTXzd3u70T/wXr2joiP0L1YX7xwoVJkUet1w3VHxR6j6z9o5GIIxYn282KiwMC+2j2JhitxitU5ky0NsM92erfFOu9RkHP/QotMDOhV72x6q4vKIjlhT85HTgCDr27Z0ly+XnlV83M/kHb02MdeCEZjYlOw/9LzM9mQwUOCRtp6qo+onyrPymh7WETAA1qqOc7I5WQIDAQABoCwwKgYJKoZIhvcNAQkOMR0wGzAOBgNVHQ8BAf8EBAMCBaAwCQYDVR0TBAIwADANBgkqhkiG9w0BAQsFAAOCAQEAJ/Cf73NH+MzWsti7NWWvsGv8Xfuk/J4Rsr99g0ovPj51weIipct00nbRhbMWdTJ9v0EkRlJw3HPc1VCBWBeLx3ovTd8lT6VV9ZgtxQ7QECAMnoQWe4zBSqJmdphwSdJ7YgZPCU+8iaV1Cjz7X6weoUMJeMcJS6zaMrEru0/V9SA7xC+zeeNMz0S44gQKxIZVQYnRFLhIaobDunWrCgemdp9CgZ9sqHB9C1CuhYncum60aMmHnDpj7+VOvS/Bw7PoHqiNq1Q3MdXwOY2rh36zq7gT5AKtIQVzP52kw8n38tCBANo77Kx6V8FrmpCtTCPJu2ITUBRF1PHFkYHHa20F4g==\",\"cancellation_requested\":false,\"status\":\"inProgress\",\"status_details\":\"Pending certificate created. Certificate request is in progress. This may take some time based on the issuer provider. Please check again later.\",\"request_id\":\"dfecdbbfe81c4eb5b63b25c90e98620f\"}", + "STATUS_CODE": "200", + "cache-control": "no-cache", + "content-length": "1243", + "content-type": "application/json; charset=utf-8", + "date": "Thu, 07 Oct 2021 23:52:45 GMT", + "expires": "-1", + "pragma": "no-cache", + "retry-after": "10", + "strict-transport-security": "max-age=31536000;includeSubDomains", + "x-content-type-options": "nosniff", + "x-ms-client-request-id": "4352dc35-7a2d-4588-6951-6d996913ffe6", + "x-ms-keyvault-network-info": "conn_type=Ipv4;addr=24.22.157.72;act_addr_fam=InterNetwork;", + "x-ms-keyvault-region": "westus2", + "x-ms-keyvault-service-version": "1.9.132.3", + "x-ms-request-id": "e31f5b11-0aff-457a-bb41-47a2cc38ab96", + "x-powered-by": "ASP.NET" + }, + "Url": "https://REDACTED.vault.azure.net/certificates/updateCertPolicy/pending?api-version=7.2" + }, + { + "Headers": { + "content-type": "application/json", + "user-agent": "azsdk-cpp-keyvault-certificates/4.0.0-beta.1 (Windows 10 Enterprise 6.3 22000 22000.1.amd64fre.co_release.210604-1628)", + "x-ms-client-request-id": "07e73b93-28bd-47de-44a6-18509892e9ef" + }, + "Method": "GET", + "Response": { + "BODY": "{\"id\":\"https://REDACTED.vault.azure.net/certificates/updateCertPolicy/pending\",\"issuer\":{\"name\":\"Self\"},\"csr\":\"MIICfzCCAWcCAQAwDjEMMAoGA1UEAxMDeHl6MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA10feChrRnLp+/sDvxvctiJnrwfL1s7FehGYP7OACZoezhhmaDOIyokd91hqfrGInFbzyI2wpb9GZkLR1Bc94g6wNrb8V2pKIG4ya8s5uWKSpcog6H9eeHzfasYOhqBzQzmT6MsvMYd5FfwItgTXzd3u70T/wXr2joiP0L1YX7xwoVJkUet1w3VHxR6j6z9o5GIIxYn282KiwMC+2j2JhitxitU5ky0NsM92erfFOu9RkHP/QotMDOhV72x6q4vKIjlhT85HTgCDr27Z0ly+XnlV83M/kHb02MdeCEZjYlOw/9LzM9mQwUOCRtp6qo+onyrPymh7WETAA1qqOc7I5WQIDAQABoCwwKgYJKoZIhvcNAQkOMR0wGzAOBgNVHQ8BAf8EBAMCBaAwCQYDVR0TBAIwADANBgkqhkiG9w0BAQsFAAOCAQEAJ/Cf73NH+MzWsti7NWWvsGv8Xfuk/J4Rsr99g0ovPj51weIipct00nbRhbMWdTJ9v0EkRlJw3HPc1VCBWBeLx3ovTd8lT6VV9ZgtxQ7QECAMnoQWe4zBSqJmdphwSdJ7YgZPCU+8iaV1Cjz7X6weoUMJeMcJS6zaMrEru0/V9SA7xC+zeeNMz0S44gQKxIZVQYnRFLhIaobDunWrCgemdp9CgZ9sqHB9C1CuhYncum60aMmHnDpj7+VOvS/Bw7PoHqiNq1Q3MdXwOY2rh36zq7gT5AKtIQVzP52kw8n38tCBANo77Kx6V8FrmpCtTCPJu2ITUBRF1PHFkYHHa20F4g==\",\"cancellation_requested\":false,\"status\":\"completed\",\"target\":\"https://REDACTED.vault.azure.net/certificates/updateCertPolicy\",\"request_id\":\"dfecdbbfe81c4eb5b63b25c90e98620f\"}", + "STATUS_CODE": "200", + "cache-control": "no-cache", + "content-length": "1157", + "content-type": "application/json; charset=utf-8", + "date": "Thu, 07 Oct 2021 23:53:15 GMT", + "expires": "-1", + "pragma": "no-cache", + "strict-transport-security": "max-age=31536000;includeSubDomains", + "x-content-type-options": "nosniff", + "x-ms-client-request-id": "07e73b93-28bd-47de-44a6-18509892e9ef", + "x-ms-keyvault-network-info": "conn_type=Ipv4;addr=24.22.157.72;act_addr_fam=InterNetwork;", + "x-ms-keyvault-region": "westus2", + "x-ms-keyvault-service-version": "1.9.132.3", + "x-ms-request-id": "c409dd13-8995-4576-b014-44337bec4553", + "x-powered-by": "ASP.NET" + }, + "Url": "https://REDACTED.vault.azure.net/certificates/updateCertPolicy/pending?api-version=7.2" + }, + { + "Headers": { + "content-type": "application/json", + "user-agent": "azsdk-cpp-keyvault-certificates/4.0.0-beta.1 (Windows 10 Enterprise 6.3 22000 22000.1.amd64fre.co_release.210604-1628)", + "x-ms-client-request-id": "3e685a23-5dd6-49bf-680b-cb097d6db5b3" + }, + "Method": "GET", + "Response": { + "BODY": "{\"id\":\"https://REDACTED.vault.azure.net/certificates/updateCertPolicy/7f3523cd441f496cba9d0a3527fca05a\",\"kid\":\"https://REDACTED.vault.azure.net/keys/updateCertPolicy/7f3523cd441f496cba9d0a3527fca05a\",\"sid\":\"https://REDACTED.vault.azure.net/secrets/updateCertPolicy/7f3523cd441f496cba9d0a3527fca05a\",\"x5t\":\"lzEsDdhbMSbXRhKacg38rOBZMbo\",\"cer\":\"MIIDAzCCAeugAwIBAgIQNLj07bVAT6m71b37ZGzQuzANBgkqhkiG9w0BAQsFADAOMQwwCgYDVQQDEwN4eXowHhcNMjExMDA3MjM0MjQ2WhcNMjIxMDA3MjM1MjQ2WjAOMQwwCgYDVQQDEwN4eXowggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDXR94KGtGcun7+wO/G9y2ImevB8vWzsV6EZg/s4AJmh7OGGZoM4jKiR33WGp+sYicVvPIjbClv0ZmQtHUFz3iDrA2tvxXakogbjJryzm5YpKlyiDof154fN9qxg6GoHNDOZPoyy8xh3kV/Ai2BNfN3e7vRP/BevaOiI/QvVhfvHChUmRR63XDdUfFHqPrP2jkYgjFifbzYqLAwL7aPYmGK3GK1TmTLQ2wz3Z6t8U671GQc/9Ci0wM6FXvbHqri8oiOWFPzkdOAIOvbtnSXL5eeVXzcz+QdvTYx14IRmNiU7D/0vMz2ZDBQ4JG2nqqj6ifKs/KaHtYRMADWqo5zsjlZAgMBAAGjXTBbMA4GA1UdDwEB/wQEAwIFoDAJBgNVHRMEAjAAMB8GA1UdIwQYMBaAFHUIwJROrvCWRon88Is+DkJB+aoIMB0GA1UdDgQWBBR1CMCUTq7wlkaJ/PCLPg5CQfmqCDANBgkqhkiG9w0BAQsFAAOCAQEAKAtTXDGPQFpRB8JSr2A24yN6tQn18lHWnayrcyr5g9WyaZv8b6rYqkJdOTKcWUUj+6JgTIfo4h1xL0TWvoxIVqt6sw77QxUQSYQLa3EvvTtAe9Wbr9nhRfyUcBHAyvn4lYsEN5m5Gw71KW6yn7811ew/HSuhWsjykypzahTdWaiMiAmEY5te5ocReLIEmtnOKRVhSy59EWssuHmRDFCJAWQxZK1BrZrNRGW9vOcainPl0x07cYB/HAtWuarVK0rVkeVYFw+WBZcyBEl6fzPk6h4Q3eBJkAI0eSAMVrvZWMazO57XZzjT0Y1kIAMIqZfwvlrIz5GUbQDN0lJ7oiVcYA==\",\"attributes\":{\"enabled\":true,\"nbf\":1633650166,\"exp\":1665186766,\"created\":1633650766,\"updated\":1633650766,\"recoveryLevel\":\"Recoverable+Purgeable\",\"recoverableDays\":90},\"tags\":{},\"policy\":{\"id\":\"https://REDACTED.vault.azure.net/certificates/updateCertPolicy/policy\",\"key_props\":{\"exportable\":true,\"kty\":\"RSA\",\"key_size\":2048,\"reuse_key\":false},\"secret_props\":{\"contentType\":\"application/x-pkcs12\"},\"x509_props\":{\"subject\":\"CN=xyz\",\"ekus\":[],\"key_usage\":[\"digitalSignature\",\"keyEncipherment\"],\"validity_months\":12,\"basic_constraints\":{\"ca\":false}},\"lifetime_actions\":[{\"trigger\":{\"lifetime_percentage\":80},\"action\":{\"action_type\":\"AutoRenew\"}}],\"issuer\":{\"name\":\"Self\"},\"attributes\":{\"enabled\":true,\"created\":1633650766,\"updated\":1633650766}},\"pending\":{\"id\":\"https://REDACTED.vault.azure.net/certificates/updateCertPolicy/pending\"}}", + "STATUS_CODE": "200", + "cache-control": "no-cache", + "content-length": "2235", + "content-type": "application/json; charset=utf-8", + "date": "Thu, 07 Oct 2021 23:53:15 GMT", + "expires": "-1", + "pragma": "no-cache", + "strict-transport-security": "max-age=31536000;includeSubDomains", + "x-content-type-options": "nosniff", + "x-ms-client-request-id": "3e685a23-5dd6-49bf-680b-cb097d6db5b3", + "x-ms-keyvault-network-info": "conn_type=Ipv4;addr=24.22.157.72;act_addr_fam=InterNetwork;", + "x-ms-keyvault-region": "westus2", + "x-ms-keyvault-service-version": "1.9.132.3", + "x-ms-request-id": "12d15506-ad53-477b-a723-91206494cc92", + "x-powered-by": "ASP.NET" + }, + "Url": "https://REDACTED.vault.azure.net/certificates/updateCertPolicy?api-version=7.2" + }, + { + "Headers": { + "content-type": "application/json", + "user-agent": "azsdk-cpp-keyvault-certificates/4.0.0-beta.1 (Windows 10 Enterprise 6.3 22000 22000.1.amd64fre.co_release.210604-1628)", + "x-ms-client-request-id": "f6504888-accb-435e-5fcc-10fbac339110" + }, + "Method": "GET", + "Response": { + "BODY": "{\"id\":\"https://REDACTED.vault.azure.net/certificates/updateCertPolicy/policy\",\"key_props\":{\"exportable\":true,\"kty\":\"RSA\",\"key_size\":2048,\"reuse_key\":false},\"secret_props\":{\"contentType\":\"application/x-pkcs12\"},\"x509_props\":{\"subject\":\"CN=xyz\",\"ekus\":[],\"key_usage\":[\"digitalSignature\",\"keyEncipherment\"],\"validity_months\":12,\"basic_constraints\":{\"ca\":false}},\"lifetime_actions\":[{\"trigger\":{\"lifetime_percentage\":80},\"action\":{\"action_type\":\"AutoRenew\"}}],\"issuer\":{\"name\":\"Self\"},\"attributes\":{\"enabled\":true,\"created\":1633650766,\"updated\":1633650766}}", + "STATUS_CODE": "200", + "cache-control": "no-cache", + "content-length": "558", + "content-type": "application/json; charset=utf-8", + "date": "Thu, 07 Oct 2021 23:53:15 GMT", + "expires": "-1", + "pragma": "no-cache", + "strict-transport-security": "max-age=31536000;includeSubDomains", + "x-content-type-options": "nosniff", + "x-ms-client-request-id": "f6504888-accb-435e-5fcc-10fbac339110", + "x-ms-keyvault-network-info": "conn_type=Ipv4;addr=24.22.157.72;act_addr_fam=InterNetwork;", + "x-ms-keyvault-region": "westus2", + "x-ms-keyvault-service-version": "1.9.132.3", + "x-ms-request-id": "6ea2d89b-6d90-44c6-93d5-14188b664b86", + "x-powered-by": "ASP.NET" + }, + "Url": "https://REDACTED.vault.azure.net/certificates/updateCertPolicy/policy?api-version=7.2" + }, + { + "Headers": { + "content-type": "application/json", + "user-agent": "azsdk-cpp-keyvault-certificates/4.0.0-beta.1 (Windows 10 Enterprise 6.3 22000 22000.1.amd64fre.co_release.210604-1628)", + "x-ms-client-request-id": "c8ee753f-2f37-4428-765d-07c924ac668c" + }, + "Method": "PATCH", + "Response": { + "BODY": "{\"id\":\"https://REDACTED.vault.azure.net/certificates/updateCertPolicy/policy\",\"key_props\":{\"exportable\":true,\"kty\":\"RSA\",\"key_size\":2048,\"reuse_key\":false},\"secret_props\":{\"contentType\":\"application/x-pkcs12\"},\"x509_props\":{\"subject\":\"CN=twa\",\"ekus\":[],\"key_usage\":[\"digitalSignature\",\"keyEncipherment\"],\"validity_months\":8,\"basic_constraints\":{\"ca\":false}},\"lifetime_actions\":[{\"trigger\":{\"lifetime_percentage\":80},\"action\":{\"action_type\":\"AutoRenew\"}}],\"issuer\":{\"name\":\"Self\"},\"attributes\":{\"enabled\":true,\"created\":1633650766,\"updated\":1633650805}}", + "STATUS_CODE": "200", + "cache-control": "no-cache", + "content-length": "557", + "content-type": "application/json; charset=utf-8", + "date": "Thu, 07 Oct 2021 23:53:25 GMT", + "expires": "-1", + "pragma": "no-cache", + "strict-transport-security": "max-age=31536000;includeSubDomains", + "x-content-type-options": "nosniff", + "x-ms-client-request-id": "c8ee753f-2f37-4428-765d-07c924ac668c", + "x-ms-keyvault-network-info": "conn_type=Ipv4;addr=24.22.157.72;act_addr_fam=InterNetwork;", + "x-ms-keyvault-region": "westus2", + "x-ms-keyvault-service-version": "1.9.132.3", + "x-ms-request-id": "18d54dd3-8d9f-4634-9ef0-1fdc2f1246e4", + "x-powered-by": "ASP.NET" + }, + "Url": "https://REDACTED.vault.azure.net/certificates/updateCertPolicy/policy?api-version=7.2" + } + ] +}