diff --git a/quic/core/quic_flags_list.h b/quic/core/quic_flags_list.h
index 27f00e2..0ac25a2 100644
--- a/quic/core/quic_flags_list.h
+++ b/quic/core/quic_flags_list.h
@@ -57,7 +57,6 @@
 QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_start_peer_migration_earlier, true)
 QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_testonly_default_false, false)
 QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_testonly_default_true, true)
-QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_tls_use_early_select_cert, true)
 QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_tls_use_per_handshaker_proof_source, false)
 QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_unified_iw_options, false)
 QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_update_packet_content_returns_connected, false)
diff --git a/quic/core/tls_server_handshaker.cc b/quic/core/tls_server_handshaker.cc
index f1a2d86..db04545 100644
--- a/quic/core/tls_server_handshaker.cc
+++ b/quic/core/tls_server_handshaker.cc
@@ -385,24 +385,19 @@
   TransportParameters client_params;
   const uint8_t* client_params_bytes;
   size_t params_bytes_len;
-  if (use_early_select_cert_) {
-    // Make sure we use the right TLS extension codepoint.
-    uint16_t extension_type = TLSEXT_TYPE_quic_transport_parameters_standard;
-    if (session()->version().UsesLegacyTlsExtension()) {
-      extension_type = TLSEXT_TYPE_quic_transport_parameters_legacy;
-    }
-    // When using early select cert callback, SSL_get_peer_quic_transport_params
-    // can not be used to retrieve the client's transport parameters, but we can
-    // use SSL_early_callback_ctx_extension_get to do that.
-    if (!SSL_early_callback_ctx_extension_get(client_hello, extension_type,
-                                              &client_params_bytes,
-                                              &params_bytes_len)) {
-      params_bytes_len = 0;
-    }
-  } else {
-    QUICHE_DCHECK_EQ(client_hello, nullptr);
-    SSL_get_peer_quic_transport_params(ssl(), &client_params_bytes,
-                                       &params_bytes_len);
+
+  // Make sure we use the right TLS extension codepoint.
+  uint16_t extension_type = TLSEXT_TYPE_quic_transport_parameters_standard;
+  if (session()->version().UsesLegacyTlsExtension()) {
+    extension_type = TLSEXT_TYPE_quic_transport_parameters_legacy;
+  }
+  // When using early select cert callback, SSL_get_peer_quic_transport_params
+  // can not be used to retrieve the client's transport parameters, but we can
+  // use SSL_early_callback_ctx_extension_get to do that.
+  if (!SSL_early_callback_ctx_extension_get(client_hello, extension_type,
+                                            &client_params_bytes,
+                                            &params_bytes_len)) {
+    params_bytes_len = 0;
   }
 
   if (params_bytes_len == 0) {
@@ -729,12 +724,6 @@
 
 ssl_select_cert_result_t TlsServerHandshaker::EarlySelectCertCallback(
     const SSL_CLIENT_HELLO* client_hello) {
-  if (!use_early_select_cert_) {
-    return ssl_select_cert_success;
-  }
-
-  QUIC_RELOADABLE_FLAG_COUNT(quic_tls_use_early_select_cert);
-
   // EarlySelectCertCallback can be called twice from BoringSSL: If the first
   // call returns ssl_select_cert_retry, when cert selection completes,
   // SSL_do_handshake will call it again.
@@ -880,57 +869,9 @@
   return true;
 }
 
-int TlsServerHandshaker::TlsExtServernameCallback(int* out_alert) {
-  if (use_early_select_cert_) {
-    return SSL_TLSEXT_ERR_OK;
-  }
-
-  const char* hostname = SSL_get_servername(ssl(), TLSEXT_NAMETYPE_host_name);
-  if (hostname) {
-    hostname_ = hostname;
-    crypto_negotiated_params_->sni =
-        QuicHostnameUtils::NormalizeHostname(hostname_);
-    if (!ValidateHostname(hostname_)) {
-      return SSL_TLSEXT_ERR_ALERT_FATAL;
-    }
-  } else {
-    QUIC_LOG(INFO) << "No hostname indicated in SNI";
-  }
-
-  QuicReferenceCountedPointer<ProofSource::Chain> chain =
-      proof_source_->GetCertChain(session()->connection()->self_address(),
-                                  session()->connection()->peer_address(),
-                                  hostname_);
-  if (!chain || chain->certs.empty()) {
-    QUIC_LOG(ERROR) << "No certs provided for host '" << hostname_ << "'";
-    return SSL_TLSEXT_ERR_ALERT_FATAL;
-  }
-
-  if (!pre_shared_key_.empty()) {
-    // TODO(b/154162689) add PSK support to QUIC+TLS.
-    QUIC_BUG << "QUIC server pre-shared keys not yet supported with TLS";
-    return SSL_TLSEXT_ERR_ALERT_FATAL;
-  }
-
-  CryptoBuffers cert_buffers = chain->ToCryptoBuffers();
-  tls_connection_.SetCertChain(cert_buffers.value);
-
-  std::string error_details;
-  if (!ProcessTransportParameters(nullptr, &error_details)) {
-    CloseConnection(QUIC_HANDSHAKE_FAILED, error_details);
-    *out_alert = SSL_AD_INTERNAL_ERROR;
-    return SSL_TLSEXT_ERR_ALERT_FATAL;
-  }
-  OverrideQuicConfigDefaults(session()->config());
-  session()->OnConfigNegotiated();
-
-  if (!SetTransportParameters().success) {
-    QUIC_LOG(ERROR) << "Failed to set transport parameters";
-    return SSL_TLSEXT_ERR_ALERT_FATAL;
-  }
-
-  QUIC_DLOG(INFO) << "Set " << chain->certs.size() << " certs for server "
-                  << "with hostname " << hostname_;
+int TlsServerHandshaker::TlsExtServernameCallback(int* /*out_alert*/) {
+  // SSL_TLSEXT_ERR_OK causes the server_name extension to be acked in
+  // ServerHello.
   return SSL_TLSEXT_ERR_OK;
 }
 
diff --git a/quic/core/tls_server_handshaker.h b/quic/core/tls_server_handshaker.h
index 35c70be..f2c1451 100644
--- a/quic/core/tls_server_handshaker.h
+++ b/quic/core/tls_server_handshaker.h
@@ -324,12 +324,8 @@
   QuicReferenceCountedPointer<QuicCryptoNegotiatedParameters>
       crypto_negotiated_params_;
   TlsServerConnection tls_connection_;
-  const bool use_early_select_cert_ =
-      GetQuicReloadableFlag(quic_tls_use_early_select_cert);
   const bool use_proof_source_handle_ =
-      use_early_select_cert_ &&
       GetQuicReloadableFlag(quic_tls_use_per_handshaker_proof_source);
-
   const QuicCryptoServerConfig* crypto_config_;  // Unowned.
 };
 
diff --git a/quic/core/tls_server_handshaker_test.cc b/quic/core/tls_server_handshaker_test.cc
index cf1bbc0..8d529a5 100644
--- a/quic/core/tls_server_handshaker_test.cc
+++ b/quic/core/tls_server_handshaker_test.cc
@@ -376,8 +376,7 @@
 }
 
 TEST_P(TlsServerHandshakerTest, HandshakeWithAsyncSelectCertSuccess) {
-  if (!(GetQuicReloadableFlag(quic_tls_use_early_select_cert) &&
-        GetQuicReloadableFlag(quic_tls_use_per_handshaker_proof_source))) {
+  if (!GetQuicReloadableFlag(quic_tls_use_per_handshaker_proof_source)) {
     return;
   }
 
@@ -403,8 +402,7 @@
 }
 
 TEST_P(TlsServerHandshakerTest, HandshakeWithAsyncSelectCertFailure) {
-  if (!(GetQuicReloadableFlag(quic_tls_use_early_select_cert) &&
-        GetQuicReloadableFlag(quic_tls_use_per_handshaker_proof_source))) {
+  if (!GetQuicReloadableFlag(quic_tls_use_per_handshaker_proof_source)) {
     return;
   }
 
@@ -427,8 +425,7 @@
 }
 
 TEST_P(TlsServerHandshakerTest, HandshakeWithAsyncSelectCertAndSignature) {
-  if (!(GetQuicReloadableFlag(quic_tls_use_early_select_cert) &&
-        GetQuicReloadableFlag(quic_tls_use_per_handshaker_proof_source))) {
+  if (!GetQuicReloadableFlag(quic_tls_use_per_handshaker_proof_source)) {
     return;
   }
 
@@ -486,8 +483,7 @@
 }
 
 TEST_P(TlsServerHandshakerTest, CancelPendingSelectCert) {
-  if (!(GetQuicReloadableFlag(quic_tls_use_early_select_cert) &&
-        GetQuicReloadableFlag(quic_tls_use_per_handshaker_proof_source))) {
+  if (!GetQuicReloadableFlag(quic_tls_use_per_handshaker_proof_source)) {
     return;
   }
 
