Skip to content

Commit 6263cce

Browse files
committed
Changes needed for System root certs to work. Commented out the change for SNI in ProtocolNegotiators.java
1 parent 63997fd commit 6263cce

File tree

7 files changed

+50
-18
lines changed

7 files changed

+50
-18
lines changed

interop-testing/src/main/java/io/grpc/testing/integration/XdsTestClient.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -452,12 +452,14 @@ public void onNext(SimpleResponse response) {
452452

453453
private void handleRpcCompleted(long requestId, RpcType rpcType, String hostname,
454454
Set<XdsStatsWatcher> watchers) {
455+
logger.info("RPC completed");
455456
statsAccumulator.recordRpcFinished(rpcType, Status.OK);
456457
notifyWatchers(watchers, rpcType, requestId, hostname);
457458
}
458459

459460
private void handleRpcError(long requestId, RpcType rpcType, Status status,
460461
Set<XdsStatsWatcher> watchers) {
462+
logger.info("RPC error with status " + status);
461463
statsAccumulator.recordRpcFinished(rpcType, status);
462464
notifyWatchers(watchers, rpcType, requestId, null);
463465
}

netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -651,7 +651,11 @@ static final class ClientTlsHandler extends ProtocolNegotiationHandler {
651651
@Override
652652
@IgnoreJRERequirement
653653
protected void handlerAdded0(ChannelHandlerContext ctx) {
654-
sslEngine = sslContext.newEngine(ctx.alloc(), host, port);
654+
/*if (host.equals("psm-grpc-server")) {
655+
sslEngine = sslContext.newEngine(ctx.alloc(), "kannanj-psm-server-20250604-1226-8bkw5-830293263384.us-east7.run.app", 443);
656+
} else {*/
657+
sslEngine = sslContext.newEngine(ctx.alloc(), host, port);
658+
// }
655659
SSLParameters sslParams = sslEngine.getSSLParameters();
656660
sslParams.setEndpointIdentificationAlgorithm("HTTPS");
657661
sslEngine.setSSLParameters(sslParams);

xds/src/main/java/io/grpc/xds/GcpAuthenticationFilter.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import io.grpc.ClientCall;
3838
import io.grpc.ClientInterceptor;
3939
import io.grpc.CompositeCallCredentials;
40+
import io.grpc.InternalLogId;
4041
import io.grpc.Metadata;
4142
import io.grpc.MethodDescriptor;
4243
import io.grpc.Status;
@@ -45,10 +46,13 @@
4546
import io.grpc.xds.GcpAuthenticationFilter.AudienceMetadataParser.AudienceWrapper;
4647
import io.grpc.xds.MetadataRegistry.MetadataValueParser;
4748
import io.grpc.xds.XdsConfig.XdsClusterConfig;
49+
import io.grpc.xds.client.XdsLogger;
50+
import io.grpc.xds.client.XdsLogger.XdsLogLevel;
4851
import io.grpc.xds.client.XdsResourceType.ResourceInvalidException;
4952
import java.util.LinkedHashMap;
5053
import java.util.Map;
5154
import java.util.concurrent.ScheduledExecutorService;
55+
import java.util.concurrent.TimeUnit;
5256
import java.util.function.Function;
5357
import javax.annotation.Nullable;
5458

@@ -61,6 +65,7 @@ final class GcpAuthenticationFilter implements Filter {
6165
static final String TYPE_URL =
6266
"type.googleapis.com/envoy.extensions.filters.http.gcp_authn.v3.GcpAuthnFilterConfig";
6367
private final LruCache<String, CallCredentials> callCredentialsCache;
68+
private final XdsLogger logger = XdsLogger.withLogId(InternalLogId.allocate("bootstrapper", null));
6469
final String filterInstanceName;
6570

6671
GcpAuthenticationFilter(String name, int cacheSize) {
@@ -193,6 +198,8 @@ public <ReqT, RespT> ClientCall<ReqT, RespT> interceptCall(
193198
} else {
194199
callOptions = callOptions.withCallCredentials(newCallCredentials);
195200
}
201+
logger.log(XdsLogLevel.INFO, "Time to expiry of the auth token=" + callOptions.getDeadline().timeRemaining(
202+
TimeUnit.SECONDS));
196203
return next.newCall(method, callOptions);
197204
}
198205
};

xds/src/main/java/io/grpc/xds/XdsNameResolver.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -515,7 +515,7 @@ public void onClose(Status status, Metadata trailers) {
515515
Result.newBuilder()
516516
.setConfig(config)
517517
.setInterceptor(combineInterceptors(
518-
ImmutableList.of(filters, new ClusterSelectionInterceptor())))
518+
ImmutableList.of(new ClusterSelectionInterceptor(), filters)))
519519
.build();
520520
}
521521

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

Lines changed: 30 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,15 @@
2020

2121
import com.google.common.annotations.VisibleForTesting;
2222
import com.google.common.base.MoreObjects;
23+
import io.grpc.netty.GrpcSslContexts;
2324
import io.grpc.xds.EnvoyServerProtoData.BaseTlsContext;
2425
import io.grpc.xds.EnvoyServerProtoData.DownstreamTlsContext;
2526
import io.grpc.xds.EnvoyServerProtoData.UpstreamTlsContext;
2627
import io.grpc.xds.TlsContextManager;
28+
import io.grpc.xds.internal.security.certprovider.CertProviderClientSslContextProvider;
2729
import io.netty.handler.ssl.SslContext;
2830
import java.util.Objects;
31+
import javax.net.ssl.SSLException;
2932

3033
/**
3134
* Enables Client or server side to initialize this object with the received {@link BaseTlsContext}
@@ -62,21 +65,33 @@ public synchronized void updateSslContext(final SslContextProvider.Callback call
6265
}
6366
// we want to increment the ref-count so call findOrCreate again...
6467
final SslContextProvider toRelease = getSslContextProvider();
65-
toRelease.addCallback(
66-
new SslContextProvider.Callback(callback.getExecutor()) {
67-
68-
@Override
69-
public void updateSslContext(SslContext sslContext) {
70-
callback.updateSslContext(sslContext);
71-
releaseSslContextProvider(toRelease);
72-
}
73-
74-
@Override
75-
public void onException(Throwable throwable) {
76-
callback.onException(throwable);
77-
releaseSslContextProvider(toRelease);
78-
}
79-
});
68+
if (toRelease instanceof CertProviderClientSslContextProvider
69+
&& ((CertProviderClientSslContextProvider) toRelease).isUsingSystemRootCerts()) {
70+
callback.getExecutor().execute(() -> {
71+
try {
72+
callback.updateSslContext(GrpcSslContexts.forClient().build());
73+
releaseSslContextProvider(toRelease);
74+
} catch (SSLException e) {
75+
callback.onException(e);
76+
}
77+
});
78+
} else {
79+
toRelease.addCallback(
80+
new SslContextProvider.Callback(callback.getExecutor()) {
81+
82+
@Override
83+
public void updateSslContext(SslContext sslContext) {
84+
callback.updateSslContext(sslContext);
85+
releaseSslContextProvider(toRelease);
86+
}
87+
88+
@Override
89+
public void onException(Throwable throwable) {
90+
callback.onException(throwable);
91+
releaseSslContextProvider(toRelease);
92+
}
93+
});
94+
};
8095
} catch (final Throwable throwable) {
8196
callback.getExecutor().execute(new Runnable() {
8297
@Override

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
import javax.annotation.Nullable;
3131

3232
/** A client SslContext provider using CertificateProviderInstance to fetch secrets. */
33-
final class CertProviderClientSslContextProvider extends CertProviderSslContextProvider {
33+
public final class CertProviderClientSslContextProvider extends CertProviderSslContextProvider {
3434

3535
CertProviderClientSslContextProvider(
3636
Node node,

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,10 @@ protected CertProviderSslContextProvider(
8989
&& CommonTlsContextUtil.isUsingSystemRootCerts(tlsContext.getCommonTlsContext());
9090
}
9191

92+
public boolean isUsingSystemRootCerts() {
93+
return this.isUsingSystemRootCerts;
94+
}
95+
9296
private static CertificateProviderInfo getCertProviderConfig(
9397
@Nullable Map<String, CertificateProviderInfo> certProviders, String pluginInstanceName) {
9498
return certProviders != null ? certProviders.get(pluginInstanceName) : null;

0 commit comments

Comments
 (0)