SNIHostName
public final class SNIHostName
extends SNIServerName
java.lang.Object | ||
↳ | javax.net.ssl.SNIServerName | |
↳ | javax.net.ssl.SNIHostName |
Instances of this class represent a server name of type 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.
Summary
Public constructors | |
---|---|
SNIHostName(byte[] encoded) Creates an | |
SNIHostName(String hostname) Creates an |
Public methods | |
---|---|
static SNIMatcher | createSNIMatcher(String regex) Creates an |
boolean | equals(Object other) Compares this server name to the specified object. |
String | getAsciiName() Returns the |
int | hashCode() Returns a hash code value for this |
String | toString() Returns a string representation of the object, including the DNS hostname in this |
Inherited methods | |
---|---|
Public constructors
SNIHostName
public SNIHostName (byte[] encoded)
Creates an 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.SNIHostName(String)
instead.
The encoded
argument is illegal if it:
-
encoded
is empty, -
encoded
ends with a trailing dot, -
encoded
is not encoded inStandardCharsets.US_ASCII
orStandardCharsets.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.
Parameters | |
---|---|
encoded | byte : the encoded hostname of this server name |
Throws | |
---|---|
NullPointerException | if encoded is null |
IllegalArgumentException | if encoded is illegal |
SNIHostName
public SNIHostName (String hostname)
Creates an 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.
Parameters | |
---|---|
hostname | String : the hostname of this server name |
Throws | |
---|---|
NullPointerException | if hostname is null |
IllegalArgumentException | if hostname is illegal |
Public methods
createSNIMatcher
public static SNIMatcher createSNIMatcher (String regex)
Creates an 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");
SNIMatcher matcher = SNIHostName.createSNIMatcher("www\\.example\\.(com|org)");
Parameters | |
---|---|
regex | String : the regular expression pattern representing the hostname(s) to match |
Returns | |
---|---|
SNIMatcher | a SNIMatcher object for SNIHostName s |
Throws | |
---|---|
NullPointerException | if regex is null |
PatternSyntaxException | if the regular expression's syntax is invalid |
equals
public boolean equals (Object other)
Compares this server name to the specified object.
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.
Parameters | |
---|---|
other | Object : the other server name object to compare with. |
Returns | |
---|---|
boolean | true if, and only if, the other is considered equal to this instance |
getAsciiName
public String getAsciiName ()
Returns the 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.
Returns | |
---|---|
String | the StandardCharsets.US_ASCII -compliant hostname of this SNIHostName object |
hashCode
public int hashCode ()
Returns a hash code value for this SNIHostName
.
The hash code value is generated using the case-insensitive hostname of this SNIHostName
.
Returns | |
---|---|
int | a hash code value for this SNIHostName . |
toString
public String toString ()
Returns a string representation of the object, including the DNS hostname in this 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>"
"type=host_name (0), value=www.example.com"
"type=host_name (0), value=xn--fsqu00a.xn--0zwm56d"
Please NOTE that the exact details of the representation are unspecified and subject to change.
Returns | |
---|---|
String | a string representation of the object. |