public final class SNIHostName extends SNIServerName
host_name
in a Server Name
Indication (SNI) extension.
As described in section 3, "Server Name Indication", of TLS Extensions (RFC 6066), "HostName" contains the fully qualified DNS hostname of the server, as understood by the client. The encoded server name value of a hostname is represented as a byte string using ASCII encoding without a trailing dot. This allows the support of Internationalized Domain Names (IDN) through the use of A-labels (the ASCII-Compatible Encoding (ACE) form of a valid string of Internationalized Domain Names for Applications (IDNA)) defined in RFC 5890.
Note that SNIHostName
objects are immutable.
SNIServerName
,
StandardConstants.SNI_HOST_NAME
Constructor and Description |
---|
SNIHostName(byte[] encoded)
Creates an
SNIHostName using the specified encoded value. |
SNIHostName(String hostname)
Creates an
SNIHostName using the specified hostname. |
Modifier and Type | Method and Description |
---|---|
static SNIMatcher |
createSNIMatcher(String regex)
Creates an
SNIMatcher object for SNIHostName s. |
boolean |
equals(Object other)
Compares this server name to the specified object.
|
String |
getAsciiName()
Returns the
StandardCharsets.US_ASCII -compliant hostname of
this SNIHostName object. |
int |
hashCode()
Returns a hash code value for this
SNIHostName . |
String |
toString()
Returns a string representation of the object, including the DNS
hostname in this
SNIHostName object. |
getEncoded, getType
public SNIHostName(String hostname)
SNIHostName
using the specified hostname.
Note that per RFC 6066,
the encoded server name value of a hostname is
StandardCharsets.US_ASCII
-compliant. In this method,
hostname
can be a user-friendly Internationalized Domain Name
(IDN). IDN.toASCII(String, int)
is used to enforce the
restrictions on ASCII characters in hostnames (see
RFC 3490,
RFC 1122,
RFC 1123) and
translate the hostname
into ASCII Compatible Encoding (ACE), as:
IDN.toASCII(hostname, IDN.USE_STD3_ASCII_RULES);
The hostname
argument is illegal if it:
hostname
is empty,hostname
ends with a trailing dot,hostname
is not a valid Internationalized
Domain Name (IDN) compliant with the RFC 3490 specification.hostname
- the hostname of this server nameNullPointerException
- if hostname
is null
IllegalArgumentException
- if hostname
is illegalpublic SNIHostName(byte[] encoded)
SNIHostName
using the specified encoded value.
This method is normally used to parse the encoded name value in a requested SNI extension.
Per RFC 6066,
the encoded name value of a hostname is
StandardCharsets.US_ASCII
-compliant. However, in the previous
version of the SNI extension (
RFC 4366),
the encoded hostname is represented as a byte string using UTF-8
encoding. For the purpose of version tolerance, this method allows
that the charset of encoded
argument can be
StandardCharsets.UTF_8
, as well as
StandardCharsets.US_ASCII
. IDN.toASCII(String)
is used
to translate the encoded
argument into ASCII Compatible
Encoding (ACE) hostname.
It is strongly recommended that this constructor is only used to parse
the encoded name value in a requested SNI extension. Otherwise, to
comply with RFC 6066,
please always use StandardCharsets.US_ASCII
-compliant charset
and enforce the restrictions on ASCII characters in hostnames (see
RFC 3490,
RFC 1122,
RFC 1123)
for encoded
argument, or use
SNIHostName(String)
instead.
The encoded
argument is illegal if it:
encoded
is empty,encoded
ends with a trailing dot,encoded
is not encoded in
StandardCharsets.US_ASCII
or
StandardCharsets.UTF_8
-compliant charset,encoded
is not a valid Internationalized
Domain Name (IDN) compliant with the RFC 3490 specification.
Note that the encoded
byte array is cloned
to protect against subsequent modification.
encoded
- the encoded hostname of this server nameNullPointerException
- if encoded
is null
IllegalArgumentException
- if encoded
is illegalpublic String getAsciiName()
StandardCharsets.US_ASCII
-compliant hostname of
this SNIHostName
object.
Note that, per RFC 6066, the returned hostname may be an internationalized domain name that contains A-labels. See RFC 5890 for more information about the detailed A-label specification.
StandardCharsets.US_ASCII
-compliant hostname
of this SNIHostName
objectpublic boolean equals(Object other)
Per RFC 6066, DNS hostnames are case-insensitive. Two server hostnames are equal if, and only if, they have the same name type, and the hostnames are equal in a case-independent comparison.
equals
in class SNIServerName
other
- the other server name object to compare with.other
is considered
equal to this instanceObject.hashCode()
,
HashMap
public int hashCode()
SNIHostName
.
The hash code value is generated using the case-insensitive hostname
of this SNIHostName
.
hashCode
in class SNIServerName
SNIHostName
.Object.equals(java.lang.Object)
,
System.identityHashCode(java.lang.Object)
public String toString()
SNIHostName
object.
The exact details of the representation are unspecified and subject to change, but the following may be regarded as typical:
"type=host_name (0), value= <hostname>"The "<hostname>" is an ASCII representation of the hostname, which may contains A-labels. For example, a returned value of an pseudo hostname may look like:
"type=host_name (0), value=www.example.com"or
"type=host_name (0), value=xn--fsqu00a.xn--0zwm56d"
Please NOTE that the exact details of the representation are unspecified and subject to change.
toString
in class SNIServerName
public static SNIMatcher createSNIMatcher(String regex)
SNIMatcher
object for SNIHostName
s.
This method can be used by a server to verify the acceptable
SNIHostName
s. For example,
SNIMatcher matcher = SNIHostName.createSNIMatcher("www\\.example\\.com");will accept the hostname "www.example.com".
SNIMatcher matcher = SNIHostName.createSNIMatcher("www\\.example\\.(com|org)");will accept hostnames "www.example.com" and "www.example.org".
regex
- the
regular expression pattern
representing the hostname(s) to matchSNIMatcher
object for SNIHostName
sNullPointerException
- if regex
is
null
PatternSyntaxException
- if the regular expression's
syntax is invalid Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2022, Oracle and/or its affiliates. All rights reserved. Use is subject to license terms. Also see the documentation redistribution policy.