diff --git a/sq/src/commands/key.rs b/sq/src/commands/key.rs
index b132adf4..0dd1a910 100644
--- a/sq/src/commands/key.rs
+++ b/sq/src/commands/key.rs
@@ -8,7 +8,7 @@ use crate::openpgp::Result;
 use crate::openpgp::armor::{Writer, Kind};
 use crate::openpgp::cert::prelude::*;
 use crate::openpgp::packet::prelude::*;
-use crate::openpgp::packet::signature::subpacket::SubpacketTag;
+use crate::openpgp::packet::signature::subpacket::{SubpacketTag, SubpacketValue};
 use crate::openpgp::parse::Parse;
 use crate::openpgp::policy::{Policy, HashAlgoSecurity};
 use crate::openpgp::serialize::Serialize;
@@ -33,6 +33,7 @@ use crate::sq_cli::KeyUseridStripCommand;
 use crate::sq_cli::KeyExtractCertCommand;
 use crate::sq_cli::KeyAdoptCommand;
 use crate::sq_cli::KeyAttestCertificationsCommand;
+use crate::sq_cli::KeyListAttestationsCommand;
 use crate::sq_cli::KeySubcommands::*;
 
 pub fn dispatch(config: Config, command: KeyCommand) -> Result<()> {
@@ -43,6 +44,7 @@ pub fn dispatch(config: Config, command: KeyCommand) -> Result<()> {
         ExtractCert(c) => extract_cert(config, c)?,
         Adopt(c) => adopt(config, c)?,
         AttestCertifications(c) => attest_certifications(config, c)?,
+        ListAttestations(c) => list_attestations(config, c)?,
     }
     Ok(())
 }
@@ -714,6 +716,53 @@ fn adopt(config: Config, command: KeyAdoptCommand) -> Result<()> {
     Ok(())
 }
 
+fn list_attestations(config: Config,  command: KeyListAttestationsCommand)
+                     -> Result<()> {
+    let input = open_or_stdin(command.key.as_deref())?;
+    let key = Cert::from_reader(input)?;
+    let fpr = key.fingerprint();
+    let creation_time = std::time::SystemTime::now();
+    // From the packets that make up the key, pick only those with
+    // valid crypto, and which mke sense at this particular time
+    let valid_cert = key.with_policy(&config.policy, creation_time)?;
+
+    let mut num_attested = 0;
+    let mut att_certs: Vec<String> = Vec::new();
+    for uid in valid_cert.userids() {
+        for att in uid.attested_certifications() {
+            // Attested cetifications make sense currently only in V4
+            // signatures.
+            if let Signature::V4(v4) = att {
+                let hashed = v4.hashed_area();
+                for subpacket in hashed {
+                    // We want to report the fingerprint of the
+                    // certificate issuer that's being attested
+                    match subpacket.value() {
+                        SubpacketValue::IssuerFingerprint(fp) => {
+                            num_attested += 1;
+                            att_certs.push(fp.to_string());
+                        }
+                        _ => {}
+                    }
+                }
+            }
+        }
+    }
+
+    if num_attested == 0 {
+        println!("{} certifications attested for key {}.", num_attested, fpr);
+    } else if num_attested == 1 {
+        println!("{} certification attested for key {}:", num_attested, fpr);
+    } else {
+        println!("{} certifications attested for key {}:", num_attested, fpr);
+    }
+    for att in att_certs {
+        println!("  {}", att);
+    }
+
+    Ok(())
+}
+
 fn attest_certifications(config: Config, command: KeyAttestCertificationsCommand)
                          -> Result<()> {
     // Attest to all certifications?
diff --git a/sq/src/sq-usage.rs b/sq/src/sq-usage.rs
index 186cd0f7..5053da7f 100644
--- a/sq/src/sq-usage.rs
+++ b/sq/src/sq-usage.rs
@@ -393,6 +393,8 @@
 //!             Converts a key to a cert
 //!     attest-certifications
 //!             Attests to third-party certifications
+//!     list-attestations
+//!             List certification attestations
 //!     adopt
 //!             Binds keys from one certificate to another
 //!     help
@@ -767,6 +769,30 @@
 //! $ sq key attest-certifications --none juliet.pgp
 //! ```
 //!
+//! ### Subcommand key list-attestations
+//!
+//! ```text
+//!
+//! Present a list of attestations present in the certification.
+//!
+//! USAGE:
+//!     sq key list-attestations [KEY]
+//!
+//! ARGS:
+//!     <KEY>
+//!             Lists attestations on KEY
+//!
+//! OPTIONS:
+//!     -h, --help
+//!             Print help information
+//!
+//!
+//! EXAMPLES:
+//!
+//! # Shows all the attestations present on the key
+//! $ sq key list-attestations juliet.pgp
+//! ```
+//!
 //! ### Subcommand key adopt
 //!
 //! ```text
diff --git a/sq/src/sq_cli.rs b/sq/src/sq_cli.rs
index f477e9d9..1a46ff43 100644
--- a/sq/src/sq_cli.rs
+++ b/sq/src/sq_cli.rs
@@ -1741,6 +1741,7 @@ pub enum KeySubcommands {
     ExtractCert(KeyExtractCertCommand),
     Adopt(KeyAdoptCommand),
     AttestCertifications(KeyAttestCertificationsCommand),
+    ListAttestations(KeyListAttestationsCommand),
 }
 
 #[derive(Debug, Args)]
@@ -2267,6 +2268,31 @@ pub struct KeyAttestCertificationsCommand {
 
 }
 
+#[derive(Debug, Args)]
+#[clap(
+    name = "list-attestations",
+    display_order = 210,
+    about = "List certification attestations",
+    long_about =
+"
+Present a list of attestations present in the certification.
+",
+    after_help =
+"
+EXAMPLES:
+
+# Shows all the attestations present on the key
+$ sq key list-attestations juliet.pgp
+",
+)]
+pub struct KeyListAttestationsCommand {
+    #[clap(
+        value_name = "KEY",
+        help = "Lists attestations on KEY"
+    )]
+    pub key: Option<String>,
+}
+
 #[derive(Parser, Debug)]
 #[clap(
     name = "wkd",
