Okay, thanks for the explanation I can accept that.

I just merged the new config setting for client hostname verification.
Thanks Sonke. Can we go forward with the approach that I suggested
previously?

We should also include the improvement of reverse DNS queries to verify
all hostnames in the DNS response.

Andor



On Fri, 2024-11-22 at 15:49 +0100, Natalie Klestrup Röijezon wrote:
> > but we could easily improve this behaviour by going through all
> the resolved hostnames and if anything matches, the verification
> succeeds.
> 
> Yes, exactly.
> 
> > Why would you add more hostnames to a single host without adding
> > them
> to the certificate? The certificate certifies the actor (machine in
> this case), not just the hostname.
> 
> I think this is a question of mentality, of whether you use DNS for
> service
> discovery or what I'm going to call machine discovery (not sure if
> there's
> a better name for it).
> 
> In a machine discovery framework, you assign the host a name (let's
> say
> "kåbdalis"), and configure all peers and clients that zookeeper.1 is
> hosted
> on kåbdalis:2888:3888. You set the SAN to kåbdalis. Everyone is
> happy. If
> kåbdalis is running some other service, you do the same thing there.
> 
> In a service discovery framework, you assign the *role* a name
> ("zookeeper-1"), and configure all peers and clients that zookeeper.1
> is
> hosted on zookeeper-1, which might be on any server. You issue
> kåbdalis a
> certificate with the SAN zookeeper-1, to prove that it is authorized
> to
> host it. kåbdalis will likely have other DNS names too; both for
> "itself"
> (for ssh access, for example), and for any other roles it might
> fulfil
> (kafka-1?). Those will have their own certificates, since zookeeper-1
> shouldn't be able to pretend to be kafka-1.
> 
> Kubernetes generally follows the latter framework, a Pod gets one IP
> address, but a DNS hostname for every Service that it matches. A
> primary
> Service can be selected (via *Pod.spec.subdomain* and
> *Pod.spec.hostname*),
> but every other Service that contains it will still be included in
> the
> reverse DNS reply.
> 
> Those secondary hostnames are effectively impossible to predict since
> they
> include the Pod IP (*1-2-3-4.service.namespace.svc.cluster.local* for
> the
> IP *1.2.3.4*), which is considered transient in Kubernetes (it will
> be
> regenerated every time the Pod is restarted). This IP is also
> assigned far
> later than most reasonable hooks to provide certificates.
> 
> > On the flipside, turning off this check doesn't make sense to me,
> > because owning a certificate alone should not be enough to
> > authorize
> > yourself (showing the ID of a random guy doesn't work, right, you
> > have
> > to show your own ID), though in most scenarios Quorum is SASL
> > authenticated, so the authenticity of peers is already guaranteed.
> 
> We really have two different properties that we want to verify during
> the
> connection process:
> 
> 1. Do you control the key signed by the certificate? (managed by the
> standard TLS handshake)
> 2. Is this certificate authorized to perform this action? (does the
> SAN
> match the name expected by zoo.cfg?)
> 
> Validating the connecting IP address is a weaker form of 1 (the IP
> header
> and DNS traffic are both cleartext and much more susceptible to
> tampering
> than the TLS handshake itself), and doesn't replace 2 at all (your
> HTTP
> server might be trusted by the same PKI and *does* have a fully valid
> hostname, but it still probably shouldn't be able to connect as a ZK
> quorum
> peer).
> 
> 
> On Thu, Nov 21, 2024 at 10:37 PM Andor Molnar <an...@apache.org>
> wrote:
> 
> > Hi Natalie,
> > 
> > 
> > On Thu, 2024-11-21 at 16:19 +0100, Natalie Klestrup Röijezon wrote:
> > > I think Andor's suggestion mostly makes sense, though I have a
> > > few
> > > notes:
> > > 
> > > 1. The current reverse DNS situation (it picks a random hostname
> > > from
> > > the
> > > DNS response and validates that) is just flat out *wrong*. PR#2
> > > doesn't
> > > need to solve that, but I don't think there is a use case for
> > > keeping
> > > it
> > > around together with a fixed reverse DNS implementation that
> > > respects
> > > the
> > > full DNS response.
> > 
> > IMHO returning multiple hostnames for a reverse DNS query is bad
> > config, but we could easily improve this behaviour by going through
> > all
> > the resolved hostnames and if anything matches, the verification
> > succeeds.
> > 
> > Let's put it this way from security perspective: I want to certify
> > a
> > machine (VM or on-prem) to be able to connect to my quorum, so I
> > issue
> > a certificate. Host has a single IP address and one or more
> > associated
> > hostnames. All hostnames and IP address(es) should identify one
> > single
> > host in the network otherwise there's no way to distinguish them.
> > 
> > So what I do is, I issue a cert and put every information about the
> > machine into the SAN: IP address and all hostnames. Now ZooKeeper
> > is
> > able to verify the hostname of the peer by picking any resolved
> > hostname from the reverse DNS query, because all of them have been
> > added to the cert. This approach works out pretty well in our
> > existing
> > production systems, though none of them is in Kubernetes.
> > 
> > Why would you add more hostnames to a single host without adding
> > them
> > to the certificate? The certificate certifies the actor (machine in
> > this case), not just the hostname.
> > 
> > On the flipside, turning off this check doesn't make sense to me,
> > because owning a certificate alone should not be enough to
> > authorize
> > yourself (showing the ID of a random guy doesn't work, right, you
> > have
> > to show your own ID), though in most scenarios Quorum is SASL
> > authenticated, so the authenticity of peers is already guaranteed.
> > 
> > 
> > > 2. I'm not quite sure what you mean by "_and_ if it fails, will
> > > do
> > > the same
> > > with the IP address as a last resort.". Does this mean that it
> > > would
> > > also
> > > check the SAN against IP addresses in the zoo.cfg? Falling back
> > > to
> > > the
> > > current reverse DNS implementation? Something else entirely?
> > 
> > Yes, IP address can be added to the SAN, but it's quite
> > inconvenient,
> > because if IP address changes, a new certificate must be issued.
> > 
> > So, quorum hostname verification should work like this:
> > 
> > 1. (if enabled) Check hostname in SAN with reverse DNS lookup
> > (check
> > all)
> > 2. Check hostnames listed in zoo.cfg in SAN
> > 3. Check IP address in SAN
> > 
> > If any these methods find a match, the hostname verification
> > succeeds.
> > 
> > 
> > Andor
> > 
> > 
> > 
> > > 
> > > On Wed, Nov 20, 2024 at 10:06 PM Andor Molnar <an...@apache.org>
> > > wrote:
> > > 
> > > > Okay, let's discuss it here.
> > > > 
> > > > So, currently we have 2 clientHostnameVerification options:
> > > > quorum
> > > > and
> > > > client. They're implemented in the Quroum509Util and
> > > > ClientX509Util
> > > > classes respectively and share common code in X509Util base
> > > > class.
> > > > The
> > > > 3 different options that you described makes sense to me, but
> > > > it's
> > > > only
> > > > meaningful in Quorum communication, so it would be difficult to
> > > > implement. Separating the 2 properties and changing the type of
> > > > one
> > > > of
> > > > them will be very cumbersome.
> > > > 
> > > > Actually we only have 1 setting currently which is
> > > > "hostnameVerification", so properties look like:
> > > > 
> > > > - zookeeper.ssl.hostnameVerification (client-server)
> > > > - zookeeper.ssl.quorum.hostnameVerification (quorum)
> > > > 
> > > > Both controls the server hostname verification directly and
> > > > client
> > > > hostname verification indirectly. Your current patch introduces
> > > > 2
> > > > new
> > > > properties:
> > > > 
> > > > - zookeeper.ssl.clientHostnameVerification (client-server)
> > > > - zookeeper.ssl.quorum.clientHostnameVerification (quorum)
> > > > 
> > > > They will directly control the client hostname verification
> > > > with
> > > > the
> > > > restriction that the server side (hostnameVerification) must be
> > > > enabled
> > > > in order to get them working. Default values are 'false' for
> > > > client-
> > > > server and 'true' for quorum.
> > > > 
> > > > This is backward compatible and can be committed as it is
> > > > (tweak
> > > > the
> > > > docs first).
> > > > 
> > > > Next patch will introduce another 2 parameters which are:
> > > > 
> > > > - zookeeper.ssl.enableReverseDnsLookup (client-server)
> > > > - zookeeper.ssl.quorum.enableReverseDnsLookup (quorum)
> > > > 
> > > > Both of them will be true by default which keeps backward
> > > > compatibility. If the option is disabled for client-server, the
> > > > hostname verification won't try a reverse DNS lookup to get the
> > > > hostname, but still checks if the IP address is listed in the
> > > > SAN.
> > > > 
> > > > If the option is disabled for quorum, hostname verification
> > > > won't
> > > > do
> > > > reverse lookup, but checks the hostnames listed in zoo.cfg
> > > > against
> > > > the
> > > > SAN _and_ if it fails, will do the same with the IP address as
> > > > a
> > > > last
> > > > resort.
> > > > 
> > > > We also have the zookeeper.fips-mode property which will remove
> > > > the
> > > > entire ZK hostname verification logic and uses the built-in JDK
> > > > mechanism.
> > > > 
> > > > Wdyt?
> > > > 
> > > > Andor
> > > > 
> > > > 
> > > > 
> > > > 
> > > > On Wed, 2024-11-20 at 09:21 +0100, Sönke Liebau wrote:
> > > > > Happy to split this into two patches, my main worry was that
> > > > > we
> > > > > notice in
> > > > > the second patch, that we are not compatible with the first
> > > > > one
> > > > > from
> > > > > a
> > > > > config perspective any more.
> > > > > 
> > > > > The proposed `clientHostnameVerification` parameters take a
> > > > > boolean
> > > > > value I
> > > > > think. One could argue that this parameter would also be
> > > > > appropriate
> > > > > for
> > > > > the new "hostname from list of peers" logic, as that is also
> > > > > a
> > > > > hostnameVerification, so instead of it being a bool it could
> > > > > become a
> > > > > list
> > > > > of allowed values [ "none", "peer", "full"].
> > > > > With 'peer' being the new and improved thing, 'none'
> > > > > disabling
> > > > > all
> > > > > checks
> > > > > and 'full' being the current behavior.  Full is probably not
> > > > > the
> > > > > correct
> > > > > term for this, maybe 'legacy' or 'dns' or something along
> > > > > these
> > > > > lines
> > > > > could
> > > > > be appropriate.
> > > > > 
> > > > > It might be worth deciding on this up front, to make sure we
> > > > > don't
> > > > > have to
> > > > > backtrack at some point.
> > > > > 
> > > > > Best regards,
> > > > > Sönke
> > > > > 
> > > > > On Wed, Nov 20, 2024 at 2:31 AM Andor Molnar
> > > > > <an...@apache.org>
> > > > > wrote:
> > > > > 
> > > > > > Sounds like a plan, but I would do the 2 things in separate
> > > > > > patches: the
> > > > > > current patch covers the toggle for client hostname
> > > > > > verification
> > > > > > and I
> > > > > > think it’s already ready for submit.
> > > > > > 
> > > > > > Another patch should cover the alternate way of hostname
> > > > > > verification
> > > > > > based on what we discussed. Could you please update the
> > > > > > Jira
> > > > > > ticket(s)
> > > > > > accordingly to make sure we’re on the same page?
> > > > > > 
> > > > > > Thanks,
> > > > > > Andor
> > > > > > 
> > > > > > 
> > > > > > 
> > > > > > > On Nov 19, 2024, at 15:19, Sönke Liebau
> > > > > > <soenke.lie...@stackable.tech.INVALID> wrote:
> > > > > > > 
> > > > > > > It would be nice, being able to find out which peer is
> > > > > > > trying
> > > > > > > to
> > > > > > > connect,
> > > > > > > but as you say, we won't have the id available before the
> > > > > > > handshake is
> > > > > > done
> > > > > > > (unless we have users stick it in the cert, and I don't
> > > > > > > think
> > > > > > > we
> > > > > > > want
> > > > > > that
> > > > > > > :) )
> > > > > > > Anything we could do to find out would probably need to
> > > > > > > involve
> > > > > > > DNS and
> > > > > > > some dirty compromise.. so probably best to just not go
> > > > > > > there.
> > > > > > > 
> > > > > > > Your idea for backwards compatible config sounds sensible
> > > > > > > to
> > > > > > > me.
> > > > > > > It would probably make sense to get this done as part of
> > > > > > > https://github.com/apache/zookeeper/pull/2173 and discuss
> > > > > > > possible
> > > > > > config
> > > > > > > changes up front for everything?
> > > > > > > 
> > > > > > > Best, Sönke
> > > > > > > 
> > > > > > > 
> > > > > > > On Tue, 19 Nov 2024, 16:46 Andor Molnar,
> > > > > > > <an...@kazinczy.hu>
> > > > > > > wrote:
> > > > > > > 
> > > > > > > > Correction, sorry:
> > > > > > > > 
> > > > > > > > > Not necessarily one SAN matches, but _the one_
> > > > > > > > > matches
> > > > > > > > > which
> > > > > > corresponds
> > > > > > > > to the peer.
> > > > > > > > 
> > > > > > > > I meant not any of the listed server names matches in
> > > > > > > > zoo.cfg,
> > > > > > > > but we
> > > > > > > > might be able to identify which peer is trying to
> > > > > > > > connect.
> > > > > > > > This
> > > > > > > > is
> > > > > > probably
> > > > > > > > not feasible, because at the time of TLS handshake the
> > > > > > > > peer
> > > > > > > > id
> > > > > > > > is not
> > > > > > yet
> > > > > > > > available.
> > > > > > > > 
> > > > > > > > We should do this in backward compatible way: client
> > > > > > > > hostname
> > > > > > > > verification, by default, works at is, but we introduce
> > > > > > > > an
> > > > > > > > option to
> > > > > > > > disable reverse DNS lookups. That switches the behavior
> > > > > > > > to
> > > > > > > > check against
> > > > > > > > list of hostnames in zoo.cfg. In addition we enable
> > > > > > > > client
> > > > > > > > hostname
> > > > > > > > verification to be completely disabled too.
> > > > > > > > 
> > > > > > > > Wdyt?
> > > > > > > > 
> > > > > > > > Andor
> > > > > > > > 
> > > > > > > > 
> > > > > > > > 
> > > > > > > > 
> > > > > > > > > On Nov 19, 2024, at 09:38, Andor Molnar
> > > > > > > > > <an...@kazinczy.hu>
> > > > > > > > > wrote:
> > > > > > > > > 
> > > > > > > > > Hi Sönke,
> > > > > > > > > 
> > > > > > > > > Are you still working on the patch btw?
> > > > > > > > > https://github.com/apache/zookeeper/pull/2173
> > > > > > > > > 
> > > > > > > > > (Though I’m not sure if it was you who opened it)
> > > > > > > > > 
> > > > > > > > > Thanks for the pointer, ZooKeeper support for K8s is
> > > > > > > > > unfortunately
> > > > > > still
> > > > > > > > far from perfect. Introducing the FIPS mode option
> > > > > > > > might
> > > > > > > > not
> > > > > > > > have been
> > > > > > the
> > > > > > > > best choice, but we first faced the issue during FIPS
> > > > > > > > deployment where
> > > > > > you
> > > > > > > > cannot use custom hostname verificator, so we had to
> > > > > > > > disable it
> > > > > > completely.
> > > > > > > > > 
> > > > > > > > > I’d like to idea of
> > > > > > > > > 
> > > > > > > > > "The ZK server could verify the SAN against the list
> > > > > > > > > of
> > > > > > > > > servers
> > > > > > > > (servers.N in the config). A peer should be able to
> > > > > > > > connect
> > > > > > > > on
> > > > > > > > the
> > > > > > quorum
> > > > > > > > port if and only if at least one SAN matches at least
> > > > > > > > one
> > > > > > > > of
> > > > > > > > the listed
> > > > > > > > servers.”
> > > > > > > > > 
> > > > > > > > > Not necessarily one SAN matches, but _the one_
> > > > > > > > > matches
> > > > > > > > > which
> > > > > > corresponds
> > > > > > > > to the peer. Does that make sense? Not sure if
> > > > > > > > technically
> > > > > > > > feasible, but
> > > > > > > > are you willing to create a patch?
> > > > > > > > > 
> > > > > > > > > Regards,
> > > > > > > > > Andor
> > > > > > > > > 
> > > > > > > > > 
> > > > > > > > > 
> > > > > > > > > 
> > > > > > > > > > On Nov 19, 2024, at 03:11, Sönke Liebau
> > > > > > > > <soenke.lie...@stackable.tech.INVALID> wrote:
> > > > > > > > > > 
> > > > > > > > > > You are probably running into ZOOKEEPER-4790 [1]
> > > > > > > > > > here.
> > > > > > > > > > 
> > > > > > > > > > When we encountered this back in the day [2] we
> > > > > > > > > > figured
> > > > > > > > > > out
> > > > > > > > > > that
> > > > > > > > enabling
> > > > > > > > > > FIPS mode bypasses all the ZK specific TLS checks
> > > > > > > > > > and
> > > > > > > > > > makes
> > > > > > > > > > it work.
> > > > > > In
> > > > > > > > the
> > > > > > > > > > ZK version you are on it is not yet enabled by
> > > > > > > > > > default,
> > > > > > > > > > you
> > > > > > > > > > could
> > > > > > either
> > > > > > > > > > update or set  *zookeeper.fips-mode *and this error
> > > > > > > > > > _should_ go away.
> > > > > > > > > > 
> > > > > > > > > > Good luck :)
> > > > > > > > > > 
> > > > > > > > > > Best,
> > > > > > > > > > Sönke
> > > > > > > > > > 
> > > > > > > > > > [1]
> > > > > > > > > > https://issues.apache.org/jira/browse/ZOOKEEPER-4790
> > > > > > > > > > [2]
> > > > > > > > > > 
> > https://github.com/stackabletech/zookeeper-operator/issues/760
> > > > > > > > > > 
> > > > > > > > > > On Tue, Nov 19, 2024 at 9:08 AM Dharani (Jira)
> > > > > > > > > > <j...@apache.org>
> > > > > > wrote:
> > > > > > > > > > 
> > > > > > > > > > > Dharani created ZOOKEEPER-4887:
> > > > > > > > > > > ----------------------------------
> > > > > > > > > > > 
> > > > > > > > > > >           Summary: Zookeeper quorum formation
> > > > > > > > > > > fails
> > > > > > > > > > > when
> > > > > > > > > > > TLS is
> > > > > > > > enabled
> > > > > > > > > > > in k8s env
> > > > > > > > > > >               Key: ZOOKEEPER-4887
> > > > > > > > > > >               URL:
> > > > > > > > https://issues.apache.org/jira/browse/ZOOKEEPER-4887
> > > > > > > > > > >           Project: ZooKeeper
> > > > > > > > > > >        Issue Type: Bug
> > > > > > > > > > >  Affects Versions: 3.8.3
> > > > > > > > > > >          Reporter: Dharani
> > > > > > > > > > > 
> > > > > > > > > > > 
> > > > > > > > > > > We have three(3) node zookeeper cluster running
> > > > > > > > > > > as a
> > > > > > > > > > > pod
> > > > > > > > > > > on
> > > > > > Kubernetes
> > > > > > > > > > > cluster, zookeeper quorum formation fails with
> > > > > > > > > > > TLS
> > > > > > > > > > > handshake error,
> > > > > > as
> > > > > > > > the
> > > > > > > > > > > server name in the https request does not match
> > > > > > > > > > > with
> > > > > > > > > > > any
> > > > > > > > > > > of the SANs
> > > > > > > > in the
> > > > > > > > > > > certificate configured for zookeeper server.
> > > > > > > > > > > Server
> > > > > > > > > > > name
> > > > > > > > > > > in the
> > > > > > > > request is
> > > > > > > > > > > of the form "x-x-x-
> > > > > > > > > > > x.kubernetes.default.svc.cluster.local" (where
> > > > > > > > x-x-x-x
> > > > > > > > > > > is the IP address of the POD), and I am unable to
> > > > > > > > > > > understand the
> > > > > > reason
> > > > > > > > > > > behind pre-pending FQDN with a IP address.
> > > > > > > > > > > 
> > > > > > > > > > > 
> > > > > > > > > > > 
> > > > > > > > > > > Please find below the extract of the error logs
> > > > > > > > > > > from
> > > > > > > > > > > the
> > > > > > > > > > > zookeeper
> > > > > > POD
> > > > > > > > > > > {code:java}
> > > > > > > > > > > [myid:] - ERROR [LearnerHandler-/192.168.220.
> > > > > > > > > > > 10:46516:o.a.z.c.ZKTrustManager@191] - Failed to
> > > > > > > > > > > verify
> > > > > > > > > > > host
> > > > > > address:
> > > > > > > > > > > 192.168.220.10
> > > > > > > > > > > javax.net.ssl.SSLPeerUnverifiedException:
> > > > > > > > > > > Certificate
> > > > > > > > > > > for
> > > > > > > > <192.168.220.10>
> > > > > > > > > > > doesn't match any of the subject alternative
> > > > > > > > > > > names:
> > > > > > > > > > > [eric-data-coordinator-zk, eric-data-coordinator-
> > > > > > > > > > > zk.zdhagxx1,
> > > > > > > > > > > eric-data-coordinator-zk.zdhagxx1.svc,
> > > > > > > > > > > eric-data-coordinator-
> > > > > > > > > > > zk.zdhagxx1.svc.cluster.local,
> > > > > > > > > > > 
> > > > > > *.eric-data-coordinator-zk-ensemble-
> > > > > > service.zdhagxx1.svc.cluster.local,
> > > > > > > > > > > certified-scrape-target]
> > > > > > > > > > > 
> > > > > > > > > > > 
> > > > > > > > 
> > > > > > org.apache.zookeeper.common.ZKHostnameVerifier.matchIPAddre
> > > > > > ss(Z
> > > > > > KHos
> > > > > > tnameVerifier.java:197)
> > > > > > > > > > > 
> > > > > > > > > > > 
> > > > > > > > 
> > > > > > org.apache.zookeeper.common.ZKHostnameVerifier.verify(ZKHos
> > > > > > tnam
> > > > > > eVer
> > > > > > ifier.java:165)
> > > > > > > > > > > 
> > > > > > > > > > > 
> > > > > > > > 
> > > > > > org.apache.zookeeper.common.ZKTrustManager.performHostVerif
> > > > > > icat
> > > > > > ion(
> > > > > > ZKTrustManager.java:180)
> > > > > > > > > > > 
> > > > > > > > > > > 
> > > > > > > > 
> > > > > > org.apache.zookeeper.common.ZKTrustManager.checkClientTrust
> > > > > > ed(Z
> > > > > > KTru
> > > > > > stManager.java:93)
> > > > > > > > > > > 
> > > > > > > > > > > 
> > > > > > > > 
> > > > > > java.base/sun.security.ssl.CertificateMessage$T13Certificat
> > > > > > eCon
> > > > > > sume
> > > > > > r.checkClientCerts(CertificateMessage.java:1285)
> > > > > > > > > > > 
> > > > > > > > > > > 
> > > > > > > > 
> > > > > > java.base/sun.security.ssl.CertificateMessage$T13Certificat
> > > > > > eCon
> > > > > > sume
> > > > > > r.onConsumeCertificate(CertificateMessage.java:1204)
> > > > > > > > > > > 
> > > > > > > > > > > 
> > > > > > > > 
> > > > > > java.base/sun.security.ssl.CertificateMessage$T13Certificat
> > > > > > eCon
> > > > > > sume
> > > > > > r.consume(CertificateMessage.java:1181)
> > > > > > > > > > > 
> > > > > > java.base/sun.security.ssl.SSLHandshake.consume(SSLHandshak
> > > > > > e.ja
> > > > > > va:3
> > > > > > 92)
> > > > > > > > > > > 
> > > > > > > > > > > 
> > > > > > > > 
> > > > > > java.base/sun.security.ssl.HandshakeContext.dispatch(Handsh
> > > > > > akeC
> > > > > > onte
> > > > > > xt.java:443)
> > > > > > > > > > > 
> > > > > > > > > > > 
> > > > > > > > 
> > > > > > java.base/sun.security.ssl.HandshakeContext.dispatch(Handsh
> > > > > > akeC
> > > > > > onte
> > > > > > xt.java:421)
> > > > > > > > > > > 
> > > > > > > > > > > 
> > > > > > > > 
> > > > > > java.base/sun.security.ssl.TransportContext.dispatch(Transp
> > > > > > ortC
> > > > > > onte
> > > > > > xt.java:183)
> > > > > > > > > > > java.base/sun.security.ssl.SSLTransport.decode(SS
> > > > > > > > > > > LTra
> > > > > > > > > > > nspo
> > > > > > > > > > > rt.java:172)
> > > > > > > > > > > 
> > > > > > > > java.base/sun.security.ssl.SSLSocketImpl.decode(SSLSock
> > > > > > > > etIm
> > > > > > > > pl.j
> > > > > > > > ava:1511)
> > > > > > > > > > > 
> > > > > > > > > > > 
> > > > > > > > 
> > > > > > java.base/sun.security.ssl.SSLSocketImpl.readHandshakeRecor
> > > > > > d(SS
> > > > > > LSoc
> > > > > > ketImpl.java:1421)
> > > > > > > > > > > 
> > > > > > > > > > > 
> > > > > > > > 
> > > > > > java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSL
> > > > > > Sock
> > > > > > etIm
> > > > > > pl.java:456)
> > > > > > > > > > > 
> > > > > > > > > > > 
> > > > > > > > 
> > > > > > java.base/sun.security.ssl.SSLSocketImpl.ensureNegotiated(S
> > > > > > SLSo
> > > > > > cket
> > > > > > Impl.java:926)
> > > > > > > > > > > 
> > > > > > > > 
> > > > > > java.base/sun.security.ssl.SSLSocketImpl.getSession(SSLSock
> > > > > > etIm
> > > > > > pl.j
> > > > > > ava:372)
> > > > > > > > > > > 
> > > > > > > > > > > 
> > > > > > > > 
> > > > > > org.apache.zookeeper.server.quorum.UnifiedServerSocket$Unif
> > > > > > iedS
> > > > > > ocke
> > > > > > t.detectMode(UnifiedServerSocket.java:269)
> > > > > > > > > > > 
> > > > > > > > > > > 
> > > > > > > > 
> > > > > > org.apache.zookeeper.server.quorum.UnifiedServerSocket$Unif
> > > > > > iedS
> > > > > > ocke
> > > > > > t.getSocket(UnifiedServerSocket.java:298)
> > > > > > > > > > > 
> > > > > > > > > > > 
> > > > > > > > 
> > > > > > org.apache.zookeeper.server.quorum.UnifiedServerSocket$Unif
> > > > > > iedS
> > > > > > ocke
> > > > > > t.access$400(UnifiedServerSocket.java:172)
> > > > > > > > > > > 
> > > > > > > > 
> > > > > > org.apache.zookeeper.server.quorum.UnifiedServerSocket$Unif
> > > > > > iedI
> > > > > > nput
> > > > > > Stream.getRealInputStream(UnifiedServerSocket.java:699)
> > > > > > > > > > > 
> > > > > > > > 
> > > > > > org.apache.zookeeper.server.quorum.UnifiedServerSocket$Unif
> > > > > > iedI
> > > > > > nput
> > > > > > Stream.read(UnifiedServerSocket.java:693)
> > > > > > > > > > > java.base/java.io
> > > > > > > > .BufferedInputStream.fill(BufferedInputStream.java:252)
> > > > > > > > > > > java.base/java.io
> > > > > > > > .BufferedInputStream.read(BufferedInputStream.java:271)
> > > > > > > > > > > java.base/java.io.DataInputStream.readInt(DataInp
> > > > > > > > > > > utSt
> > > > > > > > > > > ream
> > > > > > > > > > > .java:392)
> > > > > > > > > > > 
> > > > > > org.apache.jute.BinaryInputArchive.readInt(BinaryInputArchi
> > > > > > ve.j
> > > > > > ava:
> > > > > > 96)
> > > > > > > > > > > 
> > > > > > > > > > > 
> > > > > > > > 
> > > > > > org.apache.zookeeper.server.quorum.QuorumPacket.deserialize
> > > > > > (Quo
> > > > > > rumP
> > > > > > acket.java:86)
> > > > > > > > > > > 
> > > > > > > > 
> > > > > > org.apache.jute.BinaryInputArchive.readRecord(BinaryInputAr
> > > > > > chiv
> > > > > > e.ja
> > > > > > va:134)
> > > > > > > > > > > 
> > > > > > > > 
> > > > > > org.apache.zookeeper.server.quorum.LearnerHandler.run(Learn
> > > > > > erHa
> > > > > > ndle
> > > > > > r.java:472)[myid:]
> > > > > > > > > > > - ERROR [LearnerHandler-/192.168.220.
> > > > > > > > 10:46516:o.a.z.c.ZKTrustManager@192]
> > > > > > > > > > > - Failed to verify hostname:
> > > > > > > > > > > 192-168-220-10.eric-data-coordinator-
> > > > > > > > > > > zk.zdhagxx1.svc.cluster.local
> > > > > > > > > > > javax.net.ssl.SSLPeerUnverifiedException:
> > > > > > > > > > > Certificate
> > > > > > > > > > > for
> > > > > > > > > > > <192-168-220-10.eric-data-coordinator-
> > > > > > > > > > > zk.zdhagxx1.svc.cluster.local>
> > > > > > > > > > > doesn't match any of the subject alternative
> > > > > > > > > > > names:
> > > > > > > > > > > [eric-data-coordinator-zk, eric-data-coordinator-
> > > > > > > > > > > zk.zdhagxx1,
> > > > > > > > > > > eric-data-coordinator-zk.zdhagxx1.svc,
> > > > > > > > > > > eric-data-coordinator-
> > > > > > > > > > > zk.zdhagxx1.svc.cluster.local,
> > > > > > > > > > > 
> > > > > > *.eric-data-coordinator-zk-ensemble-
> > > > > > service.zdhagxx1.svc.cluster.local,
> > > > > > > > > > > certified-scrape-target]
> > > > > > > > > > > 
> > > > > > > > 
> > > > > > org.apache.zookeeper.common.ZKHostnameVerifier.matchDNSName
> > > > > > (ZKH
> > > > > > ostn
> > > > > > ameVerifier.java:230)
> > > > > > > > > > > 
> > > > > > > > 
> > > > > > org.apache.zookeeper.common.ZKHostnameVerifier.verify(ZKHos
> > > > > > tnam
> > > > > > eVer
> > > > > > ifier.java:171)
> > > > > > > > > > > 
> > > > > > > > > > > 
> > > > > > > > 
> > > > > > org.apache.zookeeper.common.ZKTrustManager.performHostVerif
> > > > > > icat
> > > > > > ion(
> > > > > > ZKTrustManager.java:189)
> > > > > > > > > > > 
> > > > > > > > > > > 
> > > > > > > > 
> > > > > > org.apache.zookeeper.common.ZKTrustManager.checkClientTrust
> > > > > > ed(Z
> > > > > > KTru
> > > > > > stManager.java:93)
> > > > > > > > > > > 
> > > > > > > > 
> > > > > > java.base/sun.security.ssl.CertificateMessage$T13Certificat
> > > > > > eCon
> > > > > > sume
> > > > > > r.checkClientCerts(CertificateMessage.java:1285)
> > > > > > > > > > > 
> > > > > > > > 
> > > > > > java.base/sun.security.ssl.CertificateMessage$T13Certificat
> > > > > > eCon
> > > > > > sume
> > > > > > r.onConsumeCertificate(CertificateMessage.java:1204)
> > > > > > > > > > > 
> > > > > > > > 
> > > > > > java.base/sun.security.ssl.CertificateMessage$T13Certificat
> > > > > > eCon
> > > > > > sume
> > > > > > r.consume(CertificateMessage.java:1181)
> > > > > > > > > > > 
> > > > > > java.base/sun.security.ssl.SSLHandshake.consume(SSLHandshak
> > > > > > e.ja
> > > > > > va:3
> > > > > > 92)
> > > > > > > > > > > 
> > > > > > > > > > > 
> > > > > > > > 
> > > > > > java.base/sun.security.ssl.HandshakeContext.dispatch(Handsh
> > > > > > akeC
> > > > > > onte
> > > > > > xt.java:443)
> > > > > > > > > > > 
> > > > > > > > > > > 
> > > > > > > > 
> > > > > > java.base/sun.security.ssl.HandshakeContext.dispatch(Handsh
> > > > > > akeC
> > > > > > onte
> > > > > > xt.java:421)
> > > > > > > > > > > 
> > > > > > > > > > > 
> > > > > > > > 
> > > > > > java.base/sun.security.ssl.TransportContext.dispatch(Transp
> > > > > > ortC
> > > > > > onte
> > > > > > xt.java:183)
> > > > > > > > > > > java.base/sun.security.ssl.SSLTransport.decode(SS
> > > > > > > > > > > LTra
> > > > > > > > > > > nspo
> > > > > > > > > > > rt.java:172)
> > > > > > > > > > > 
> > > > > > > > java.base/sun.security.ssl.SSLSocketImpl.decode(SSLSock
> > > > > > > > etIm
> > > > > > > > pl.j
> > > > > > > > ava:1511)
> > > > > > > > > > > 
> > > > > > > > > > > 
> > > > > > > > 
> > > > > > java.base/sun.security.ssl.SSLSocketImpl.readHandshakeRecor
> > > > > > d(SS
> > > > > > LSoc
> > > > > > ketImpl.java:1421)
> > > > > > > > > > > 
> > > > > > > > > > > 
> > > > > > > > 
> > > > > > java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSL
> > > > > > Sock
> > > > > > etIm
> > > > > > pl.java:456)
> > > > > > > > > > > 
> > > > > > > > > > > 
> > > > > > > > 
> > > > > > java.base/sun.security.ssl.SSLSocketImpl.ensureNegotiated(S
> > > > > > SLSo
> > > > > > cket
> > > > > > Impl.java:926)
> > > > > > > > > > > 
> > > > > > > > 
> > > > > > java.base/sun.security.ssl.SSLSocketImpl.getSession(SSLSock
> > > > > > etIm
> > > > > > pl.j
> > > > > > ava:372)
> > > > > > > > > > > 
> > > > > > > > > > > 
> > > > > > > > 
> > > > > > org.apache.zookeeper.server.quorum.UnifiedServerSocket$Unif
> > > > > > iedS
> > > > > > ocke
> > > > > > t.detectMode(UnifiedServerSocket.java:269)
> > > > > > > > > > > 
> > > > > > > > > > > 
> > > > > > > > 
> > > > > > org.apache.zookeeper.server.quorum.UnifiedServerSocket$Unif
> > > > > > iedS
> > > > > > ocke
> > > > > > t.getSocket(UnifiedServerSocket.java:298)
> > > > > > > > > > > 
> > > > > > > > > > > 
> > > > > > > > 
> > > > > > org.apache.zookeeper.server.quorum.UnifiedServerSocket$Unif
> > > > > > iedS
> > > > > > ocke
> > > > > > t.access$400(UnifiedServerSocket.java:172)
> > > > > > > > > > > 
> > > > > > > > > > > 
> > > > > > > > 
> > > > > > org.apache.zookeeper.server.quorum.UnifiedServerSocket$Unif
> > > > > > iedI
> > > > > > nput
> > > > > > Stream.getRealInputStream(UnifiedServerSocket.java:699)
> > > > > > > > > > > 
> > > > > > > > > > > 
> > > > > > > > 
> > > > > > org.apache.zookeeper.server.quorum.UnifiedServerSocket$Unif
> > > > > > iedI
> > > > > > nput
> > > > > > Stream.read(UnifiedServerSocket.java:693)
> > > > > > > > > > > java.base/java.io
> > > > > > > > .BufferedInputStream.fill(BufferedInputStream.java:252)
> > > > > > > > > > > java.base/java.io
> > > > > > > > .BufferedInputStream.read(BufferedInputStream.java:271)
> > > > > > > > > > > java.base/java.io.DataInputStream.readInt(DataInp
> > > > > > > > > > > utSt
> > > > > > > > > > > ream
> > > > > > > > > > > .java:392)
> > > > > > > > > > > 
> > > > > > org.apache.jute.BinaryInputArchive.readInt(BinaryInputArchi
> > > > > > ve.j
> > > > > > ava:
> > > > > > 96)
> > > > > > > > > > > 
> > > > > > > > > > > 
> > > > > > > > 
> > > > > > org.apache.zookeeper.server.quorum.QuorumPacket.deserialize
> > > > > > (Quo
> > > > > > rumP
> > > > > > acket.java:86)
> > > > > > > > > > > 
> > > > > > > > 
> > > > > > org.apache.jute.BinaryInputArchive.readRecord(BinaryInputAr
> > > > > > chiv
> > > > > > e.ja
> > > > > > va:134)
> > > > > > > > > > > 
> > > > > > > > 
> > > > > > org.apache.zookeeper.server.quorum.LearnerHandler.run(Learn
> > > > > > erHa
> > > > > > ndle
> > > > > > r.java:472)
> > > > > > > > > > > {code}
> > > > > > > > > > > 
> > > > > > > > > > > 
> > > > > > > > > > > 
> > > > > > > > > > > --
> > > > > > > > > > > This message was sent by Atlassian Jira
> > > > > > > > > > > (v8.20.10#820010)
> > > > > > > > > > > 
> > > > > > > > > 
> > > > > > > > 
> > > > > > > > 
> > > > > > 
> > > > > > 
> > > > 
> > > > 
> > 
> > 

Reply via email to