{"record":{"id":"803651d6a7f92e13","repo":"apache/hadoop","slug":"property-s-not-specified","errorCode":null,"errorMessage":"Property %s not specified","messagePattern":"Property (.+?) not specified","errorType":"exception","errorClass":"IOException","httpStatus":null,"severity":"error","filePath":"hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/http/HttpServer2.java","lineNumber":472,"sourceCode":"      if (passchars == null) {\n        return null;\n      }\n      return new String(passchars);\n    }\n\n    /**\n     * Load SSL properties from the SSL configuration.\n     */\n    private void loadSSLConfiguration() throws IOException {\n      if (sslConf == null) {\n        return;\n      }\n      needsClientAuth = sslConf.getBoolean(\n          SSLFactory.SSL_SERVER_NEED_CLIENT_AUTH,\n          SSLFactory.SSL_SERVER_NEED_CLIENT_AUTH_DEFAULT);\n      keyStore = sslConf.getTrimmed(SSLFactory.SSL_SERVER_KEYSTORE_LOCATION);\n      if (keyStore == null || keyStore.isEmpty()) {\n        throw new IOException(String.format(\"Property %s not specified\",\n            SSLFactory.SSL_SERVER_KEYSTORE_LOCATION));\n      }\n      keyStorePassword = getPasswordString(sslConf,\n          SSLFactory.SSL_SERVER_KEYSTORE_PASSWORD);\n      if (keyStorePassword == null) {\n        throw new IOException(String.format(\"Property %s not specified\",\n            SSLFactory.SSL_SERVER_KEYSTORE_PASSWORD));\n      }\n      keyStoreType = sslConf.get(SSLFactory.SSL_SERVER_KEYSTORE_TYPE,\n          SSLFactory.SSL_SERVER_KEYSTORE_TYPE_DEFAULT);\n      keyPassword = getPasswordString(sslConf,\n          SSLFactory.SSL_SERVER_KEYSTORE_KEYPASSWORD);\n      trustStore = sslConf.get(SSLFactory.SSL_SERVER_TRUSTSTORE_LOCATION);\n      trustStorePassword = getPasswordString(sslConf,\n          SSLFactory.SSL_SERVER_TRUSTSTORE_PASSWORD);\n      trustStoreType = sslConf.get(SSLFactory.SSL_SERVER_TRUSTSTORE_TYPE,\n          SSLFactory.SSL_SERVER_TRUSTSTORE_TYPE_DEFAULT);\n      excludeCiphers = sslConf.get(SSLFactory.SSL_SERVER_EXCLUDE_CIPHER_LIST);","sourceCodeStart":454,"sourceCodeEnd":490,"githubUrl":"https://github.com/apache/hadoop/blob/2add9630210752f88ceb1bb74eb65e37bf41da8e/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/http/HttpServer2.java#L454-L490","documentation":"HttpServer2.Builder.loadSSLConfiguration() runs when the builder was given an SSL configuration (HTTPS enabled). It requires ssl.server.keystore.location to be present and non-blank (read with getTrimmed) and throws IOException naming the missing property. This is the first and most common check hit when enabling TLS on any Hadoop daemon's web UI.","triggerScenarios":"Starting NameNode/DataNode/JournalNode/JobHistory/KMS/HttpFS with HTTP-level SSL enabled (hadoop.ssl.enabled / service HTTPS settings that load ssl-server.xml) where ssl-server.xml lacks ssl.server.keystore.location or the property value is empty/whitespace.","commonSituations":"Enabling TLS but forgetting to deploy ssl-server.xml to that node; a typo'd property name; an empty <value/> tag; pointing at a keystore path that is set on one host but not others in the cluster.","solutions":["Add <property><name>ssl.server.keystore.location</name><value>/etc/security/keystores/server.jks</value></property> to ssl-server.xml on the node (and typically all nodes)","Confirm the ssl-server.xml is actually being loaded and the property name matches exactly (no trailing spaces)","Verify the keystore file exists and is readable by the daemon user at that path","If SSL was enabled unintentionally, fix the hadoop.ssl.enabled / service HTTP-vs-HTTPS setting instead"],"exampleFix":"<!-- ssl-server.xml before: missing keystore location -->\n<configuration/>\n\n<!-- after -->\n<configuration>\n  <property>\n    <name>ssl.server.keystore.location</name>\n    <value>/etc/security/keystores/server.jks</value>\n  </property>\n</configuration>","handlingStrategy":"validation","validationCode":"Configuration ssl = new Configuration(false);\nssl.addResource(\"ssl-server.xml\");\nString ks = ssl.getTrimmed(\"ssl.server.keystore.location\");\nif (ks == null || ks.isEmpty() || !new File(ks).canRead()) {\n  throw new ConfigValidationException(\"ssl.server.keystore.location missing or unreadable: \" + ks);\n}\nnew HttpServer2.Builder()...build();","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Add a config lint step to cluster deployment that validates ssl-server.xml on every node","Template ssl-server.xml with required keys so the keystore location can never be omitted","Monitor daemon startup logs for 'Property ssl.server.' messages during TLS rollouts"],"tags":["hadoop","ssl","tls","keystore","configuration","http-server"],"backgroundTag":"missing-ssl-keystore-config","analyzedSha":"2add9630210752f88ceb1bb74eb65e37bf41da8e","analyzedAt":"2026-08-22T19:55:07.957Z","schemaVersion":2},"datasetVersion":"2026-08-22T20:17:22.307Z"}