You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hc.apache.org by "Wolfgang Schell (Jira)" <ji...@apache.org> on 2020/03/04 16:32:00 UTC
[jira] [Created] (HTTPCLIENT-2055) Verification of certificates
containing wildcard SANs fails to non-public domains
Wolfgang Schell created HTTPCLIENT-2055:
-------------------------------------------
Summary: Verification of certificates containing wildcard SANs fails to non-public domains
Key: HTTPCLIENT-2055
URL: https://issues.apache.org/jira/browse/HTTPCLIENT-2055
Project: HttpComponents HttpClient
Issue Type: Bug
Affects Versions: 4.5.11, 4.5.9
Reporter: Wolfgang Schell
This case is very similar to HTTPCLIENT-1997:
Using a certificate containing wildcard domain names as subject alternative name (SAN) for non-public domains (i.e. something like a {{.mycorp}} TLD) fails in some versions of HttpClient:
The following (JUnit 4) test case demonstrates the issue:
{code:java}
package org.apache.http.conn.ssl;
import static org.junit.Assert.fail;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.conn.util.PublicSuffixMatcher;
import org.apache.http.conn.util.PublicSuffixMatcherLoader;
import org.junit.Test;
public class CertificateTest {
@Test
public void testSubjectAlternativeNames_WithWildcards() throws Exception {
List<SubjectName> subjectAlts = new ArrayList<>();
PublicSuffixMatcher publicSuffixMatcher = PublicSuffixMatcherLoader.getDefault();
// assume a certificate with multiple SANs, some of which might contain wildcards
String host = "my-service-http.apps.system.mycorp";
subjectAlts.add(SubjectName.DNS("apps.system.mycorp"));
subjectAlts.add(SubjectName.DNS("*.apps.system.mycorp"));
try {
DefaultHostnameVerifier.matchDNSName(host, subjectAlts, publicSuffixMatcher);
}
catch (Exception e) {
fail("verification failed: " + e.getMessage());
}
}
} {code}
Here is the result for various HttpClient versions:
4.5.9: fail
4.5.10: success (fix by HTTPCLIENT-1997)
4.5.11: fail (broken by HTTPCLIENT-2030)
With the 4.5.11 code base I'm wondering why {{DefaultHostnameVerifier.matchDNSName()}} would assume that this is a ICANN (i.e. public) domain.
Passing {{DomainType.UNKNOWN}} instead of {{DomainType.ICANN}} to {{matchIdentityStrict()}} solves this issue (but I'm not sure if that has other issue elsewhere in the code).
A workaround is to add the private domain name {{mycorp}} to resource {{/mozilla/public-suffix-list.txt}} on the classpath (the default version of which is provided by HttpClient). This is tricky to solve, though, as one has to make sure to have the modified version in the classpath before {{httpclient-<version>.jar}}.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@hc.apache.org
For additional commands, e-mail: dev-help@hc.apache.org