OpenSslClientCertificateCallback Class — netty Architecture
Architecture documentation for the OpenSslClientCertificateCallback class in ReferenceCountedOpenSslClientContext.java from the netty codebase.
Entity Profile
Dependency Diagram
graph TD 5410a3e2_d64e_83db_1710_aeece8d7bcc5["OpenSslClientCertificateCallback"] f8d0d0ad_c92a_c95d_60dc_9e28ea2de269["ReferenceCountedOpenSslClientContext.java"] 5410a3e2_d64e_83db_1710_aeece8d7bcc5 -->|defined in| f8d0d0ad_c92a_c95d_60dc_9e28ea2de269 5ddfe2db_f794_824d_7909_30c1d80f123b["OpenSslClientCertificateCallback()"] 5410a3e2_d64e_83db_1710_aeece8d7bcc5 -->|method| 5ddfe2db_f794_824d_7909_30c1d80f123b 9846d54e_a7e6_2212_28f9_fe3cc6fa3750["handle()"] 5410a3e2_d64e_83db_1710_aeece8d7bcc5 -->|method| 9846d54e_a7e6_2212_28f9_fe3cc6fa3750 88af137d_bee6_ae66_136d_4f1d8a744b88["supportedClientKeyTypes()"] 5410a3e2_d64e_83db_1710_aeece8d7bcc5 -->|method| 88af137d_bee6_ae66_136d_4f1d8a744b88 94d0a30a_7272_4577_5516_0dd389d52a67["String()"] 5410a3e2_d64e_83db_1710_aeece8d7bcc5 -->|method| 94d0a30a_7272_4577_5516_0dd389d52a67
Relationship Graph
Source Code
handler/src/main/java/io/netty/handler/ssl/ReferenceCountedOpenSslClientContext.java lines 247–327
private static final class OpenSslClientCertificateCallback implements CertificateCallback {
private final Map<Long, ReferenceCountedOpenSslEngine> engines;
private final OpenSslKeyMaterialManager keyManagerHolder;
OpenSslClientCertificateCallback(Map<Long, ReferenceCountedOpenSslEngine> engines,
OpenSslKeyMaterialManager keyManagerHolder) {
this.engines = engines;
this.keyManagerHolder = keyManagerHolder;
}
@Override
public void handle(long ssl, byte[] keyTypeBytes, byte[][] asn1DerEncodedPrincipals) throws Exception {
final ReferenceCountedOpenSslEngine engine = engines.get(ssl);
// May be null if it was destroyed in the meantime.
if (engine == null) {
return;
}
try {
final String[] keyTypes = supportedClientKeyTypes(keyTypeBytes);
final X500Principal[] issuers;
if (asn1DerEncodedPrincipals == null) {
issuers = null;
} else {
issuers = new X500Principal[asn1DerEncodedPrincipals.length];
for (int i = 0; i < asn1DerEncodedPrincipals.length; i++) {
issuers[i] = new X500Principal(asn1DerEncodedPrincipals[i]);
}
}
keyManagerHolder.setKeyMaterialClientSide(engine, keyTypes, issuers);
} catch (Throwable cause) {
engine.initHandshakeException(cause);
if (cause instanceof Exception) {
throw (Exception) cause;
}
throw new SSLException(cause);
}
}
/**
* Gets the supported key types for client certificates.
*
* @param clientCertificateTypes {@code ClientCertificateType} values provided by the server.
* See https://www.ietf.org/assignments/tls-parameters/tls-parameters.xml.
* @return supported key types that can be used in {@code X509KeyManager.chooseClientAlias} and
* {@code X509ExtendedKeyManager.chooseEngineClientAlias}.
*/
private static String[] supportedClientKeyTypes(byte[] clientCertificateTypes) {
if (clientCertificateTypes == null) {
// Try all of the supported key types.
return SUPPORTED_KEY_TYPES.clone();
}
Set<String> result = new HashSet<>(clientCertificateTypes.length);
for (byte keyTypeCode : clientCertificateTypes) {
String keyType = clientKeyType(keyTypeCode);
if (keyType == null) {
// Unsupported client key type -- ignore
continue;
}
result.add(keyType);
}
return result.toArray(EmptyArrays.EMPTY_STRINGS);
}
private static String clientKeyType(byte clientCertificateType) {
// See also https://www.ietf.org/assignments/tls-parameters/tls-parameters.xml
switch (clientCertificateType) {
case CertificateCallback.TLS_CT_RSA_SIGN:
return OpenSslKeyMaterialManager.KEY_TYPE_RSA; // RFC rsa_sign
case CertificateCallback.TLS_CT_RSA_FIXED_DH:
return OpenSslKeyMaterialManager.KEY_TYPE_DH_RSA; // RFC rsa_fixed_dh
case CertificateCallback.TLS_CT_ECDSA_SIGN:
return OpenSslKeyMaterialManager.KEY_TYPE_EC; // RFC ecdsa_sign
case CertificateCallback.TLS_CT_RSA_FIXED_ECDH:
return OpenSslKeyMaterialManager.KEY_TYPE_EC_RSA; // RFC rsa_fixed_ecdh
case CertificateCallback.TLS_CT_ECDSA_FIXED_ECDH:
return OpenSslKeyMaterialManager.KEY_TYPE_EC_EC; // RFC ecdsa_fixed_ecdh
default:
return null;
}
}
}
Source
Frequently Asked Questions
What is the OpenSslClientCertificateCallback class?
OpenSslClientCertificateCallback is a class in the netty codebase, defined in handler/src/main/java/io/netty/handler/ssl/ReferenceCountedOpenSslClientContext.java.
Where is OpenSslClientCertificateCallback defined?
OpenSslClientCertificateCallback is defined in handler/src/main/java/io/netty/handler/ssl/ReferenceCountedOpenSslClientContext.java at line 247.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free