OkHostName verifier unable to verify ipv6 addresses
- Dominant language
- Java
- Stars
- 1.4k
- Forks
- 326
- Avg merge
- 16h 22m
- Merged PRs (30d)
- 17
Description
**java -version**
openjdk version "11.0.15" 2022-04-19
OpenJDK Runtime Environment (build 11.0.15+10-post-Debian-1deb10u1)
OpenJDK 64-Bit Server VM (build 11.0.15+10-post-Debian-1deb10u1, mixed mode, sharing)
**uname- a**
Linux example 5.10.104-custom #1 SMP Mon Sep 27 00:00:00 UTC 2010 x86_64 GNU/Linux
Using
**conscrypt tag 2.5.0.**
We are trying to use conscrypt as ssl provider for kafka and we are getting in to issues while using verify ip address.
In our certificate we have the following ipv6 ip addresses ( its not the real address, but something similar)
IPAddress: 2001:0db8:85a3:1130::0370:7334
IPAddress: 2001:0db8:85a3:1130:0:0:0370:7334
IPAddress: 2001:0db8:85a3:1130:0000:0000:0370:7334
Here in this example, the real ip address of the host is 2001:0db8:85a3:1130:0:0:0370:7334, but when Conscrypt engine's [okhostnameverifier](https://github.com/google/conscrypt/blob/master/common/src/main/java/org/conscrypt/OkHostnameVerifier.java), [getSubjectAltNames(certificate, ALT_IPA_NAME)](https://github.com/google/conscrypt/blob/3171d2ad4a0a86a1dd46da6c803fd28fe0479ecb/common/src/main/java/org/conscrypt/OkHostnameVerifier.java#L99) returns the three altnames as
below 2001:0db8:85a3:1130::0370:7334 ( and does not return the other two ip addresses one of which also contains the machines ip address ). And because of this and since we are using [if (ipAddress.equalsIgnoreCase(altNames.get(i)))](https://github.com/google/conscrypt/blob/3171d2ad4a0a86a1dd46da6c803fd28fe0479ecb/common/src/main/java/org/conscrypt/OkHostnameVerifier.java#L102), in , the ip address verification returns false, resulting in the below exception
javax.net.ssl.SSLHandshakeException: No subjectAltNames on the certificate match
I am looking for what is the best way to verify ip address as subject alt names is returning ip address in only one format ( 2001:0db8:85a3:1130::0370:7334 and not 2001:0db8:85a3:1130:0:0:0370:7334, which is the machines ip address ) and since we use equalsignorecase, it fails even if the ssl certificate contains the correct altnames.
Could some one please help on what would be the best way to verifyIpAddress in okhostname verifier ? Should the certificate need to have a different ip address format so that the verification succeeds ?
Contributor guide
Assessment
This issue has not been assessed yet.