/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package tests.api.javax.net.ssl; import java.io.ByteArrayInputStream; import java.net.URL; import java.security.Principal; import java.security.cert.Certificate; import java.security.cert.CertificateException; import java.security.cert.CertificateFactory; import javax.net.ssl.HostnameVerifier; import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.SSLPeerUnverifiedException; import javax.net.ssl.SSLSession; import javax.net.ssl.SSLSocketFactory; import org.apache.harmony.security.tests.support.cert.TestUtils; import junit.framework.TestCase; /** * Tests for <code>HttpsURLConnection</code> class constructors and methods. * */ public class HttpsURLConnectionTest extends TestCase { /** * javax.net.ssl.HttpsURLConnection#HttpsURLConnection(java_net_URL) */ public final void test_Constructor() throws Exception { new MyHttpsURLConnection(new URL("https://www.fortify.net/")); new MyHttpsURLConnection(null); } /** * javax.net.ssl.HttpsURLConnection#getCipherSuite() */ public final void test_getCipherSuite() throws Exception { URL url = new URL("https://localhost:55555"); HttpsURLConnection connection = (HttpsURLConnection) url.openConnection(); try { connection.getCipherSuite(); fail("IllegalStateException wasn't thrown"); } catch (IllegalStateException expected) { } HttpsURLConnection con = new MyHttpsURLConnection(new URL("https://www.fortify.net/")); assertEquals("CipherSuite", con.getCipherSuite()); } /** * javax.net.ssl.HttpsURLConnection#getLocalCertificates() */ public final void test_getLocalCertificates() throws Exception { URL url = new URL("https://localhost:55555"); HttpsURLConnection connection = (HttpsURLConnection) url.openConnection(); try { connection.getLocalCertificates(); fail("IllegalStateException wasn't thrown"); } catch (IllegalStateException expected) { } HttpsURLConnection con = new MyHttpsURLConnection(new URL("https://www.fortify.net/"), "X.508"); assertNull(con.getLocalCertificates()); con = new MyHttpsURLConnection(new URL("https://www.fortify.net/"), "X.509"); Certificate[] cert = con.getLocalCertificates(); assertNotNull(cert); assertEquals(1, cert.length); } /** * javax.net.ssl.HttpsURLConnection#getDefaultHostnameVerifier() */ public final void test_getDefaultHostnameVerifier() { HostnameVerifier verifyer = HttpsURLConnection.getDefaultHostnameVerifier(); assertNotNull("Default hostname verifyer is null", verifyer); } /** * javax.net.ssl.HttpsURLConnection#getDefaultSSLSocketFactory() */ public final void test_getDefaultSSLSocketFactory() { SSLSocketFactory sf = HttpsURLConnection.getDefaultSSLSocketFactory(); if (!sf.equals(SSLSocketFactory.getDefault())) { fail("incorrect DefaultSSLSocketFactory"); } } /** * javax.net.ssl.HttpsURLConnection#getHostnameVerifier() */ public final void test_getHostnameVerifier() throws Exception { HttpsURLConnection con = new MyHttpsURLConnection( new URL("https://www.fortify.net/")); HostnameVerifier verifyer = con.getHostnameVerifier(); assertNotNull("Hostname verifyer is null", verifyer); assertEquals("Incorrect value of hostname verirfyer", HttpsURLConnection.getDefaultHostnameVerifier(), verifyer); } /** * javax.net.ssl.HttpsURLConnection#getLocalPrincipal() */ public final void test_getLocalPrincipal() throws Exception { URL url = new URL("https://localhost:55555"); HttpsURLConnection connection = (HttpsURLConnection) url.openConnection(); try { connection.getLocalPrincipal(); fail("IllegalStateException wasn't thrown"); } catch (IllegalStateException expected) { } HttpsURLConnection con = new MyHttpsURLConnection(new URL("https://www.fortify.net/"), "X.508"); assertNull(con.getLocalPrincipal()); con = new MyHttpsURLConnection(new URL("https://www.fortify.net/"), "X.509"); assertNotNull("Local principal is null", con.getLocalPrincipal()); } /** * javax.net.ssl.HttpsURLConnection#getPeerPrincipal() */ public final void test_getPeerPrincipal() throws Exception { URL url = new URL("https://localhost:55555"); HttpsURLConnection connection = (HttpsURLConnection) url.openConnection(); try { connection.getPeerPrincipal(); fail("IllegalStateException wasn't thrown"); } catch (IllegalStateException expected) { } HttpsURLConnection con = new MyHttpsURLConnection(new URL("https://www.fortify.net/"), "X.508"); try { Principal p = con.getPeerPrincipal(); fail("SSLPeerUnverifiedException wasn't thrown"); } catch (SSLPeerUnverifiedException expected) { } con = new MyHttpsURLConnection(new URL("https://www.fortify.net/"), "X.509"); Principal p = con.getPeerPrincipal(); assertNotNull(p); } /** * javax.net.ssl.HttpsURLConnection#getServerCertificates() */ public final void test_getServerCertificates() throws Exception { URL url = new URL("https://localhost:55555"); HttpsURLConnection connection = (HttpsURLConnection) url.openConnection(); try { connection.getServerCertificates(); fail("IllegalStateException wasn't thrown"); } catch (IllegalStateException expected) { } HttpsURLConnection con = new MyHttpsURLConnection(new URL("https://www.fortify.net/"), "X.508"); try { con.getServerCertificates(); fail("SSLPeerUnverifiedException wasn't thrown"); } catch (SSLPeerUnverifiedException expected) { } con = new MyHttpsURLConnection(new URL("https://www.fortify.net/"), "X.509"); Certificate[] cert = con.getServerCertificates(); assertNotNull(cert); assertEquals(1, cert.length); } /** * javax.net.ssl.HttpsURLConnection#getSSLSocketFactory() */ public final void test_getSSLSocketFactory() { HttpsURLConnection con = new MyHttpsURLConnection(null); SSLSocketFactory sf = con.getSSLSocketFactory(); if (!sf.equals(SSLSocketFactory.getDefault())) { fail("incorrect DefaultSSLSocketFactory"); } } /** * javax.net.ssl.HttpsURLConnection#setDefaultHostnameVerifier() */ public final void test_setDefaultHostnameVerifier() { try { HttpsURLConnection.setDefaultHostnameVerifier(null); fail("No expected IllegalArgumentException"); } catch (IllegalArgumentException expected) { } HostnameVerifier def = HttpsURLConnection.getDefaultHostnameVerifier(); try { myHostnameVerifier hnv = new myHostnameVerifier(); HttpsURLConnection.setDefaultHostnameVerifier(hnv); assertEquals(hnv, HttpsURLConnection.getDefaultHostnameVerifier()); } finally { HttpsURLConnection.setDefaultHostnameVerifier(def); } } /** * javax.net.ssl.HttpsURLConnection#setHostnameVerifier() */ public final void test_setHostnameVerifier() { HttpsURLConnection con = new MyHttpsURLConnection(null); try { con.setHostnameVerifier(null); fail("No expected IllegalArgumentException"); } catch (IllegalArgumentException expected) { } myHostnameVerifier hnv = new myHostnameVerifier(); con.setHostnameVerifier(hnv); } /** * javax.net.ssl.HttpsURLConnection#setDefaultSSLSocketFactory() */ public final void test_setDefaultSSLSocketFactory() { try { HttpsURLConnection.setDefaultSSLSocketFactory(null); fail("No expected IllegalArgumentException"); } catch (IllegalArgumentException expected) { } SSLSocketFactory ssf = (SSLSocketFactory) SSLSocketFactory .getDefault(); HttpsURLConnection.setDefaultSSLSocketFactory(ssf); } /** * javax.net.ssl.HttpsURLConnection#setSSLSocketFactory() */ public final void test_setSSLSocketFactory() { HttpsURLConnection con = new MyHttpsURLConnection(null); try { con.setSSLSocketFactory(null); fail("No expected IllegalArgumentException"); } catch (IllegalArgumentException expected) { } SSLSocketFactory ssf = (SSLSocketFactory) SSLSocketFactory .getDefault(); con.setSSLSocketFactory(ssf); } } class MyHttpsURLConnection extends javax.net.ssl.HttpsURLConnection { private String typeDone; public MyHttpsURLConnection(URL url) { super(url); } public MyHttpsURLConnection(URL url, String type) { super(url); typeDone = type; } /* * @see javax.net.ssl.HttpsURLConnection#getCipherSuite() */ public String getCipherSuite() { return "CipherSuite"; } /* * @see javax.net.ssl.HttpsURLConnection#getLocalCertificates() */ public Certificate[] getLocalCertificates() { try { CertificateFactory cf = CertificateFactory.getInstance(typeDone); byte[] barr = TestUtils.getX509Certificate_v1(); ByteArrayInputStream bis = new ByteArrayInputStream(barr); Certificate cert = cf.generateCertificate(bis); return new Certificate[] { cert }; } catch (CertificateException se) { return null; } } /* * @see javax.net.ssl.HttpsURLConnection#getServerCertificates() */ public Certificate[] getServerCertificates() throws SSLPeerUnverifiedException { try { CertificateFactory cf = CertificateFactory.getInstance(typeDone); byte[] barr = TestUtils.getX509Certificate_v3(); ByteArrayInputStream bis = new ByteArrayInputStream(barr); Certificate cert = cf.generateCertificate(bis); return new Certificate[] { cert }; } catch (CertificateException se) { throw new SSLPeerUnverifiedException("No server's end-entity certificate"); } } /* * @see java.net.HttpURLConnection#disconnect() */ public void disconnect() { } /* * @see java.net.HttpURLConnection#usingProxy() */ public boolean usingProxy() { return false; } public void connect() { } } class myHostnameVerifier implements HostnameVerifier { myHostnameVerifier() { } public boolean verify(String hostname, SSLSession session) { if (hostname == session.getPeerHost()) { return true; } else return false; } }