Skip to content

Commit acb8fa5

Browse files
committed
Merge with changes to not special case system root certs in SslContextProviderSupplier itself but have it be handled only in the ClientCertificateSslContextProviderSupplier.
1 parent e116552 commit acb8fa5

File tree

3 files changed

+15
-57
lines changed

3 files changed

+15
-57
lines changed

xds/src/main/java/io/grpc/xds/internal/security/SslContextProviderSupplier.java

Lines changed: 13 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,8 @@
1616

1717
package io.grpc.xds.internal.security;
1818

19-
import static com.google.common.base.Preconditions.checkNotNull;
20-
2119
import com.google.common.annotations.VisibleForTesting;
2220
import com.google.common.base.MoreObjects;
23-
import io.grpc.netty.GrpcSslContexts;
2421
import io.grpc.xds.EnvoyServerProtoData.BaseTlsContext;
2522
import io.grpc.xds.EnvoyServerProtoData.DownstreamTlsContext;
2623
import io.grpc.xds.EnvoyServerProtoData.UpstreamTlsContext;
@@ -29,9 +26,10 @@
2926

3027
import java.util.HashSet;
3128
import java.util.Objects;
32-
import javax.net.ssl.SSLException;
3329
import java.util.Set;
3430

31+
import static com.google.common.base.Preconditions.checkNotNull;
32+
3533
/**
3634
* Enables Client or server side to initialize this object with the received {@link BaseTlsContext}
3735
* and communicate it to the consumer i.e. {@link SecurityProtocolNegotiators}
@@ -67,39 +65,22 @@ public synchronized void updateSslContext(final SslContextProvider.Callback call
6765
}
6866
}
6967
// we want to increment the ref-count so call findOrCreate again...
70-
final SslContextProvider toRelease = getSslContextProvider();
68+
final SslContextProvider toRelease = getSslContextProvider(sni);
7169
toRelease.addCallback(
7270
new SslContextProvider.Callback(callback.getExecutor()) {
73-
final SslContextProvider toRelease = getSslContextProvider(sni);
74-
// When using system root certs on client side, SslContext updates via CertificateProvider is
75-
// only required if Mtls is also enabled, i.e. tlsContext has a cert provider instance.
76-
if (tlsContext instanceof UpstreamTlsContext
77-
&& !CommonTlsContextUtil.hasCertProviderInstance(tlsContext.getCommonTlsContext())
78-
&& CommonTlsContextUtil.isUsingSystemRootCerts(tlsContext.getCommonTlsContext())) {
79-
callback.getExecutor().execute(() -> {
80-
try {
81-
callback.updateSslContext(GrpcSslContexts.forClient().build());
71+
72+
@Override
73+
public void updateSslContext(SslContext sslContext) {
74+
callback.updateSslContext(sslContext);
75+
releaseSslContextProvider(toRelease, sni);
76+
}
77+
78+
@Override
79+
public void onException(Throwable throwable) {
80+
callback.onException(throwable);
8281
releaseSslContextProvider(toRelease, sni);
83-
} catch (SSLException e) {
84-
callback.onException(e);
8582
}
8683
});
87-
} else {
88-
toRelease.addCallback(
89-
new SslContextProvider.Callback(callback.getExecutor()) {
90-
91-
@Override
92-
public void updateSslContext(SslContext sslContext) {
93-
callback.updateSslContext(sslContext);
94-
releaseSslContextProvider(toRelease, sni);
95-
}
96-
97-
@Override
98-
public void onException(Throwable throwable) {
99-
callback.onException(throwable);
100-
releaseSslContextProvider(toRelease, sni);
101-
}
102-
});
10384
} catch (final Throwable throwable) {
10485
callback.getExecutor().execute(new Runnable() {
10586
@Override

xds/src/main/java/io/grpc/xds/internal/security/certprovider/CertProviderClientSslContextProvider.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@
3333
/** A client SslContext provider using CertificateProviderInstance to fetch secrets. */
3434
final class CertProviderClientSslContextProvider extends CertProviderSslContextProvider {
3535

36+
private final String sniForSanMatching;
37+
3638
CertProviderClientSslContextProvider(
3739
Node node,
3840
@Nullable Map<String, CertificateProviderInfo> certProviders,

xds/src/test/java/io/grpc/xds/internal/security/SslContextProviderSupplierTest.java

Lines changed: 0 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -178,31 +178,6 @@ public void systemRootCertsWithMtls_callbackExecutedFromProvider() {
178178
.findOrCreateClientSslContextProvider(eq(upstreamTlsContext), eq(SNI));
179179
}
180180

181-
@Test
182-
public void systemRootCertsWithRegularTls_callbackExecutedFromSupplier() {
183-
upstreamTlsContext =
184-
CommonTlsContextTestsUtil.buildNewUpstreamTlsContextForCertProviderInstance(
185-
null,
186-
null,
187-
null,
188-
"root-default",
189-
null,
190-
CertificateValidationContext.newBuilder()
191-
.setSystemRootCerts(
192-
CertificateValidationContext.SystemRootCerts.getDefaultInstance())
193-
.build());
194-
supplier = new SslContextProviderSupplier(upstreamTlsContext, mockTlsContextManager);
195-
reset(mockTlsContextManager);
196-
197-
callUpdateSslContext();
198-
ArgumentCaptor<Runnable> runnableArgumentCaptor = ArgumentCaptor.forClass(Runnable.class);
199-
verify(mockExecutor).execute(runnableArgumentCaptor.capture());
200-
runnableArgumentCaptor.getValue().run();
201-
verify(mockCallback, times(1)).updateSslContext(any(SslContext.class));
202-
verify(mockTlsContextManager, times(1))
203-
.releaseClientSslContextProvider(eq(mockSslContextProvider), eq(SNI));
204-
}
205-
206181
@Test
207182
public void testClose() {
208183
prepareSupplier(true);

0 commit comments

Comments
 (0)