HTTPCLIENT-1255: AbstractVerifier incorrectly parses certificate CN containing wildcard
git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk@1406217 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
44f798c9bf
commit
b930227f90
|
@ -1,7 +1,10 @@
|
||||||
Changes since 4.2.1
|
Changes in trunk
|
||||||
-------------------
|
-------------------
|
||||||
|
|
||||||
* [HTTPCLIENT-1248]: Default and lax redirect strategies should not convert requests redirected
|
* [HTTPCLIENT-1255] AbstractVerifier incorrectly parses certificate CN containing wildcard
|
||||||
|
Contributed by Oleg Kalnichevski <olegk at apache.org>
|
||||||
|
|
||||||
|
* [HTTPCLIENT-1248] Default and lax redirect strategies should not convert requests redirected
|
||||||
with 307 status to GET method.
|
with 307 status to GET method.
|
||||||
Contributed by Oleg Kalnichevski <olegk at apache.org>
|
Contributed by Oleg Kalnichevski <olegk at apache.org>
|
||||||
|
|
||||||
|
|
|
@ -43,8 +43,6 @@ import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.StringTokenizer;
|
import java.util.StringTokenizer;
|
||||||
import java.util.logging.Logger;
|
|
||||||
import java.util.logging.Level;
|
|
||||||
|
|
||||||
import javax.net.ssl.SSLException;
|
import javax.net.ssl.SSLException;
|
||||||
import javax.net.ssl.SSLSession;
|
import javax.net.ssl.SSLSession;
|
||||||
|
@ -204,9 +202,10 @@ public abstract class AbstractVerifier implements X509HostnameVerifier {
|
||||||
!isIPAddress(host);
|
!isIPAddress(host);
|
||||||
|
|
||||||
if(doWildcard) {
|
if(doWildcard) {
|
||||||
if (parts[0].length() > 1) { // e.g. server*
|
String firstpart = parts[0];
|
||||||
String prefix = parts[0].substring(0, parts.length-2); // e.g. server
|
if (firstpart.length() > 1) { // e.g. server*
|
||||||
String suffix = cn.substring(parts[0].length()); // skip wildcard part from cn
|
String prefix = firstpart.substring(0, firstpart.length() - 1); // e.g. server
|
||||||
|
String suffix = cn.substring(firstpart.length()); // skip wildcard part from cn
|
||||||
String hostSuffix = hostName.substring(prefix.length()); // skip wildcard part from host
|
String hostSuffix = hostName.substring(prefix.length()); // skip wildcard part from host
|
||||||
match = hostName.startsWith(prefix) && hostSuffix.endsWith(suffix);
|
match = hostName.startsWith(prefix) && hostSuffix.endsWith(suffix);
|
||||||
} else {
|
} else {
|
||||||
|
@ -302,8 +301,6 @@ public abstract class AbstractVerifier implements X509HostnameVerifier {
|
||||||
c = cert.getSubjectAlternativeNames();
|
c = cert.getSubjectAlternativeNames();
|
||||||
}
|
}
|
||||||
catch(CertificateParsingException cpe) {
|
catch(CertificateParsingException cpe) {
|
||||||
Logger.getLogger(AbstractVerifier.class.getName())
|
|
||||||
.log(Level.FINE, "Error parsing certificate.", cpe);
|
|
||||||
}
|
}
|
||||||
if(c != null) {
|
if(c != null) {
|
||||||
for (List<?> aC : c) {
|
for (List<?> aC : c) {
|
||||||
|
|
|
@ -300,7 +300,7 @@ public class TestHostnameVerifier {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void HTTPCLIENT_1097() {
|
public void testHTTPCLIENT_1097() {
|
||||||
String cns[];
|
String cns[];
|
||||||
String alt[] = {};
|
String alt[] = {};
|
||||||
X509HostnameVerifier bhv = new BrowserCompatHostnameVerifier();
|
X509HostnameVerifier bhv = new BrowserCompatHostnameVerifier();
|
||||||
|
@ -318,6 +318,17 @@ public class TestHostnameVerifier {
|
||||||
checkWildcard("s*.gouv.uk", false); // 2 character TLD, invalid 2TLD
|
checkWildcard("s*.gouv.uk", false); // 2 character TLD, invalid 2TLD
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testHTTPCLIENT_1255() {
|
||||||
|
X509HostnameVerifier bhv = new BrowserCompatHostnameVerifier();
|
||||||
|
X509HostnameVerifier shv = new StrictHostnameVerifier();
|
||||||
|
|
||||||
|
String cns[] = new String []{"m*.a.b.c.com"}; // component part
|
||||||
|
String alt[] = {};
|
||||||
|
checkMatching(bhv, "mail.a.b.c.com", cns, alt, false); // OK
|
||||||
|
checkMatching(shv, "mail.a.b.c.com", cns, alt, false); // OK
|
||||||
|
}
|
||||||
|
|
||||||
// Helper
|
// Helper
|
||||||
private void checkWildcard(String host, boolean isOK) {
|
private void checkWildcard(String host, boolean isOK) {
|
||||||
Assert.assertTrue(host+" should be "+isOK, isOK==AbstractVerifier.acceptableCountryWildcard(host));
|
Assert.assertTrue(host+" should be "+isOK, isOK==AbstractVerifier.acceptableCountryWildcard(host));
|
||||||
|
|
Loading…
Reference in New Issue