[
https://issues.apache.org/jira/browse/HTTPCLIENT-2370?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17952097#comment-17952097
]
Christian Habermehl commented on HTTPCLIENT-2370:
-------------------------------------------------
Here is a Test that runs successfully with version 5.4.2 and fails with version
5.4.3
{code:java}
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.List;
import javax.net.ssl.SSLException;
import org.apache.hc.client5.http.psl.PublicSuffixMatcherLoader;
import org.apache.hc.client5.http.ssl.DefaultHostnameVerifier;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
class DefaultHostnameVerifierTest {
@Test
void testHostMatcherAlternativeNames() throws CertificateException,
SSLException {
List<List<?>> alternativeNames =
createtAlternativeNames("s3.eu-west-1.amazonaws.com");
X509Certificate certificate = Mockito.mock(X509Certificate.class);
Mockito.when(certificate.getSubjectAlternativeNames()).thenReturn(alternativeNames);
DefaultHostnameVerifier defaultHostnameVerifier = new
DefaultHostnameVerifier(PublicSuffixMatcherLoader.getDefault());
defaultHostnameVerifier.verify("s3.eu-west-1.amazonaws.com",
certificate);
}
private static List<List<?>> createtAlternativeNames(String... names) {
List<List<?>> alternativeNames = new ArrayList<>();
for (String name : names) {
alternativeNames.add(List.of(2, name));
}
return alternativeNames;
}
}
{code}
> Wrong SSLPeerUnverifiedException with httpclient5
> --------------------------------------------------
>
> Key: HTTPCLIENT-2370
> URL: https://issues.apache.org/jira/browse/HTTPCLIENT-2370
> Project: HttpComponents HttpClient
> Issue Type: Bug
> Affects Versions: 5.4.3
> Environment: Linux / MacOS / Java 21
> Reporter: Christian Habermehl
> Priority: Major
>
> When I try to download a file from s3.eu-west-1.amazonaws.com I get this
> exception:
> {code}
> javax.net.ssl.SSLPeerUnverifiedException: Certificate for
> <s3.eu-west-1.amazonaws.com> doesn't match any of the subject alternative
> names: [s3-eu-west-1.amazonaws.com, *.s3-eu-west-1.amazonaws.com,
> s3.eu-west-1.amazonaws.com, *.s3.eu-west-1.amazonaws.com,
> s3.dualstack.eu-west-1.amazonaws.com, *.s3.dualstack.eu-west-1.amazonaws.com,
> *.s3.amazonaws.com, *.s3-control.eu-west-1.amazonaws.com,
> s3-control.eu-west-1.amazonaws.com,
> *.s3-control.dualstack.eu-west-1.amazonaws.com,
> s3-control.dualstack.eu-west-1.amazonaws.com,
> *.s3-accesspoint.eu-west-1.amazonaws.com,
> *.s3-accesspoint.dualstack.eu-west-1.amazonaws.com,
> *.s3-deprecated.eu-west-1.amazonaws.com,
> s3-deprecated.eu-west-1.amazonaws.com, s3-external-3.amazonaws.com,
> *.s3-external-3.amazonaws.com]
> at
> org.apache.hc.client5.http.ssl.DefaultHostnameVerifier.matchDNSName(DefaultHostnameVerifier.java:172)
> at
> org.apache.hc.client5.http.ssl.DefaultHostnameVerifier.verify(DefaultHostnameVerifier.java:130)
> at
> org.apache.hc.client5.http.ssl.AbstractClientTlsStrategy.verifySession(AbstractClientTlsStrategy.java:316)
> at
> org.apache.hc.client5.http.ssl.AbstractClientTlsStrategy.verifySession(AbstractClientTlsStrategy.java:194)
> at
> org.apache.hc.client5.http.ssl.AbstractClientTlsStrategy.executeHandshake(AbstractClientTlsStrategy.java:253)
> at
> org.apache.hc.client5.http.ssl.AbstractClientTlsStrategy.upgrade(AbstractClientTlsStrategy.java:210)
> at
> org.apache.hc.client5.http.ssl.DefaultClientTlsStrategy.upgrade(DefaultClientTlsStrategy.java:48)
> at
> org.apache.hc.client5.http.impl.io.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:231)
> at
> org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:490)
> at
> org.apache.hc.client5.http.impl.classic.InternalExecRuntime.connectEndpoint(InternalExecRuntime.java:164)
> at
> org.apache.hc.client5.http.impl.classic.InternalExecRuntime.connectEndpoint(InternalExecRuntime.java:174)
> at
> org.apache.hc.client5.http.impl.classic.ConnectExec.execute(ConnectExec.java:144)
> at
> org.apache.hc.client5.http.impl.classic.ExecChainElement.execute(ExecChainElement.java:51)
> at
> org.apache.hc.client5.http.impl.classic.ProtocolExec.execute(ProtocolExec.java:192)
> at
> org.apache.hc.client5.http.impl.classic.ExecChainElement.execute(ExecChainElement.java:51)
> at
> org.apache.hc.client5.http.impl.classic.ContentCompressionExec.execute(ContentCompressionExec.java:150)
> at
> org.apache.hc.client5.http.impl.classic.ExecChainElement.execute(ExecChainElement.java:51)
> at
> org.apache.hc.client5.http.impl.classic.HttpRequestRetryExec.execute(HttpRequestRetryExec.java:113)
> at
> org.apache.hc.client5.http.impl.classic.ExecChainElement.execute(ExecChainElement.java:51)
> at
> org.apache.hc.client5.http.impl.classic.RedirectExec.execute(RedirectExec.java:110)
> at
> org.apache.hc.client5.http.impl.classic.ExecChainElement.execute(ExecChainElement.java:51)
> at
> org.apache.hc.client5.http.impl.classic.InternalHttpClient.doExecute(InternalHttpClient.java:183)
> at
> org.apache.hc.client5.http.impl.classic.CloseableHttpClient.execute(CloseableHttpClient.java:245)
> at
> org.apache.hc.client5.http.impl.classic.CloseableHttpClient.execute(CloseableHttpClient.java:188)
> at
> org.apache.hc.client5.http.impl.classic.CloseableHttpClient.execute(CloseableHttpClient.java:162)
> {code}
> even though the DomainName is part of the alternative Names.
> It seems that when comparing the DomainNames the Host
> "s3.eu-west-1.amazonaws.com" is compared to ".s3.eu-west-1.amazonaws.com" and
> this fails.
> with version 5.4.2 the download works without problems.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]