Skip to content

Commit 869b395

Browse files
authored
xds: ignore unknown SAN name type instead of throwing exception (#8183)
1 parent 465c932 commit 869b395

File tree

2 files changed

+28
-3
lines changed

2 files changed

+28
-3
lines changed

xds/src/main/java/io/grpc/xds/internal/sds/trust/SdsX509TrustManager.java

+2-3
Original file line numberDiff line numberDiff line change
@@ -151,14 +151,13 @@ private static boolean verifyOneSanInList(List<?> entry, List<StringMatcher> ver
151151
if (altNameType == null) {
152152
throw new CertificateParsingException("Invalid SAN entry: null altNameType");
153153
}
154-
String altNameFromCert = (String) entry.get(1);
155154
switch (altNameType) {
156155
case ALT_DNS_NAME:
157156
case ALT_URI_NAME:
158157
case ALT_IPA_NAME:
159-
return verifyDnsNameInSanList(altNameFromCert, verifySanList);
158+
return verifyDnsNameInSanList((String) entry.get(1), verifySanList);
160159
default:
161-
throw new CertificateParsingException("Unsupported altNameType: " + altNameType);
160+
return false;
162161
}
163162
}
164163

xds/src/test/java/io/grpc/xds/internal/sds/trust/SdsX509TrustManagerTest.java

+26
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import static org.mockito.Mockito.verify;
3030
import static org.mockito.Mockito.when;
3131

32+
import com.google.common.collect.ImmutableList;
3233
import io.envoyproxy.envoy.extensions.transport_sockets.tls.v3.CertificateValidationContext;
3334
import io.envoyproxy.envoy.type.matcher.v3.RegexMatcher;
3435
import io.envoyproxy.envoy.type.matcher.v3.StringMatcher;
@@ -37,6 +38,8 @@
3738
import java.security.cert.CertStoreException;
3839
import java.security.cert.CertificateException;
3940
import java.security.cert.X509Certificate;
41+
import java.util.Collections;
42+
import java.util.List;
4043
import javax.net.ssl.SSLEngine;
4144
import javax.net.ssl.SSLParameters;
4245
import javax.net.ssl.SSLSession;
@@ -551,6 +554,29 @@ public void checkServerTrustedSslSocket_untrustedServer_expectException()
551554
verify(sslSocket, times(1)).getHandshakeSession();
552555
}
553556

557+
@Test
558+
public void unsupportedAltNameType() throws CertificateException, IOException {
559+
StringMatcher stringMatcher =
560+
StringMatcher.newBuilder()
561+
.setExact("waterzooi.test.google.be")
562+
.setIgnoreCase(false)
563+
.build();
564+
CertificateValidationContext certContext =
565+
CertificateValidationContext.newBuilder().addMatchSubjectAltNames(stringMatcher).build();
566+
trustManager = new SdsX509TrustManager(certContext, mockDelegate);
567+
X509Certificate mockCert = mock(X509Certificate.class);
568+
569+
when(mockCert.getSubjectAlternativeNames())
570+
.thenReturn(Collections.<List<?>>singleton(ImmutableList.of(Integer.valueOf(1), "foo")));
571+
X509Certificate[] certs = new X509Certificate[] {mockCert};
572+
try {
573+
trustManager.verifySubjectAltNameInChain(certs);
574+
fail("no exception thrown");
575+
} catch (CertificateException expected) {
576+
assertThat(expected).hasMessageThat().isEqualTo("Peer certificate SAN check failed");
577+
}
578+
}
579+
554580
private TestSslEngine buildTrustManagerAndGetSslEngine()
555581
throws CertificateException, IOException, CertStoreException {
556582
SSLParameters sslParams = buildTrustManagerAndGetSslParameters();

0 commit comments

Comments
 (0)