APIdia Launch Partner
Top Description Fields Constructors Methods
sun.security.ssl

pack-priv final Class X509TrustManagerImpl

extends X509ExtendedTrustManager
Class Inheritance
Imports
java.net.Socket, java.security.*, java.security.cert.*, java.util.*, java.util.concurrent.locks.ReentrantLock, javax.net.ssl.*, sun.security.ssl.SSLAlgorithmConstraints.SIGNATURE_CONSTRAINTS_MODE, sun.security.util.AnchorCertificates, .HostnameChecker, sun.security.validator.*

This class implements the SunJSSE X.509 trust manager using the internal validator API in J2SE core. The logic in this class is minimal.

This class supports both the Simple validation algorithm from previous JSSE versions and PKIX validation.

Author
Andreas Sterbenz

Field Summary

Modifier and TypeField and Description
private volatile Validator
private final PKIXBuilderParameters
private volatile Validator
private final Collection<X509Certificate>
trustedCerts

The Set of trusted X509Certificates.

private final ReentrantLock
private final String

Constructor Summary

AccessConstructor and Description
pack-priv
X509TrustManagerImpl(String validatorType, Collection<X509Certificate> trustedCerts)

pack-priv

Method Summary

Modifier and TypeMethod and Description
public void
checkClientTrusted(X509Certificate[] chain, String authType)

Implements javax.net.ssl.X509TrustManager.checkClientTrusted.

Given the partial or complete certificate chain provided by the peer, build a certificate path to a trusted root and return if it can be validated and is trusted for client SSL authentication based on the authentication type.

public void
checkClientTrusted(X509Certificate[] chain, String authType, Socket socket)

Implements abstract javax.net.ssl.X509ExtendedTrustManager.checkClientTrusted.

Given the partial or complete certificate chain provided by the peer, build and validate the certificate path based on the authentication type and ssl parameters.

public void
checkClientTrusted(X509Certificate[] chain, String authType, SSLEngine engine)

Implements abstract javax.net.ssl.X509ExtendedTrustManager.checkClientTrusted.

Given the partial or complete certificate chain provided by the peer, build and validate the certificate path based on the authentication type and ssl parameters.

public void
checkClientTrusted(X509Certificate[] chain, String authType, QuicTLSEngineImpl quicTLSEngine)

pack-priv static void
checkIdentity(SSLSession session, X509Certificate[] trustedChain, String algorithm, boolean checkClientTrusted)

pack-priv static void
checkIdentity(String hostname, X509Certificate cert, String algorithm)

private static void
checkIdentity(String hostname, X509Certificate cert, String algorithm, boolean chainsToPublicCA)

public void
checkServerTrusted(X509Certificate[] chain, String authType)

Implements javax.net.ssl.X509TrustManager.checkServerTrusted.

Given the partial or complete certificate chain provided by the peer, build a certificate path to a trusted root and return if it can be validated and is trusted for server SSL authentication based on the authentication type.

public void
checkServerTrusted(X509Certificate[] chain, String authType, Socket socket)

Implements abstract javax.net.ssl.X509ExtendedTrustManager.checkServerTrusted.

Given the partial or complete certificate chain provided by the peer, build and validate the certificate path based on the authentication type and ssl parameters.

public void
checkServerTrusted(X509Certificate[] chain, String authType, SSLEngine engine)

Implements abstract javax.net.ssl.X509ExtendedTrustManager.checkServerTrusted.

Given the partial or complete certificate chain provided by the peer, build and validate the certificate path based on the authentication type and ssl parameters.

pack-priv void
checkServerTrusted(X509Certificate[] chain, String authType, QuicTLSEngineImpl quicTLSEngine)

private void
checkTrusted(X509Certificate[] chain, String authType, Socket socket, boolean checkClientTrusted)

private void
checkTrusted(X509Certificate[] chain, String authType, SSLEngine engine, boolean checkClientTrusted)

private void
checkTrusted(X509Certificate[] chain, String authType, QuicTLSEngineImpl quicTLSEngine, boolean checkClientTrusted)

private Validator
checkTrustedInit(X509Certificate[] chain, String authType, boolean checkClientTrusted)

private void
findTrustedCertificate(X509Certificate[] chain, String authType, SSLSession session, AlgorithmConstraints constraints, String identityAlg, boolean checkClientTrusted)

public X509Certificate[]
getAcceptedIssuers()

Implements javax.net.ssl.X509TrustManager.getAcceptedIssuers.

Return an array of certificate authority certificates which are trusted for authenticating peers.

private static String
pack-priv static List<SNIServerName>
pack-priv static List<SNIServerName>
pack-priv static List<SNIServerName>
private static List<SNIServerName>
private Validator

Field Detail

clientValidatorback to summary
private volatile Validator clientValidator
pkixParamsback to summary
private final PKIXBuilderParameters pkixParams
serverValidatorback to summary
private volatile Validator serverValidator
trustedCertsback to summary
private final Collection<X509Certificate> trustedCerts

The Set of trusted X509Certificates.

validatorLockback to summary
private final ReentrantLock validatorLock
validatorTypeback to summary
private final String validatorType

Constructor Detail

X509TrustManagerImplback to summary
pack-priv X509TrustManagerImpl(String validatorType, Collection<X509Certificate> trustedCerts)
X509TrustManagerImplback to summary
pack-priv X509TrustManagerImpl(String validatorType, PKIXBuilderParameters params)

Method Detail

checkClientTrustedback to summary
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException

Implements javax.net.ssl.X509TrustManager.checkClientTrusted.

Doc from javax.net.ssl.X509TrustManager.checkClientTrusted.

Given the partial or complete certificate chain provided by the peer, build a certificate path to a trusted root and return if it can be validated and is trusted for client SSL authentication based on the authentication type.

The authentication type is determined by the actual certificate used. For instance, if RSAPublicKey is used, the authType should be "RSA". Checking is case-sensitive.

Annotations
@Override
Exceptions
CertificateException:
if the certificate chain is not trusted by this TrustManager.
checkClientTrustedback to summary
public void checkClientTrusted(X509Certificate[] chain, String authType, Socket socket) throws CertificateException

Implements abstract javax.net.ssl.X509ExtendedTrustManager.checkClientTrusted.

Doc from javax.net.ssl.X509ExtendedTrustManager.checkClientTrusted.

Given the partial or complete certificate chain provided by the peer, build and validate the certificate path based on the authentication type and ssl parameters.

The authentication type is determined by the actual certificate used. For instance, if RSAPublicKey is used, the authType should be "RSA". Checking is case-sensitive.

If the socket parameter is an instance of javax.net.ssl.SSLSocket, and the endpoint identification algorithm of the SSLParameters is non-empty, to prevent man-in-the-middle attacks, the address that the socket connected to should be checked against the peer's identity presented in the end-entity X509 certificate, as specified in the endpoint identification algorithm.

If the socket parameter is an instance of javax.net.ssl.SSLSocket, and the algorithm constraints of the SSLParameters is non-null, for every certificate in the certification path, fields such as subject public key, the signature algorithm, key usage, extended key usage, etc. need to conform to the algorithm constraints in place on this socket.

Annotations
@Override
Exceptions
CertificateException:
if the certificate chain is not trusted by this TrustManager
checkClientTrustedback to summary
public void checkClientTrusted(X509Certificate[] chain, String authType, SSLEngine engine) throws CertificateException

Implements abstract javax.net.ssl.X509ExtendedTrustManager.checkClientTrusted.

Doc from javax.net.ssl.X509ExtendedTrustManager.checkClientTrusted.

Given the partial or complete certificate chain provided by the peer, build and validate the certificate path based on the authentication type and ssl parameters.

The authentication type is determined by the actual certificate used. For instance, if RSAPublicKey is used, the authType should be "RSA". Checking is case-sensitive.

If the engine parameter is available, and the endpoint identification algorithm of the SSLParameters is non-empty, to prevent man-in-the-middle attacks, the address that the engine connected to should be checked against the peer's identity presented in the end-entity X509 certificate, as specified in the endpoint identification algorithm.

If the engine parameter is available, and the algorithm constraints of the SSLParameters is non-null, for every certificate in the certification path, fields such as subject public key, the signature algorithm, key usage, extended key usage, etc. need to conform to the algorithm constraints in place on this engine.

Annotations
@Override
Exceptions
CertificateException:
if the certificate chain is not trusted by this TrustManager
checkClientTrustedback to summary
public void checkClientTrusted(X509Certificate[] chain, String authType, QuicTLSEngineImpl quicTLSEngine) throws CertificateException
checkIdentityback to summary
pack-priv static void checkIdentity(SSLSession session, X509Certificate[] trustedChain, String algorithm, boolean checkClientTrusted) throws CertificateException
checkIdentityback to summary
pack-priv static void checkIdentity(String hostname, X509Certificate cert, String algorithm) throws CertificateException
checkIdentityback to summary
private static void checkIdentity(String hostname, X509Certificate cert, String algorithm, boolean chainsToPublicCA) throws CertificateException
checkServerTrustedback to summary
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException

Implements javax.net.ssl.X509TrustManager.checkServerTrusted.

Doc from javax.net.ssl.X509TrustManager.checkServerTrusted.

Given the partial or complete certificate chain provided by the peer, build a certificate path to a trusted root and return if it can be validated and is trusted for server SSL authentication based on the authentication type.

The authentication type is the key exchange algorithm portion of the cipher suites represented as a String, such as "RSA", "DHE_DSS".

Note

for some exportable cipher suites, the key exchange algorithm is determined at run time during the handshake. For instance, for TLS_RSA_EXPORT_WITH_RC4_40_MD5, the authType should be RSA_EXPORT when an ephemeral RSA key is used for the key exchange, and RSA when the key from the server certificate is used. Checking is case-sensitive.

Annotations
@Override
Exceptions
CertificateException:
if the certificate chain is not trusted by this TrustManager.
checkServerTrustedback to summary
public void checkServerTrusted(X509Certificate[] chain, String authType, Socket socket) throws CertificateException

Implements abstract javax.net.ssl.X509ExtendedTrustManager.checkServerTrusted.

Doc from javax.net.ssl.X509ExtendedTrustManager.checkServerTrusted.

Given the partial or complete certificate chain provided by the peer, build and validate the certificate path based on the authentication type and ssl parameters.

The authentication type is the key exchange algorithm portion of the cipher suites represented as a String, such as "RSA", "DHE_DSS".

Note

for some exportable cipher suites, the key exchange algorithm is determined at run time during the handshake. For instance, for TLS_RSA_EXPORT_WITH_RC4_40_MD5, the authType should be RSA_EXPORT when an ephemeral RSA key is used for the key exchange, and RSA when the key from the server certificate is used. Checking is case-sensitive.

If the socket parameter is an instance of javax.net.ssl.SSLSocket, and the endpoint identification algorithm of the SSLParameters is non-empty, to prevent man-in-the-middle attacks, the address that the socket connected to should be checked against the peer's identity presented in the end-entity X509 certificate, as specified in the endpoint identification algorithm.

If the socket parameter is an instance of javax.net.ssl.SSLSocket, and the algorithm constraints of the SSLParameters is non-null, for every certificate in the certification path, fields such as subject public key, the signature algorithm, key usage, extended key usage, etc. need to conform to the algorithm constraints in place on this socket.

Annotations
@Override
Exceptions
CertificateException:
if the certificate chain is not trusted by this TrustManager
checkServerTrustedback to summary
public void checkServerTrusted(X509Certificate[] chain, String authType, SSLEngine engine) throws CertificateException

Implements abstract javax.net.ssl.X509ExtendedTrustManager.checkServerTrusted.

Doc from javax.net.ssl.X509ExtendedTrustManager.checkServerTrusted.

Given the partial or complete certificate chain provided by the peer, build and validate the certificate path based on the authentication type and ssl parameters.

The authentication type is the key exchange algorithm portion of the cipher suites represented as a String, such as "RSA", "DHE_DSS".

Note

for some exportable cipher suites, the key exchange algorithm is determined at run time during the handshake. For instance, for TLS_RSA_EXPORT_WITH_RC4_40_MD5, the authType should be RSA_EXPORT when an ephemeral RSA key is used for the key exchange, and RSA when the key from the server certificate is used. Checking is case-sensitive.

If the engine parameter is available, and the endpoint identification algorithm of the SSLParameters is non-empty, to prevent man-in-the-middle attacks, the address that the engine connected to should be checked against the peer's identity presented in the end-entity X509 certificate, as specified in the endpoint identification algorithm.

If the engine parameter is available, and the algorithm constraints of the SSLParameters is non-null, for every certificate in the certification path, fields such as subject public key, the signature algorithm, key usage, extended key usage, etc. need to conform to the algorithm constraints in place on this engine.

Annotations
@Override
Exceptions
CertificateException:
if the certificate chain is not trusted by this TrustManager
checkServerTrustedback to summary
pack-priv void checkServerTrusted(X509Certificate[] chain, String authType, QuicTLSEngineImpl quicTLSEngine) throws CertificateException
checkTrustedback to summary
private void checkTrusted(X509Certificate[] chain, String authType, Socket socket, boolean checkClientTrusted) throws CertificateException
checkTrustedback to summary
private void checkTrusted(X509Certificate[] chain, String authType, SSLEngine engine, boolean checkClientTrusted) throws CertificateException
checkTrustedback to summary
private void checkTrusted(X509Certificate[] chain, String authType, QuicTLSEngineImpl quicTLSEngine, boolean checkClientTrusted) throws CertificateException
checkTrustedInitback to summary
private Validator checkTrustedInit(X509Certificate[] chain, String authType, boolean checkClientTrusted)
findTrustedCertificateback to summary
private void findTrustedCertificate(X509Certificate[] chain, String authType, SSLSession session, AlgorithmConstraints constraints, String identityAlg, boolean checkClientTrusted) throws CertificateException
getAcceptedIssuersback to summary
public X509Certificate[] getAcceptedIssuers()

Implements javax.net.ssl.X509TrustManager.getAcceptedIssuers.

Doc from javax.net.ssl.X509TrustManager.getAcceptedIssuers.

Return an array of certificate authority certificates which are trusted for authenticating peers.

Annotations
@Override
getHostNameInSNIback to summary
private static String getHostNameInSNI(List<SNIServerName> sniNames)
getRequestedServerNamesback to summary
pack-priv static List<SNIServerName> getRequestedServerNames(Socket socket)
getRequestedServerNamesback to summary
pack-priv static List<SNIServerName> getRequestedServerNames(SSLEngine engine)
getRequestedServerNamesback to summary
pack-priv static List<SNIServerName> getRequestedServerNames(QuicTLSEngineImpl engine)
getRequestedServerNamesback to summary
private static List<SNIServerName> getRequestedServerNames(SSLSession session)
getValidatorback to summary
private Validator getValidator(String variant)