I finally find the solution after some debugging hours. Istio provides by default a RSA key, when the grpc-java lib is waiting for a PKCS#8 key.
Add environment variable `PKCS8_KEY=true` to the istio proxy solved the issue. Hope this help. Le jeudi 20 mars 2025 à 16:01:19 UTC+1, Xavier XYZ a écrit : > Hi, I have exactly the same issue, did you find any solution ? > > Thank you > > Le vendredi 26 mai 2023 à 21:17:54 UTC+2, sanjay...@google.com a écrit : > >> I looked at the logs and I can confirm that the client is not using mTLS >> because Istio didn't provide the right configuration. Let me explain: >> >> From your server-mtls-strict.log I see this >> >> "transportSocket": { >> "name": "envoy.transport_sockets.tls", >> "typedConfig": { >> "@type": " >> type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext >> ", >> "commonTlsContext": { >> "combinedValidationContext": { >> "defaultValidationContext": { >> }, >> "validationContextCertificateProviderInstance": { >> "instanceName": "default", >> "certificateName": "ROOTCA" >> } >> }, >> "tlsCertificateCertificateProviderInstance": { >> "instanceName": "default", >> "certificateName": "default" >> } >> }, >> "requireClientCertificate": true >> } >> }, >> "name": "inbound-mtls" >> >> In the Listener resource received (see timestamp 16:47:54.070) >> >> However I don't see a similar security configuration on the client side - >> which is a bit complex I admin. In the client-mtls-strict.log I see a >> Cluster resource response: >> >> { >> "versionInfo": "2023-05-26T16:47:41Z/749", >> "resources": [{ >> "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", >> "name": "outbound|8443||server.kotlin-grpc-xds.svc.cluster.local", >> "type": "EDS", >> "edsClusterConfig": { >> "edsConfig": { >> "ads": { >> } >> }, >> "serviceName": >> "outbound|8443||server.kotlin-grpc-xds.svc.cluster.local" >> } >> }], >> "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", >> "nonce": "bd0fe5d1-9cb8-4342-a15f-d5d834dd3255", >> "controlPlane": { >> "identifier": >> "{\"Component\":\"istiod\",\"ID\":\"istiod-7fd9d6dd48-nf42k\",\"Info\":{\"version\":\"1.17.2\",\"revision\":\"3e857775086a061d12ee445f32a0b35ea17c8488\",\"golang_version\":\"go1.20.2\",\"status\":\"Clean\",\"tag\":\"1.17.2\"}}" >> } >> } >> >> which has no security/mTLS configuration. I would expect a config similar >> to the transportSocket snippet I described above. >> >> So the error is on the Istio side: whether a bug in Istio or a user-error >> I can't tell. I hope you are able to figure it out? >> >> >> >> On Friday, May 26, 2023 at 10:53:34 AM UTC-7 Wesley Hartford wrote: >> >>> I've attached a copy of the log files with xds logging set to trace for >>> an execution of the client and server with istio's mtls mode set to STRICT >>> and PERMISSIVE. My interpretation of these logs is: >>> >>> In PERMISSIVE mode, neither client nor server is trying to use any type >>> of TLS; they're both using plain text and can interact just fine. I was >>> under the impression that PERMISSIVE mode would use mTLS, but reading the >>> istio docs, it's a little ambiguous, so I guess this is a correct behaviour. >>> >>> In STRICT mode, it looks like the server is using the supplied TLS key >>> material to accept mTLS connections, but it doesn't look like the client is >>> making any attempt to use TLS. >>> >>> I'm working on your other suggestions, but thought I should update you >>> with the logs before spending too much time on them. >>> >>> On Wed, May 24, 2023 at 11:22 PM Sanjay Pujare <sanjay...@google.com> >>> wrote: >>> >>>> (adding grpc.io group back) >>>> >>>> On Wed, May 24, 2023 at 2:57 PM Wesley Hartford <wes...@cutterslade.ca> >>>> wrote: >>>> >>>>> Hi, >>>>> >>>>> My suggestion that the connection was falling back to insecure was not >>>>> evidence based, I'm still trying to wrap my head around how all this is >>>>> working. >>>>> >>>> >>>> Okay. >>>> >>>> >>>>> >>>>> The target address on the client side is using the xds:/// prefix. >>>>> >>>>> I've enabled trace level logging on the io.grpc.xds logger but I'm not >>>>> seeing any additional log messages, have I missed something? I'm using >>>>> slf4j and logback and have the SLF4JBridgeHandler installed. >>>>> >>>> >>>> The code uses Java util logging so you can just something like >>>> -Djava.util.logging.config.file=/logging.properties in your Java >>>> invocation command line and enable the logger for io.grpc.xds . >>>> >>>> >>>>> >>>>> The grpc-bootstrap.json file seems reasonable, though I don't know >>>>> just what it all means (I've attached the content). The three pem files >>>>> referenced in certificate_providers point to real files containing >>>>> apparently valid PEM content. >>>>> >>>>> You've mentioned a couple times enabling vs. disabling mTLS, are you >>>>> referring to some specific setting on the client and/or server, or in >>>>> istio >>>>> somewhere? My understanding has been that with the Xds server and >>>>> channel, >>>>> both will use mTLS unless I specifically set the mtls mode to DISABLE in >>>>> a >>>>> PeerAuthentication resource, which I haven't done. I've experimented with >>>>> mtls mode set to PERMISSIVE and STRICT. Is the problem something as >>>>> simple >>>>> as not enabling mTLS somewhere? >>>>> >>>> >>>> In your first post you said "I got everything working without too much >>>> trouble ... ... When I configure Istio to enforce STRICT mTLS..." I >>>> got the impression that you got everything working in plaintext (without >>>> enabling mTLS) and then you enabled mTLS via Istio which is when you saw >>>> connection problems. I was just referring to the same - you enable mTLS in >>>> Istio security policy. >>>> >>>> I suggest couple of additional tests to troubleshoot this: >>>> >>>> - instead of using Xds Channel and Server credentials use the Tls >>>> Channel and Server credentials with the same files provided by Istio >>>> (under >>>> /var/lib/istio/data). You can check out the doc at >>>> https://grpc.github.io/grpc-java/javadoc/io/grpc/TlsChannelCredentials.html >>>> >>>> and >>>> https://grpc.github.io/grpc-java/javadoc/io/grpc/TlsServerCredentials.html >>>> . Note that even if you are using XDS for load balancing, service >>>> discovery >>>> you can use Tls credentials for security. >>>> >>>> - if you can try a Golang (or C++) example with your Istio setup and >>>> verify mTLS is working with those examples. >>>> >>>> Hope that helps. >>>> >>>> >>>> >>>>> >>>>> Thanks again, >>>>> >>>>> Wesley >>>>> >>>>> On Wed, May 24, 2023 at 10:27 AM 'sanjay...@google.com' via grpc.io < >>>>> grp...@googlegroups.com> wrote: >>>>> >>>>>> On Wednesday, May 24, 2023 at 8:41:20 AM UTC-7 Wesley Hartford wrote: >>>>>> >>>>>> Thanks for getting back to me, Sanjay. As far as I can tell, my >>>>>> client and server are both using the appropriate Xds credentials: >>>>>> The client code is at >>>>>> https://github.com/wfhartford/kotlin-grpc-xds/blob/18598a7e9210be7265bc753b136cb424d087ab77/client/src/main/kotlin/ca/cutterslade/kotlingrpcxds/client/main.kt#L26 >>>>>> Grpc.newChannelBuilder(targetUrl, >>>>>> XdsChannelCredentials.create(InsecureChannelCredentials.create())).build() >>>>>> >>>>>> The server code is at >>>>>> https://github.com/wfhartford/kotlin-grpc-xds/blob/18598a7e9210be7265bc753b136cb424d087ab77/server/src/main/kotlin/ca/cutterslade/kotlingrpcxds/server/main.kt#L45 >>>>>> XdsServerBuilder.forPort(8443, >>>>>> XdsServerCredentials.create(InsecureServerCredentials.create())) >>>>>> >>>>>> The insecure credentials provided to both a fallback, and it looks >>>>>> like the sample you linked is doing the same thing. >>>>>> >>>>>> >>>>>> Yes, you are right - Xds credentials are being correctly used so >>>>>> that's not an issue. >>>>>> >>>>>> I'm not sure why, but I'm guessing that the secure connection is >>>>>> failing and it is falling back to insecure. >>>>>> >>>>>> >>>>>> No, that cannot be the case. As described here >>>>>> https://github.com/grpc/proposal/blob/master/A29-xds-tls-security.md#programming-api >>>>>> >>>>>> fallback credentials are *not* meant to be used when secure connection >>>>>> fails. If you suspect that's happening can you provide some evidence >>>>>> (logs >>>>>> etc)? >>>>>> >>>>>> >>>>>> Based on the example you linked, the only other requirement is that >>>>>> the GRPC_XDS_BOOTSTRAP environment variable is set, which is being >>>>>> done by the istio sidecar; kubectl describe pod shows that both the >>>>>> client and server containers have two environment variables injected: >>>>>> GRPC_XDS_EXPERIMENTAL_SECURITY_SUPPORT: true >>>>>> GRPC_XDS_BOOTSTRAP: >>>>>> /etc/istio/proxy/grpc-bootstrap.json >>>>>> >>>>>> >>>>>> The bootstrap file (and the GRPC_XDS_BOOTSTRAP environment variable) >>>>>> is required not just for security but overall XDS support. Based on your >>>>>> observations in the first email it looks like client and server are able >>>>>> to >>>>>> communicate based on xds configuration so that part must be working. >>>>>> Just >>>>>> to confirm your client did use the "xds:///" prefix to access your >>>>>> service, >>>>>> right? >>>>>> >>>>>> If you are certain that XDS is working for load balancing and >>>>>> plaintext communication but breaks only when mTLS is enabled it might be >>>>>> useful to enable debug logging on both client and server side (for the >>>>>> io.grpc.xds package and below). >>>>>> >>>>>> Also you can check the contents of >>>>>> /etc/istio/proxy/grpc-bootstrap.json esp. the certificate_providers >>>>>> part and confirm that the 3 files provided in the config have valid >>>>>> certificate material. Let me know if you need help debugging that part. >>>>>> >>>>>> >>>>>> >>>>>> There are only two warning lines being logged from both the client >>>>>> and the server: >>>>>> >>>>>> 14:51:55.314 [main] WARN i.g.n.s.io.netty.bootstrap.Bootstrap - >>>>>> Unknown channel option 'SO_KEEPALIVE' for channel '[id: 0xba433026]' >>>>>> 14:51:55.314 [main] WARN i.g.n.s.io.netty.bootstrap.Bootstrap - >>>>>> Unknown channel option >>>>>> 'io.grpc.netty.shaded.io.netty.channel.epoll.EpollChannelOption#TCP_USER_TIMEOUT' >>>>>> >>>>>> for channel '[id: 0xba433026]' >>>>>> >>>>>> >>>>>> I doubt this is an issue. Just to confirm you see these messages also >>>>>> when mTLS is not enabled, right? >>>>>> >>>>>> >>>>>> >>>>>> Do you know of anything else I might be missing that is required for >>>>>> a secure connection? >>>>>> >>>>>> Thanks, >>>>>> >>>>>> Wesley >>>>>> >>>>>> -- >>>>>> You received this message because you are subscribed to a topic in >>>>>> the Google Groups "grpc.io" group. >>>>>> To unsubscribe from this topic, visit >>>>>> https://groups.google.com/d/topic/grpc-io/e20VVBIPd7M/unsubscribe. >>>>>> To unsubscribe from this group and all its topics, send an email to >>>>>> grpc-io+u...@googlegroups.com. >>>>>> To view this discussion on the web visit >>>>>> https://groups.google.com/d/msgid/grpc-io/5a062461-2c73-4475-b99c-ddfe43a569e6n%40googlegroups.com >>>>>> >>>>>> <https://groups.google.com/d/msgid/grpc-io/5a062461-2c73-4475-b99c-ddfe43a569e6n%40googlegroups.com?utm_medium=email&utm_source=footer> >>>>>> . >>>>>> >>>>> -- You received this message because you are subscribed to the Google Groups "grpc.io" group. To unsubscribe from this group and stop receiving emails from it, send an email to grpc-io+unsubscr...@googlegroups.com. To view this discussion visit https://groups.google.com/d/msgid/grpc-io/89753236-45ff-4f36-8367-20bab2bc5463n%40googlegroups.com.