{"record":{"id":"0568265211a2516c","repo":"apache/cassandra","slug":"internode-authenticator-parameters-validator-class","errorCode":null,"errorMessage":"internode_authenticator.parameters.validator_class_name is not set","messagePattern":"internode_authenticator\\.parameters\\.validator_class_name is not set","errorType":"exception","errorClass":"ConfigurationException","httpStatus":null,"severity":"error","filePath":"src/java/org/apache/cassandra/auth/MutualTlsInternodeAuthenticator.java","lineNumber":103,"sourceCode":"    private static final String VALIDATOR_CLASS_NAME = \"validator_class_name\";\n    private static final String TRUSTED_PEER_IDENTITIES = \"trusted_peer_identities\";\n    private static final String NODE_IDENTITY = \"node_identity\";\n    private final Logger logger = LoggerFactory.getLogger(this.getClass());\n    private final NoSpamLogger noSpamLogger = NoSpamLogger.getLogger(logger, 30L, TimeUnit.SECONDS);\n    private final MutualTlsCertificateValidator certificateValidator;\n    private final List<String> trustedIdentities;\n    @Nonnull\n    private final MutualTlsCertificateValidityPeriodValidator certificateValidityPeriodValidator;\n    private final DurationSpec.IntMinutesBound certificateValidityWarnThreshold;\n\n    public MutualTlsInternodeAuthenticator(Map<String, String> parameters)\n    {\n        String certificateValidatorClassName = parameters.get(VALIDATOR_CLASS_NAME);\n        if (StringUtils.isEmpty(certificateValidatorClassName))\n        {\n            String message = \"internode_authenticator.parameters.validator_class_name is not set\";\n            logger.error(message);\n            throw new ConfigurationException(message);\n        }\n\n        certificateValidator = ParameterizedClass.newInstance(new ParameterizedClass(certificateValidatorClassName),\n                                                              Arrays.asList(\"\", AuthConfig.class.getPackage().getName()),\n                                                              MutualTlsCertificateValidator.class);\n        Config config = DatabaseDescriptor.getRawConfig();\n\n        if (parameters.containsKey(TRUSTED_PEER_IDENTITIES))\n        {\n            // If trusted_peer_identities identities is configured in cassandra.yaml trust only those identities\n            trustedIdentities = Arrays.stream(parameters.get(TRUSTED_PEER_IDENTITIES).split(\",\"))\n                                      .collect(Collectors.toList());\n        }\n        else\n        {\n            // Otherwise, trust the identities extracted from outbound keystore which is the identity that the node uses\n            // for making outbound connections.\n            trustedIdentities = getIdentitiesFromKeyStore(config.server_encryption_options.outbound_keystore,","sourceCodeStart":85,"sourceCodeEnd":121,"githubUrl":"https://github.com/apache/cassandra/blob/88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1/src/java/org/apache/cassandra/auth/MutualTlsInternodeAuthenticator.java#L85-L121","documentation":"ConfigurationException from the MutualTlsInternodeAuthenticator constructor/setup: internode_authenticator.parameters is present but the mandatory validator_class_name entry is missing, so no certificate validator can be instantiated for internode mTLS. It is a config-completeness guard raised while wiring the internode authenticator.","triggerScenarios":"Thrown at src/java/org/apache/cassandra/auth/MutualTlsInternodeAuthenticator.java:103 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Add validator_class_name under internode_authenticator.parameters pointing to a MutualTlsCertificateValidator implementation","Verify the validator class name is fully qualified and present on the classpath","Provide the companion options (trusted_peer_identities, node_identity) required by the chosen validator"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1","analyzedAt":"2026-09-10T07:29:22.284Z","contentChangedAt":"2026-09-10T07:29:22.284Z","schemaVersion":2},"datasetVersion":"2026-09-17T15:17:12.973Z"}