Remove SSL_VERIFY_PEER_IF_NO_OBC
Update-Note: SSL_VERIFY_PEER_IF_NO_OBC is removed. This was used as the
transition plan between the long-deprecated TLS Channel ID, and its
even-longer-deprecated precessor, Origin-Bound Certificates. Callers
should have no more reason to use this feature. (See also cl/728350196.)
Change-Id: I7a02e92592c4f71bed343935fdb094564701bd37
Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/76687
Commit-Queue: David Benjamin <davidben@google.com>
Auto-Submit: David Benjamin <davidben@google.com>
Reviewed-by: Adam Langley <agl@google.com>
diff --git a/include/openssl/ssl.h b/include/openssl/ssl.h
index b9bf7ea..eed2766 100644
--- a/include/openssl/ssl.h
+++ b/include/openssl/ssl.h
@@ -2580,10 +2580,6 @@
// with |SSL_VERIFY_PEER|, otherwise it won't work.
#define SSL_VERIFY_FAIL_IF_NO_PEER_CERT 0x02
-// SSL_VERIFY_PEER_IF_NO_OBC configures a server to request a client certificate
-// if and only if Channel ID is not negotiated.
-#define SSL_VERIFY_PEER_IF_NO_OBC 0x04
-
// SSL_CTX_set_verify configures certificate verification behavior. |mode| is
// one of the |SSL_VERIFY_*| values defined above. |callback| should be NULL.
//
diff --git a/ssl/handshake_server.cc b/ssl/handshake_server.cc
index 12f5662..9594210 100644
--- a/ssl/handshake_server.cc
+++ b/ssl/handshake_server.cc
@@ -833,18 +833,10 @@
hs->new_session->group_id = group_id;
}
- // Determine whether to request a client certificate.
- hs->cert_request = !!(hs->config->verify_mode & SSL_VERIFY_PEER);
- // Only request a certificate if Channel ID isn't negotiated.
- if ((hs->config->verify_mode & SSL_VERIFY_PEER_IF_NO_OBC) &&
- hs->channel_id_negotiated) {
- hs->cert_request = false;
- }
- // CertificateRequest may only be sent in certificate-based ciphers.
- if (!ssl_cipher_uses_certificate_auth(hs->new_cipher)) {
- hs->cert_request = false;
- }
-
+ // Determine whether to request a client certificate. CertificateRequest may
+ // only be sent in certificate-based ciphers.
+ hs->cert_request = (hs->config->verify_mode & SSL_VERIFY_PEER) &&
+ ssl_cipher_uses_certificate_auth(hs->new_cipher);
if (!hs->cert_request) {
// OpenSSL returns X509_V_OK when no certificates are requested. This is
// classed by them as a bug, but it's assumed by at least NGINX.
diff --git a/ssl/test/runner/runner.go b/ssl/test/runner/runner.go
index 2a52dfd..1042b43 100644
--- a/ssl/test/runner/runner.go
+++ b/ssl/test/runner/runner.go
@@ -4767,39 +4767,6 @@
testCases = append(testCases, testCase{
testType: serverTest,
- name: "VerifyPeerIfNoOBC-NoChannelID-" + ver.name,
- config: Config{
- MinVersion: ver.version,
- MaxVersion: ver.version,
- },
- flags: []string{
- "-enable-channel-id",
- "-verify-peer-if-no-obc",
- },
- shouldFail: true,
- expectedError: ":PEER_DID_NOT_RETURN_A_CERTIFICATE:",
- expectedLocalError: certificateRequired,
- })
-
- testCases = append(testCases, testCase{
- testType: serverTest,
- name: "VerifyPeerIfNoOBC-ChannelID-" + ver.name,
- config: Config{
- MinVersion: ver.version,
- MaxVersion: ver.version,
- ChannelID: &channelIDKey,
- },
- expectations: connectionExpectations{
- channelID: true,
- },
- flags: []string{
- "-enable-channel-id",
- "-verify-peer-if-no-obc",
- },
- })
-
- testCases = append(testCases, testCase{
- testType: serverTest,
name: ver.name + "-Server-CertReq-CA-List",
config: Config{
MinVersion: ver.version,
diff --git a/ssl/test/test_config.cc b/ssl/test/test_config.cc
index 3d2819d..b3947fa 100644
--- a/ssl/test/test_config.cc
+++ b/ssl/test/test_config.cc
@@ -409,7 +409,6 @@
BoolFlag("-shim-shuts-down", &TestConfig::shim_shuts_down),
BoolFlag("-verify-fail", &TestConfig::verify_fail),
BoolFlag("-verify-peer", &TestConfig::verify_peer),
- BoolFlag("-verify-peer-if-no-obc", &TestConfig::verify_peer_if_no_obc),
BoolFlag("-expect-verify-result", &TestConfig::expect_verify_result),
IntFlag("-expect-total-renegotiations",
&TestConfig::expect_total_renegotiations),
@@ -2202,12 +2201,6 @@
if (verify_peer) {
mode = SSL_VERIFY_PEER;
}
- if (verify_peer_if_no_obc) {
- // Set SSL_VERIFY_FAIL_IF_NO_PEER_CERT so testing whether client
- // certificates were requested is easy.
- mode = SSL_VERIFY_PEER | SSL_VERIFY_PEER_IF_NO_OBC |
- SSL_VERIFY_FAIL_IF_NO_PEER_CERT;
- }
if (use_custom_verify_callback) {
SSL_set_custom_verify(ssl.get(), mode, CustomVerifyCallback);
} else if (mode != SSL_VERIFY_NONE) {
diff --git a/ssl/test/test_config.h b/ssl/test/test_config.h
index 15d434f..6ddf620 100644
--- a/ssl/test/test_config.h
+++ b/ssl/test/test_config.h
@@ -156,7 +156,6 @@
bool shim_shuts_down = false;
bool verify_fail = false;
bool verify_peer = false;
- bool verify_peer_if_no_obc = false;
bool expect_verify_result = false;
std::vector<uint8_t> signed_cert_timestamps;
int expect_total_renegotiations = 0;
diff --git a/ssl/tls13_server.cc b/ssl/tls13_server.cc
index 3e83e5f..8f9a34e 100644
--- a/ssl/tls13_server.cc
+++ b/ssl/tls13_server.cc
@@ -977,11 +977,6 @@
if (!ssl->s3->session_reused && !hs->pake_verifier) {
// Determine whether to request a client certificate.
hs->cert_request = !!(hs->config->verify_mode & SSL_VERIFY_PEER);
- // Only request a certificate if Channel ID isn't negotiated.
- if ((hs->config->verify_mode & SSL_VERIFY_PEER_IF_NO_OBC) &&
- hs->channel_id_negotiated) {
- hs->cert_request = false;
- }
}
// Send a CertificateRequest, if necessary.