diff --git a/ssl/ssl_session.c b/ssl/ssl_session.c
index 62360af..721577d 100644
--- a/ssl/ssl_session.c
+++ b/ssl/ssl_session.c
@@ -514,7 +514,7 @@
   size_t ticket_len = 0;
   const int tickets_supported =
       !(SSL_get_options(ssl) & SSL_OP_NO_TICKET) &&
-      (ssl->version > SSL3_VERSION || ctx->extensions != NULL) &&
+      ssl->version > SSL3_VERSION &&
       SSL_early_callback_ctx_extension_get(ctx, TLSEXT_TYPE_session_ticket,
                                            &ticket, &ticket_len);
   if (tickets_supported) {
diff --git a/ssl/t1_lib.c b/ssl/t1_lib.c
index f30e8eb..6e7cba6 100644
--- a/ssl/t1_lib.c
+++ b/ssl/t1_lib.c
@@ -1205,7 +1205,7 @@
 
 static int ext_ticket_parse_clienthello(SSL *ssl, uint8_t *out_alert, CBS *contents) {
   /* This function isn't used because the ticket extension from the client is
-   * handled in ssl_sess.c. */
+   * handled in ssl_session.c. */
   return 1;
 }
 
@@ -2325,11 +2325,6 @@
 
 uint8_t *ssl_add_serverhello_tlsext(SSL *s, uint8_t *const buf,
                                     uint8_t *const limit) {
-  /* don't add extensions for SSLv3, unless doing secure renegotiation */
-  if (s->version == SSL3_VERSION && !s->s3->send_connection_binding) {
-    return buf;
-  }
-
   CBB cbb, extensions;
   CBB_zero(&cbb);
   if (!CBB_init_fixed(&cbb, buf, limit - buf) ||
@@ -2413,6 +2408,12 @@
         return 0;
       }
 
+      /* RFC 5746 made the existence of extensions in SSL 3.0 somewhat
+       * ambiguous. Ignore all but the renegotiation_info extension. */
+      if (s->version == SSL3_VERSION && type != TLSEXT_TYPE_renegotiate) {
+        continue;
+      }
+
       unsigned ext_index;
       const struct tls_extension *const ext =
           tls_extension_find(&ext_index, type);
@@ -2605,10 +2606,6 @@
 
 int ssl_parse_serverhello_tlsext(SSL *s, CBS *cbs) {
   int alert = -1;
-  if (s->version < SSL3_VERSION) {
-    return 1;
-  }
-
   if (ssl_scan_serverhello_tlsext(s, cbs, &alert) <= 0) {
     ssl3_send_alert(s, SSL3_AL_FATAL, alert);
     return 0;
diff --git a/ssl/test/runner/handshake_client.go b/ssl/test/runner/handshake_client.go
index e63d5eb..9d8ffee 100644
--- a/ssl/test/runner/handshake_client.go
+++ b/ssl/test/runner/handshake_client.go
@@ -833,6 +833,10 @@
 		return nil
 	}
 
+	if c.vers == VersionSSL30 {
+		return errors.New("tls: negotiated session tickets in SSL 3.0")
+	}
+
 	msg, err := c.readHandshake()
 	if err != nil {
 		return err
diff --git a/ssl/test/runner/runner.go b/ssl/test/runner/runner.go
index a9823fc..61c8c57 100644
--- a/ssl/test/runner/runner.go
+++ b/ssl/test/runner/runner.go
@@ -149,6 +149,9 @@
 	// expectedNextProto controls whether the connection should
 	// negotiate a next protocol via NPN or ALPN.
 	expectedNextProto string
+	// expectNoNextProto, if true, means that no next protocol should be
+	// negotiated.
+	expectNoNextProto bool
 	// expectedNextProtoType, if non-zero, is the expected next
 	// protocol negotiation mechanism.
 	expectedNextProtoType int
@@ -328,6 +331,12 @@
 		}
 	}
 
+	if test.expectNoNextProto {
+		if actual := connState.NegotiatedProtocol; actual != "" {
+			return fmt.Errorf("got unexpected next proto %s", actual)
+		}
+	}
+
 	if test.expectedNextProtoType != 0 {
 		if (test.expectedNextProtoType == alpn) != connState.NegotiatedProtocolFromALPN {
 			return fmt.Errorf("next proto type mismatch")
@@ -3492,6 +3501,68 @@
 		// long.
 		flags: []string{"-host-name", "01234567890123456789012345678901234567890123456789012345678901234567890123456789.com"},
 	})
+
+	// Extensions should not function in SSL 3.0.
+	testCases = append(testCases, testCase{
+		testType: serverTest,
+		name:     "SSLv3Extensions-NoALPN",
+		config: Config{
+			MaxVersion: VersionSSL30,
+			NextProtos: []string{"foo", "bar", "baz"},
+		},
+		flags: []string{
+			"-select-alpn", "foo",
+		},
+		expectNoNextProto: true,
+	})
+
+	// Test session tickets separately as they follow a different codepath.
+	testCases = append(testCases, testCase{
+		testType: serverTest,
+		name:     "SSLv3Extensions-NoTickets",
+		config: Config{
+			MaxVersion: VersionSSL30,
+			Bugs: ProtocolBugs{
+				// Historically, session tickets in SSL 3.0
+				// failed in different ways depending on whether
+				// the client supported renegotiation_info.
+				NoRenegotiationInfo: true,
+			},
+		},
+		resumeSession: true,
+	})
+	testCases = append(testCases, testCase{
+		testType: serverTest,
+		name:     "SSLv3Extensions-NoTickets2",
+		config: Config{
+			MaxVersion: VersionSSL30,
+		},
+		resumeSession: true,
+	})
+
+	// But SSL 3.0 does send and process renegotiation_info.
+	testCases = append(testCases, testCase{
+		testType: serverTest,
+		name:     "SSLv3Extensions-RenegotiationInfo",
+		config: Config{
+			MaxVersion: VersionSSL30,
+			Bugs: ProtocolBugs{
+				RequireRenegotiationInfo: true,
+			},
+		},
+	})
+	testCases = append(testCases, testCase{
+		testType: serverTest,
+		name:     "SSLv3Extensions-RenegotiationInfo-SCSV",
+		config: Config{
+			MaxVersion: VersionSSL30,
+			Bugs: ProtocolBugs{
+				NoRenegotiationInfo:      true,
+				SendRenegotiationSCSV:    true,
+				RequireRenegotiationInfo: true,
+			},
+		},
+	})
 }
 
 func addResumptionVersionTests() {
