diff --git a/quic/core/quic_types.cc b/quic/core/quic_types.cc
index 351cd10..c0bdf1e 100644
--- a/quic/core/quic_types.cc
+++ b/quic/core/quic_types.cc
@@ -6,6 +6,7 @@
 
 #include <cstdint>
 
+#include "third_party/boringssl/src/include/openssl/ssl.h"
 #include "net/third_party/quiche/src/quic/core/quic_error_codes.h"
 #include "net/third_party/quiche/src/common/platform/api/quiche_str_cat.h"
 
@@ -79,8 +80,25 @@
     return #x;
 
 std::string QuicIetfTransportErrorCodeString(QuicIetfTransportErrorCodes c) {
-  if (static_cast<uint16_t>(c) >= 0xff00u) {
-    return quiche::QuicheStrCat("Private value: ", static_cast<uint16_t>(c));
+  if (static_cast<uint64_t>(c) >= 0xff00u) {
+    return quiche::QuicheStrCat("Private(", static_cast<uint64_t>(c), ")");
+  }
+  if (c >= CRYPTO_ERROR_FIRST && c <= CRYPTO_ERROR_LAST) {
+    const int tls_error = static_cast<int>(c - CRYPTO_ERROR_FIRST);
+    const char* tls_error_description = SSL_alert_desc_string_long(tls_error);
+    if (strcmp("unknown", tls_error_description) != 0) {
+      return quiche::QuicheStrCat("CRYPTO_ERROR(", tls_error_description, ")");
+    }
+    // SSL_alert_desc_string_long doesn't currently support these two errors.
+    // TODO(dschinazi) remove this once BoringSSL supports them.
+    // https://boringssl-review.googlesource.com/c/boringssl/+/39784
+    if (tls_error == SSL_AD_MISSING_EXTENSION) {
+      return "CRYPTO_ERROR(missing extension)";
+    }
+    if (tls_error == 120) {
+      return "CRYPTO_ERROR(no application protocol)";
+    }
+    return quiche::QuicheStrCat("CRYPTO_ERROR(unknown(", tls_error, "))");
   }
 
   switch (c) {
@@ -93,13 +111,19 @@
     RETURN_STRING_LITERAL(FINAL_SIZE_ERROR);
     RETURN_STRING_LITERAL(FRAME_ENCODING_ERROR);
     RETURN_STRING_LITERAL(TRANSPORT_PARAMETER_ERROR);
-    RETURN_STRING_LITERAL(VERSION_NEGOTIATION_ERROR);
+    RETURN_STRING_LITERAL(CONNECTION_ID_LIMIT_ERROR);
     RETURN_STRING_LITERAL(PROTOCOL_VIOLATION);
-    RETURN_STRING_LITERAL(INVALID_MIGRATION);
-    default:
-      return quiche::QuicheStrCat("Unknown Transport Error Code Value: ",
-                                  static_cast<uint16_t>(c));
+    RETURN_STRING_LITERAL(INVALID_TOKEN);
+    RETURN_STRING_LITERAL(CRYPTO_BUFFER_EXCEEDED);
+    // CRYPTO_ERROR is handled in the if before this switch, these cases do not
+    // change behavior and are only here to make the compiler happy.
+    case CRYPTO_ERROR_FIRST:
+    case CRYPTO_ERROR_LAST:
+      DCHECK(false) << "Unexpected error " << static_cast<uint64_t>(c);
+      break;
   }
+
+  return quiche::QuicheStrCat("Unknown(", static_cast<uint64_t>(c), ")");
 }
 
 std::ostream& operator<<(std::ostream& os,
diff --git a/quic/core/quic_types.h b/quic/core/quic_types.h
index f149ed3..e027b7b 100644
--- a/quic/core/quic_types.h
+++ b/quic/core/quic_types.h
@@ -562,9 +562,12 @@
   FINAL_SIZE_ERROR = 0x6,
   FRAME_ENCODING_ERROR = 0x7,
   TRANSPORT_PARAMETER_ERROR = 0x8,
-  VERSION_NEGOTIATION_ERROR = 0x9,
+  CONNECTION_ID_LIMIT_ERROR = 0x9,
   PROTOCOL_VIOLATION = 0xA,
-  INVALID_MIGRATION = 0xC,
+  INVALID_TOKEN = 0xB,
+  CRYPTO_BUFFER_EXCEEDED = 0xD,
+  CRYPTO_ERROR_FIRST = 0x100,
+  CRYPTO_ERROR_LAST = 0x1FF,
 };
 QUIC_EXPORT_PRIVATE std::string QuicIetfTransportErrorCodeString(
     QuicIetfTransportErrorCodes c);
diff --git a/quic/core/quic_types_test.cc b/quic/core/quic_types_test.cc
index d238c78..63ebdb0 100644
--- a/quic/core/quic_types_test.cc
+++ b/quic/core/quic_types_test.cc
@@ -6,6 +6,7 @@
 
 #include <cstdint>
 
+#include "net/third_party/quiche/src/quic/core/quic_error_codes.h"
 #include "net/third_party/quiche/src/quic/platform/api/quic_test.h"
 #include "net/third_party/quiche/src/common/platform/api/quiche_str_cat.h"
 
@@ -17,7 +18,7 @@
 
 TEST_F(QuicTypesTest, QuicIetfTransportErrorCodeString) {
   // QuicIetfTransportErrorCode out of bound.
-  for (quic::QuicErrorCode error = quic::QUIC_ENCRYPTION_FAILURE;
+  for (quic::QuicErrorCode error = quic::QUIC_PACKET_TOO_LARGE;
        error < quic::QUIC_LAST_ERROR;
        error = static_cast<quic::QuicErrorCode>(error + 1)) {
     QuicErrorCodeToIetfMapping mapping =
@@ -25,8 +26,10 @@
     if (mapping.is_transport_close_) {
       EXPECT_EQ(QuicIetfTransportErrorCodeString(mapping.transport_error_code_),
                 quiche::QuicheStrCat(
-                    "Unknown Transport Error Code Value: ",
-                    static_cast<uint16_t>(mapping.transport_error_code_)));
+                    "Unknown(",
+                    static_cast<uint64_t>(mapping.transport_error_code_), ")"))
+          << " " << static_cast<uint64_t>(error) << " "
+          << QuicErrorCodeToString(error);
     }
   }
 }
diff --git a/quic/tools/quic_client_interop_test_bin.cc b/quic/tools/quic_client_interop_test_bin.cc
index 9742d63..03d32a5 100644
--- a/quic/tools/quic_client_interop_test_bin.cc
+++ b/quic/tools/quic_client_interop_test_bin.cc
@@ -106,11 +106,18 @@
       case IETF_QUIC_TRANSPORT_CONNECTION_CLOSE:
         if (frame.transport_error_code == NO_IETF_QUIC_ERROR) {
           InsertFeature(Feature::kConnectionClose);
+        } else {
+          QUIC_LOG(ERROR) << "Received transport connection close "
+                          << QuicIetfTransportErrorCodeString(
+                                 frame.transport_error_code);
         }
         break;
       case IETF_QUIC_APPLICATION_CONNECTION_CLOSE:
         if (frame.application_error_code == 0) {
           InsertFeature(Feature::kConnectionClose);
+        } else {
+          QUIC_LOG(ERROR) << "Received application connection close "
+                          << frame.application_error_code;
         }
         break;
     }
