in cpp/example_code/acm/acm_basic_operations.cpp [167:689]
bool AwsDoc::ACM::DescribeCertificate(const Aws::String& certificateArn,
const Aws::String& region)
{
Aws::Client::ClientConfiguration config;
config.region = region;
Aws::ACM::ACMClient acm_client(config);
Aws::ACM::Model::DescribeCertificateRequest request;
request.WithCertificateArn(certificateArn);
Aws::ACM::Model::DescribeCertificateOutcome outcome =
acm_client.DescribeCertificate(request);
if (!outcome.IsSuccess())
{
std::cout << "Error: DescribeCertificate: " <<
outcome.GetError().GetMessage() << std::endl;
return false;
}
else
{
Aws::ACM::Model::CertificateDetail certificate =
outcome.GetResult().GetCertificate();
std::cout << "Success: Information about certificate "
"with ARN '" << certificateArn << "':" << std::endl << std::endl;
std::cout << "ARN: " << certificate.GetCertificateArn()
<< std::endl;
std::cout << "Authority ARN: " <<
certificate.GetCertificateAuthorityArn() << std::endl;
std::cout << "Created at (GMT): " <<
certificate.GetCreatedAt().ToGmtString(Aws::Utils::DateFormat::ISO_8601)
<< std::endl;
std::cout << "Domain name: " << certificate.GetDomainName()
<< std::endl;
Aws::Vector<Aws::ACM::Model::DomainValidation> options =
certificate.GetDomainValidationOptions();
if (options.size() > 0)
{
std::cout << std::endl << "Domain validation information: "
<< std::endl << std::endl;
for (auto it = options.begin(); it != options.end(); it++)
{
Aws::ACM::Model::DomainValidation validation = *it;
std::cout << " Domain name: " <<
validation.GetDomainName() << std::endl;
Aws::ACM::Model::ResourceRecord record =
validation.GetResourceRecord();
std::cout << " Resource record name: " <<
record.GetName() << std::endl;
Aws::ACM::Model::RecordType record_type = record.GetType();
Aws::String type;
switch (record_type)
{
case Aws::ACM::Model::RecordType::CNAME:
type = "CNAME";
break;
case Aws::ACM::Model::RecordType::NOT_SET:
type = "Not set";
break;
default:
type = "Cannot determine.";
break;
}
std::cout << " Resource record type: " << type <<
std::endl;
std::cout << " Resource record value: " <<
record.GetValue() << std::endl;
std::cout << " Validation domain: " <<
validation.GetValidationDomain() << std::endl;
Aws::Vector<Aws::String> emails =
validation.GetValidationEmails();
if (emails.size() > 0)
{
std::cout << " Validation emails:" << std::endl <<
std::endl;
for (auto it = emails.begin(); it != emails.end(); it++)
{
Aws::String email = *it;
std::cout << " " << email << std::endl;
}
std::cout << std::endl;
}
Aws::ACM::Model::ValidationMethod validation_method =
validation.GetValidationMethod();
Aws::String method;
switch (validation_method)
{
case Aws::ACM::Model::ValidationMethod::DNS:
method = "DNS";
break;
case Aws::ACM::Model::ValidationMethod::EMAIL:
method = "Email";
break;
case Aws::ACM::Model::ValidationMethod::NOT_SET:
method = "Not set";
break;
default:
method = "Cannot determine";
}
std::cout << " Validation method: " <<
method << std::endl;
Aws::ACM::Model::DomainStatus domain_status =
validation.GetValidationStatus();
Aws::String status;
switch (domain_status)
{
case Aws::ACM::Model::DomainStatus::FAILED:
status = "Failed";
break;
case Aws::ACM::Model::DomainStatus::NOT_SET:
status = "Not set";
break;
case Aws::ACM::Model::DomainStatus::PENDING_VALIDATION:
status = "Pending validation";
break;
case Aws::ACM::Model::DomainStatus::SUCCESS:
status = "Success";
break;
default:
status = "Cannot determine";
}
std::cout << " Domain validation status: " << status <<
std::endl << std::endl;
}
}
Aws::Vector<Aws::ACM::Model::ExtendedKeyUsage> usages =
certificate.GetExtendedKeyUsages();
if (usages.size() > 0)
{
std::cout << std::endl << "Extended key usages:" <<
std::endl << std::endl;
for (auto it = usages.begin(); it != usages.end(); it++)
{
Aws::ACM::Model::ExtendedKeyUsage usage = *it;
Aws::ACM::Model::ExtendedKeyUsageName usage_name =
usage.GetName();
Aws::String name;
switch (usage_name)
{
case Aws::ACM::Model::ExtendedKeyUsageName::ANY:
name = "Any";
break;
case Aws::ACM::Model::ExtendedKeyUsageName::CODE_SIGNING:
name = "Code signing";
break;
case Aws::ACM::Model::ExtendedKeyUsageName::CUSTOM:
name = "Custom";
break;
case Aws::ACM::Model::ExtendedKeyUsageName::EMAIL_PROTECTION:
name = "Email protection";
break;
case Aws::ACM::Model::ExtendedKeyUsageName::IPSEC_END_SYSTEM:
name = "IPSEC end system";
break;
case Aws::ACM::Model::ExtendedKeyUsageName::IPSEC_TUNNEL:
name = "IPSEC tunnel";
break;
case Aws::ACM::Model::ExtendedKeyUsageName::IPSEC_USER:
name = "IPSEC user";
break;
case Aws::ACM::Model::ExtendedKeyUsageName::NONE:
name = "None";
break;
case Aws::ACM::Model::ExtendedKeyUsageName::NOT_SET:
name = "Not set";
break;
case Aws::ACM::Model::ExtendedKeyUsageName::OCSP_SIGNING:
name = "OCSP signing";
break;
case Aws::ACM::Model::ExtendedKeyUsageName::TIME_STAMPING:
name = "Time stamping";
break;
case Aws::ACM::Model::ExtendedKeyUsageName::TLS_WEB_CLIENT_AUTHENTICATION:
name = "TLS web client authentication";
break;
case Aws::ACM::Model::ExtendedKeyUsageName::TLS_WEB_SERVER_AUTHENTICATION:
name = "TLS web server authentication";
break;
default:
name = "Cannot determine";
}
std::cout << " Name: " << name << std::endl;
std::cout << " OID: " << usage.GetOID() <<
std::endl << std::endl;
}
std::cout << std::endl;
}
Aws::ACM::Model::CertificateStatus certificate_status =
certificate.GetStatus();
Aws::String status;
switch (certificate_status)
{
case Aws::ACM::Model::CertificateStatus::EXPIRED:
status = "Expired";
break;
case Aws::ACM::Model::CertificateStatus::FAILED:
status = "Failed";
break;
case Aws::ACM::Model::CertificateStatus::INACTIVE:
status = "Inactive";
break;
case Aws::ACM::Model::CertificateStatus::ISSUED:
status = "Issued";
break;
case Aws::ACM::Model::CertificateStatus::NOT_SET:
status = "Not set";
break;
case Aws::ACM::Model::CertificateStatus::PENDING_VALIDATION:
status = "Pending validation";
break;
case Aws::ACM::Model::CertificateStatus::REVOKED:
status = "Revoked";
break;
case Aws::ACM::Model::CertificateStatus::VALIDATION_TIMED_OUT:
status = "Validation timed out";
break;
default:
status = "Cannot determine";
}
std::cout << "Status: " << status << std::endl;
if (certificate.GetStatus() ==
Aws::ACM::Model::CertificateStatus::FAILED)
{
Aws::ACM::Model::FailureReason failure_reason =
certificate.GetFailureReason();
Aws::String reason;
switch (failure_reason)
{
case Aws::ACM::Model::FailureReason::ADDITIONAL_VERIFICATION_REQUIRED:
reason = "Additional verification required";
break;
case Aws::ACM::Model::FailureReason::CAA_ERROR:
reason = "CAA error";
break;
case Aws::ACM::Model::FailureReason::DOMAIN_NOT_ALLOWED:
reason = "Domain not allowed";
break;
case Aws::ACM::Model::FailureReason::DOMAIN_VALIDATION_DENIED:
reason = "Domain validation denied";
break;
case Aws::ACM::Model::FailureReason::INVALID_PUBLIC_DOMAIN:
reason = "Invalid public domain";
break;
case Aws::ACM::Model::FailureReason::NOT_SET:
reason = "Not set";
break;
case Aws::ACM::Model::FailureReason::NO_AVAILABLE_CONTACTS:
reason = "No available contacts";
break;
case Aws::ACM::Model::FailureReason::OTHER:
reason = "Other";
break;
case Aws::ACM::Model::FailureReason::PCA_ACCESS_DENIED:
reason = "PCA access denied";
break;
case Aws::ACM::Model::FailureReason::PCA_INVALID_ARGS:
reason = "PCA invalid args";
break;
case Aws::ACM::Model::FailureReason::PCA_INVALID_ARN:
reason = "PCA invalid ARN";
break;
case Aws::ACM::Model::FailureReason::PCA_INVALID_DURATION:
reason = "PCA invalid duration";
break;
case Aws::ACM::Model::FailureReason::PCA_INVALID_STATE:
reason = "PCA invalid state";
break;
case Aws::ACM::Model::FailureReason::PCA_LIMIT_EXCEEDED:
reason = "PCA limit exceeded";
break;
case Aws::ACM::Model::FailureReason::PCA_NAME_CONSTRAINTS_VALIDATION:
reason = "PCA name constraints validation";
break;
case Aws::ACM::Model::FailureReason::PCA_REQUEST_FAILED:
reason = "PCA request failed";
break;
case Aws::ACM::Model::FailureReason::PCA_RESOURCE_NOT_FOUND:
reason = "PCA resource not found";
break;
default:
reason = "Cannot determine";
}
std::cout << "Failure reason: " << reason << std::endl;
}
if (certificate.GetStatus() == Aws::ACM::Model::CertificateStatus::REVOKED)
{
std::cout << "Revoked at (GMT): " <<
certificate.GetRevokedAt().ToGmtString(Aws::Utils::DateFormat::ISO_8601)
<< std::endl;
Aws::ACM::Model::RevocationReason revocation_reason =
certificate.GetRevocationReason();
Aws::String reason;
switch (revocation_reason)
{
case Aws::ACM::Model::RevocationReason::AFFILIATION_CHANGED:
reason = "Affiliation changed";
break;
case Aws::ACM::Model::RevocationReason::A_A_COMPROMISE:
reason = "AA compromise";
break;
case Aws::ACM::Model::RevocationReason::CA_COMPROMISE:
reason = "CA compromise";
break;
case Aws::ACM::Model::RevocationReason::CERTIFICATE_HOLD:
reason = "Certificate hold";
break;
case Aws::ACM::Model::RevocationReason::CESSATION_OF_OPERATION:
reason = "Cessation of operation";
break;
case Aws::ACM::Model::RevocationReason::KEY_COMPROMISE:
reason = "Key compromise";
break;
case Aws::ACM::Model::RevocationReason::NOT_SET:
reason = "Not set";
break;
case Aws::ACM::Model::RevocationReason::PRIVILEGE_WITHDRAWN:
reason = "Privilege withdrawn";
break;
case Aws::ACM::Model::RevocationReason::REMOVE_FROM_CRL:
reason = "Revoke from CRL";
break;
case Aws::ACM::Model::RevocationReason::SUPERCEDED:
reason = "Superceded";
break;
case Aws::ACM::Model::RevocationReason::UNSPECIFIED:
reason = "Unspecified";
break;
default:
reason = "Cannot determine";
}
std::cout << "Revocation reason: " << reason << std::endl;
}
if (certificate.GetType() == Aws::ACM::Model::CertificateType::IMPORTED)
{
std::cout << "Imported at (GMT): " <<
certificate.GetImportedAt().ToGmtString(Aws::Utils::DateFormat::ISO_8601)
<< std::endl;
}
Aws::Vector<Aws::String> in_use_bys = certificate.GetInUseBy();
if (in_use_bys.size() > 0)
{
std::cout << std::endl << "In use by:" << std::endl << std::endl;
for (auto it = in_use_bys.begin(); it != in_use_bys.end(); it++)
{
Aws::String in_use_by = *it;
std::cout << " " << in_use_by << std::endl;
}
std::cout << std::endl;
}
if (certificate.GetType() == Aws::ACM::Model::CertificateType::AMAZON_ISSUED &&
certificate.GetStatus() == Aws::ACM::Model::CertificateStatus::ISSUED)
{
std::cout << "Issued at (GMT): " <<
certificate.GetIssuedAt().ToGmtString(Aws::Utils::DateFormat::ISO_8601)
<< std::endl;
}
std::cout << "Issuer: " << certificate.GetIssuer() <<
std::endl;
Aws::ACM::Model::KeyAlgorithm key_algorithm =
certificate.GetKeyAlgorithm();
Aws::String algorithm;
switch (key_algorithm)
{
case Aws::ACM::Model::KeyAlgorithm::EC_prime256v1:
algorithm = "P-256 (secp256r1, prime256v1)";
break;
case Aws::ACM::Model::KeyAlgorithm::EC_secp384r1:
algorithm = "P-384 (secp384r1)";
break;
case Aws::ACM::Model::KeyAlgorithm::EC_secp521r1:
algorithm = "P-521 (secp521r1)";
break;
case Aws::ACM::Model::KeyAlgorithm::NOT_SET:
algorithm = "Not set";
break;
case Aws::ACM::Model::KeyAlgorithm::RSA_1024:
algorithm = "RSA 1024";
break;
case Aws::ACM::Model::KeyAlgorithm::RSA_2048:
algorithm = "RSA 2048";
break;
case Aws::ACM::Model::KeyAlgorithm::RSA_4096:
algorithm = "RSA 4096";
break;
default:
algorithm = "Cannot determine";
}
std::cout << "Key algorithm: " << algorithm << std::endl;
if (certificate.GetStatus() == Aws::ACM::Model::CertificateStatus::ISSUED)
{
std::cout << "Not valid after (GMT): " <<
certificate.GetNotAfter().ToGmtString(Aws::Utils::DateFormat::ISO_8601)
<< std::endl;
std::cout << "Not valid before (GMT): " <<
certificate.GetNotBefore().ToGmtString(Aws::Utils::DateFormat::ISO_8601)
<< std::endl;
}
Aws::ACM::Model::CertificateTransparencyLoggingPreference logging_preference =
certificate.GetOptions().GetCertificateTransparencyLoggingPreference();
Aws::String preference;
switch (logging_preference)
{
case Aws::ACM::Model::CertificateTransparencyLoggingPreference::DISABLED:
preference = "Disabled";
break;
case Aws::ACM::Model::CertificateTransparencyLoggingPreference::ENABLED:
preference = "Enabled";
break;
case Aws::ACM::Model::CertificateTransparencyLoggingPreference::NOT_SET:
preference = "Not set";
break;
default:
preference = "Cannot determine";
}
std::cout << "Logging preference: " << preference << std::endl;
std::cout << "Serial: " << certificate.GetSerial() <<
std::endl;
std::cout << "Signature algorithm: "
<< certificate.GetSignatureAlgorithm() << std::endl;
std::cout << "Subject: " << certificate.GetSubject() <<
std::endl;
Aws::ACM::Model::CertificateType certificate_type = certificate.GetType();
Aws::String type;
switch (certificate_type)
{
case Aws::ACM::Model::CertificateType::AMAZON_ISSUED:
type = "Amazon issued";
break;
case Aws::ACM::Model::CertificateType::IMPORTED:
type = "Imported";
break;
case Aws::ACM::Model::CertificateType::NOT_SET:
type = "Not set";
break;
case Aws::ACM::Model::CertificateType::PRIVATE_:
type = "Private";
break;
default:
type = "Cannot determine";
}
std::cout << "Type: " << type << std::endl;
Aws::Vector<Aws::String> alt_names =
certificate.GetSubjectAlternativeNames();
if (alt_names.size() > 0)
{
std::cout << std::endl << "Alternative names:" <<
std::endl << std::endl;
for (auto it = alt_names.begin(); it != alt_names.end(); it++)
{
Aws::String alt_name = *it;
std::cout << " " << alt_name << std::endl;
}
std::cout << std::endl;
}
return true;
}
}