001: /*
002: * BEGIN_HEADER - DO NOT EDIT
003: *
004: * The contents of this file are subject to the terms
005: * of the Common Development and Distribution License
006: * (the "License"). You may not use this file except
007: * in compliance with the License.
008: *
009: * You can obtain a copy of the license at
010: * https://open-esb.dev.java.net/public/CDDLv1.0.html.
011: * See the License for the specific language governing
012: * permissions and limitations under the License.
013: *
014: * When distributing Covered Code, include this CDDL
015: * HEADER in each file and include the License file at
016: * https://open-esb.dev.java.net/public/CDDLv1.0.html.
017: * If applicable add the following below this CDDL HEADER,
018: * with the fields enclosed by brackets "[]" replaced with
019: * your own identifying information: Portions Copyright
020: * [year] [name of copyright owner]
021: */
022:
023: /*
024: * @(#)DefaultHostnameVerifier.java
025: * Copyright 2004-2007 Sun Microsystems, Inc. All Rights Reserved.
026: *
027: * END_HEADER - DO NOT EDIT
028: */
029: /**
030: * DefaultHostnameVerifier.java
031: *
032: * SUN PROPRIETARY/CONFIDENTIAL.
033: * This software is the proprietary information of Sun Microsystems, Inc.
034: * Use is subject to license terms.
035: *
036: * Created on October 20, 2004, 5:33 PM
037: */package com.sun.jbi.internal.security.https;
038:
039: import com.sun.jbi.StringTranslator;
040:
041: import java.net.InetAddress;
042: import java.net.UnknownHostException;
043: import java.util.logging.Logger;
044: import javax.net.ssl.SSLSession;
045:
046: /**
047: * The default hostname verifier is throwing a java.io.IOException:
048: * HTTPS hostname wrong: should be [hostname] ( this was probably due
049: * to a failure to map the IP to the hostname.
050: *
051: * @author Sun Microsystems, Inc.
052: */
053: public class DefaultHostnameVerifier implements
054: javax.net.ssl.HostnameVerifier {
055: /** The Logger */
056: private Logger mLogger = null;
057:
058: /** The String Translator. */
059: private StringTranslator mTranslator;
060:
061: /**
062: * Creates a new instance of DefaultHostnameVerifier.
063: *
064: * @param translator is the StringTranslator
065: */
066: public DefaultHostnameVerifier(StringTranslator translator) {
067: mLogger = Logger
068: .getLogger(com.sun.jbi.internal.security.Constants.PACKAGE);
069: mTranslator = translator;
070: }
071:
072: /**
073: *
074: * @param urlHostName is the Hostname from the Service URL
075: * @param session is the SSL Session
076: * @return true if verified.
077: */
078: public boolean verify(String urlHostName, SSLSession session) {
079: InetAddress[] urlHostAddresses = null;
080: InetAddress[] peerHostAddresses = null;
081: try {
082: urlHostAddresses = InetAddress.getAllByName(urlHostName);
083: peerHostAddresses = InetAddress.getAllByName(session
084: .getPeerHost());
085: } catch (UnknownHostException uhex) {
086: // -- Log the exception
087: mLogger.warning(uhex.toString());
088: return false;
089: }
090:
091: // -- Maybe there is a better way of doing this comparison,
092: // -- but the list of ip addresses on a multihomed system should be small.
093:
094: for (int i = 0; i < urlHostAddresses.length; i++) {
095: // -- Compare each urlHostIP to each peerHostIP
096: for (int j = 0; j < peerHostAddresses.length; j++) {
097: if (urlHostAddresses[i].equals(peerHostAddresses[j])) {
098: return true;
099: }
100:
101: }
102: }
103: mLogger.severe(mTranslator.getString(
104: HttpConstants.BC_ERR_HOSTNAME_VERIFICATION_FAILED,
105: urlHostName, session.getPeerHost()));
106: return false;
107: }
108:
109: }
|